Skip to content

Commit

Permalink
Merge pull request #19 from go-gorm/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
tr1v3r authored Aug 6, 2021
2 parents 4bc090c + c1c9c88 commit 1a23f3b
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 38 deletions.
2 changes: 1 addition & 1 deletion do.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ func (d *DO) Order(columns ...field.Expr) Dao {

func (d *DO) Distinct(columns ...field.Expr) Dao {
Emit(methodDistinct)
return NewDO(d.db.Distinct(toInterfaceSlice(toColNames(d.db.Statement, columns...))))
return NewDO(d.db.Distinct(toInterfaceSlice(toColNames(d.db.Statement, columns...))...))
}

func (d *DO) Omit(columns ...field.Expr) Dao {
Expand Down
6 changes: 3 additions & 3 deletions generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,12 +79,12 @@ func (g *Generator) UseDB(db *gorm.DB) {
}

// GenerateModel catch table info from db, return a BaseStruct
func (g *Generator) GenerateModel(name string) *check.BaseStruct {
structs, err := check.GenBaseStructs(g.db, g.Config.ModelPkgName, name)
func (g *Generator) GenerateModel(tableName string, modelName string) *check.BaseStruct {
s, err := check.GenBaseStructs(g.db, g.Config.ModelPkgName, tableName, modelName)
if err != nil {
log.Fatalf("check struct error: %s", err)
}
return structs[0]
return s
}

// ApplyBasic specify models which will implement basic method
Expand Down
2 changes: 1 addition & 1 deletion generator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ func TestConfig(t *testing.T) {

queryPkgName: "query",
}
}
}
3 changes: 1 addition & 2 deletions internal/check/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package check
import (
"fmt"
"reflect"
"strings"

"gorm.io/gorm"

Expand Down Expand Up @@ -31,7 +30,7 @@ func CheckStructs(db *gorm.DB, structs ...interface{}) (bases []*BaseStruct, err
base := &BaseStruct{
S: GetSimpleName(name),
StructName: name,
NewStructName: strings.ToLower(name),
NewStructName: uncaptialize(name),
StructInfo: parser.Param{Type: name, Package: getPackageName(structType.String())},
Source: Struct,
db: db,
Expand Down
72 changes: 44 additions & 28 deletions internal/check/gen_structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,43 +57,46 @@ var dataType = map[string]string{
}

// GenBaseStructs generate db model by table name
func GenBaseStructs(db *gorm.DB, pkg string, tableName ...string) (bases []*BaseStruct, err error) {
func GenBaseStructs(db *gorm.DB, pkg string, tableName, modelName string) (bases *BaseStruct, err error) {
if isDBUndefined(db) {
return nil, fmt.Errorf("gen config db is undefined")
}
if !isModelNameValid(modelName) {
return nil, fmt.Errorf("model name %q is invalid", modelName)
}
if pkg == "" {
pkg = ModelPkg
}
singular := singularModel(db.Config)
dbName := getSchemaName(db)
for _, tb := range tableName {
columns, err := getTbColumns(db, dbName, tb)
if err != nil {
return nil, err
}
var base BaseStruct
base.Source = TableName
base.GenBaseStruct = true
base.TableName = tb
base.StructName = convertToModelName(singular, tb)
base.StructInfo = parser.Param{Type: base.StructName, Package: pkg}
for _, field := range columns {
mt := dataType[field.DataType]
base.Members = append(base.Members, &Member{
Name: nameToCamelCase(field.ColumnName),
Type: mt,
ModelType: mt,
ColumnName: field.ColumnName,
ColumnComment: field.ColumnComment,
})
}

base.NewStructName = strings.ToLower(base.StructName)
base.S = string(base.NewStructName[0])
_ = base.check()
bases = append(bases, &base)
columns, err := getTbColumns(db, dbName, tableName)
if err != nil {
return nil, err
}
return
var base BaseStruct
base.Source = TableName
base.GenBaseStruct = true
base.TableName = tableName
base.StructName = convertToModelName(singular, tableName)
if modelName != "" {
base.StructName = captialize(modelName)
}
base.NewStructName = uncaptialize(base.StructName)
base.S = string(base.NewStructName[0])
base.StructInfo = parser.Param{Type: base.StructName, Package: pkg}
for _, field := range columns {
mt := dataType[field.DataType]
base.Members = append(base.Members, &Member{
Name: nameToCamelCase(field.ColumnName),
Type: mt,
ModelType: mt,
ColumnName: field.ColumnName,
ColumnComment: field.ColumnComment,
})
}

_ = base.check()
return &base, nil
}

//Mysql
Expand Down Expand Up @@ -145,3 +148,16 @@ func singularModel(conf *gorm.Config) bool {
}
return false
}

// get mysql db' name
var modelNameReg = regexp.MustCompile(`^\w+$`)

func isModelNameValid(name string) bool {
if name == "" {
return true
}
if !modelNameReg.MatchString(name) {
return false
}
return (name[0] > '9' || name[0] < '0') && name[0] != '_'
}
16 changes: 16 additions & 0 deletions internal/check/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,3 +89,19 @@ func getStructName(t string) string {
list := strings.Split(t, ".")
return list[len(list)-1]
}

func uncaptialize(s string) string {
if s == "" {
return ""
}

return strings.ToLower(s[:1]) + s[1:]
}

func captialize(s string) string {
if s == "" {
return ""
}

return strings.ToUpper(s[:1]) + s[1:]
}
9 changes: 6 additions & 3 deletions internal/template/tmpl.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 1a23f3b

Please sign in to comment.