From fe1f9eac3ff7f293cf59006b53c0ef312e9648ea Mon Sep 17 00:00:00 2001 From: qqxhb <1252905006@qq.com> Date: Thu, 20 Apr 2023 12:16:19 +0800 Subject: [PATCH] fix: tag --- examples/cmd/from_object/prepare.go | 2 +- field/association.go | 4 ++-- field/tag.go | 20 ++++++++------------ field_options.go | 10 ++++++++++ internal/generate/export.go | 4 ++-- internal/model/tbl_column.go | 16 ++++++++-------- internal/template/model.go | 6 ++++++ tests/.expect/dal_1/model/users.gen.go | 13 +++++++++---- tests/.expect/dal_2/model/users.gen.go | 13 +++++++++---- tests/.expect/dal_3/model/users.gen.go | 13 +++++++++---- tests/.expect/dal_4/model/users.gen.go | 13 +++++++++---- tests/generate_test.go | 7 ++++++- 12 files changed, 79 insertions(+), 42 deletions(-) diff --git a/examples/cmd/from_object/prepare.go b/examples/cmd/from_object/prepare.go index 30a56b49..5186113a 100644 --- a/examples/cmd/from_object/prepare.go +++ b/examples/cmd/from_object/prepare.go @@ -58,7 +58,7 @@ func (f *DemoField) GORMTag() string { return f.gormTag } func (f *DemoField) JSONTag() string { return f.jsonTag } // Tag return new tag -func (f *DemoField) Tag() field.Tag { return field.NewTag() } +func (f *DemoField) Tag() field.Tag { return field.Tag{} } // Comment return comment func (f *DemoField) Comment() string { return f.comment } diff --git a/field/association.go b/field/association.go index 384d0491..a0f40db0 100644 --- a/field/association.go +++ b/field/association.go @@ -239,13 +239,13 @@ func (c *RelateConfig) RelateFieldPrefix(relationshipType RelationshipType) stri } func (c *RelateConfig) GetTag(fieldName string) Tag { if c == nil { - return NewTag() + return Tag{} } if c.OverwriteTag != nil { return c.OverwriteTag } if c.Tag == nil { - c.Tag = NewTag() + c.Tag = Tag{} } if c.JSONTag == "" { c.JSONTag = ns.ColumnName("", fieldName) diff --git a/field/tag.go b/field/tag.go index 7330af07..e386f04c 100644 --- a/field/tag.go +++ b/field/tag.go @@ -44,16 +44,14 @@ type TagBuilder interface { type Tag map[string]string -func NewTag() Tag { - return Tag{} -} - -func (tag Tag) Set(key, value string) { +func (tag Tag) Set(key, value string) Tag { tag[key] = value + return tag } -func (tag Tag) Remove(key string) { +func (tag Tag) Remove(key string) Tag { delete(tag, key) + return tag } func (tag Tag) Build() string { @@ -75,16 +73,14 @@ func (tag Tag) Build() string { type GormTag Tag -func NewGormTag() GormTag { - return GormTag{} -} - -func (tag GormTag) Set(key, value string) { +func (tag GormTag) Set(key, value string) GormTag { tag[key] = value + return tag } -func (tag GormTag) Remove(key string) { +func (tag GormTag) Remove(key string) GormTag { delete(tag, key) + return tag } func (tag GormTag) Build() string { diff --git a/field_options.go b/field_options.go index 8db9566f..a586e621 100644 --- a/field_options.go +++ b/field_options.go @@ -147,6 +147,16 @@ var ( return m } } + // FieldGORMTagReg specify GORM tag by RegExp + FieldGORMTagReg = func(columnNameReg string, gormTag func(tag field.GormTag) field.GormTag) model.ModifyFieldOpt { + reg := regexp.MustCompile(columnNameReg) + return func(m *model.Field) *model.Field { + if reg.MatchString(m.ColumnName) { + m.GORMTag = gormTag(m.GORMTag) + } + return m + } + } // FieldNewTag add new tag FieldNewTag = func(columnName string, newTag field.Tag) model.ModifyFieldOpt { return func(m *model.Field) *model.Field { diff --git a/internal/generate/export.go b/internal/generate/export.go index 3ee62099..d83fa45b 100644 --- a/internal/generate/export.go +++ b/internal/generate/export.go @@ -87,12 +87,12 @@ func GetQueryStructMetaFromObject(obj helper.Object, conf *model.Config) (*Query for _, fl := range obj.Fields() { tag := fl.Tag() if tag == nil { - tag = field.NewTag() + tag = field.Tag{} } if gt := fl.GORMTag(); gt != "" { tag.Set(field.TagKeyGorm, gt) } - if jt := fl.GORMTag(); jt != "" { + if jt := fl.JSONTag(); jt != "" { tag.Set(field.TagKeyJson, jt) } diff --git a/internal/model/tbl_column.go b/internal/model/tbl_column.go index cee590d3..1e6223ad 100644 --- a/internal/model/tbl_column.go +++ b/internal/model/tbl_column.go @@ -12,11 +12,11 @@ import ( // Column table column's info type Column struct { gorm.ColumnType - TableName string `gorm:"column:TABLE_NAME"` - Indexes []*Index `gorm:"-"` - UseScanType bool `gorm:"-"` + TableName string `gorm:"column:TABLE_NAME"` + Indexes []*Index `gorm:"-"` + UseScanType bool `gorm:"-"` dataTypeMap map[string]func(columnType gorm.ColumnType) (dataType string) `gorm:"-"` - jsonTagNS func(columnName string) string `gorm:"-"` + jsonTagNS func(columnName string) string `gorm:"-"` } // SetDataTypeMap set data type map @@ -82,10 +82,10 @@ func (c *Column) multilineComment() bool { } func (c *Column) buildGormTag() field.GormTag { - tag := field.NewGormTag() - tag.Set(field.TagKeyGormColumn, c.Name()) - tag.Set(field.TagKeyGormType, c.columnType()) - + tag := field.GormTag{ + field.TagKeyGormColumn: c.Name(), + field.TagKeyGormType: c.columnType(), + } isPriKey, ok := c.PrimaryKey() isValidPriKey := ok && isPriKey if isValidPriKey { diff --git a/internal/template/model.go b/internal/template/model.go index 133c7a8b..7c594158 100644 --- a/internal/template/model.go +++ b/internal/template/model.go @@ -19,7 +19,13 @@ import ( // {{.ModelStructName}} {{.StructComment}} type {{.ModelStructName}} struct { {{range .Fields}} + {{if .MultilineComment -}} + /* +{{.ColumnComment}} + */ + {{end -}} {{.Name}} {{.Type}} ` + "`{{.Tags}}` " + + "{{if not .MultilineComment}}{{if .ColumnComment}}// {{.ColumnComment}}{{end}}{{end}}" + `{{end}} } diff --git a/tests/.expect/dal_1/model/users.gen.go b/tests/.expect/dal_1/model/users.gen.go index dc034144..941c5727 100644 --- a/tests/.expect/dal_1/model/users.gen.go +++ b/tests/.expect/dal_1/model/users.gen.go @@ -14,12 +14,17 @@ const TableNameUser = "users" type User struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` CreatedAt time.Time `gorm:"column:created_at" json:"created_at"` - Name string `gorm:"column:name;comment:oneline" json:"name"` + Name string `gorm:"column:name;comment:oneline" json:"name"` // oneline Address string `gorm:"column:address" json:"address"` RegisterTime time.Time `gorm:"column:register_time" json:"register_time"` - Alive bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"alive"` - CompanyID int64 `gorm:"column:company_id;default:666" json:"company_id"` - PrivateURL string `gorm:"column:private_url;default:https://a.b.c" json:"private_url"` + /* + multiline + line1 + line2 + */ + Alive bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"alive"` + CompanyID int64 `gorm:"column:company_id;default:666" json:"company_id"` + PrivateURL string `gorm:"column:private_url;default:https://a.b.c" json:"private_url"` } // TableName User's table name diff --git a/tests/.expect/dal_2/model/users.gen.go b/tests/.expect/dal_2/model/users.gen.go index 0affe0c5..3063dce7 100644 --- a/tests/.expect/dal_2/model/users.gen.go +++ b/tests/.expect/dal_2/model/users.gen.go @@ -14,12 +14,17 @@ const TableNameUser = "users" type User struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"-"` CreatedAt *time.Time `gorm:"column:created_at" json:"-"` - Name *string `gorm:"column:name;index:idx_name,priority:1;comment:oneline" json:"-"` + Name *string `gorm:"column:name;index:idx_name,priority:1;comment:oneline" json:"-"` // oneline Address *string `gorm:"column:address" json:"-"` RegisterTime *time.Time `gorm:"column:register_time" json:"-"` - Alive *bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"-"` - CompanyID *int64 `gorm:"column:company_id;default:666" json:"-"` - PrivateURL *string `gorm:"column:private_url;default:https://a.b.c" json:"-"` + /* + multiline + line1 + line2 + */ + Alive *bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"-"` + CompanyID *int64 `gorm:"column:company_id;default:666" json:"-"` + PrivateURL *string `gorm:"column:private_url;default:https://a.b.c" json:"-"` } // TableName User's table name diff --git a/tests/.expect/dal_3/model/users.gen.go b/tests/.expect/dal_3/model/users.gen.go index 0affe0c5..b9df6533 100644 --- a/tests/.expect/dal_3/model/users.gen.go +++ b/tests/.expect/dal_3/model/users.gen.go @@ -14,12 +14,17 @@ const TableNameUser = "users" type User struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"-"` CreatedAt *time.Time `gorm:"column:created_at" json:"-"` - Name *string `gorm:"column:name;index:idx_name,priority:1;comment:oneline" json:"-"` + Name *string `gorm:"column:name;index:idx_name,priority:1" json:"-"` // oneline Address *string `gorm:"column:address" json:"-"` RegisterTime *time.Time `gorm:"column:register_time" json:"-"` - Alive *bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"-"` - CompanyID *int64 `gorm:"column:company_id;default:666" json:"-"` - PrivateURL *string `gorm:"column:private_url;default:https://a.b.c" json:"-"` + /* + multiline + line1 + line2 + */ + Alive *bool `gorm:"column:alive" json:"-"` + CompanyID *int64 `gorm:"column:company_id;default:666" json:"-"` + PrivateURL *string `gorm:"column:private_url;default:https://a.b.c" json:"-"` } // TableName User's table name diff --git a/tests/.expect/dal_4/model/users.gen.go b/tests/.expect/dal_4/model/users.gen.go index 0affe0c5..3063dce7 100644 --- a/tests/.expect/dal_4/model/users.gen.go +++ b/tests/.expect/dal_4/model/users.gen.go @@ -14,12 +14,17 @@ const TableNameUser = "users" type User struct { ID int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"-"` CreatedAt *time.Time `gorm:"column:created_at" json:"-"` - Name *string `gorm:"column:name;index:idx_name,priority:1;comment:oneline" json:"-"` + Name *string `gorm:"column:name;index:idx_name,priority:1;comment:oneline" json:"-"` // oneline Address *string `gorm:"column:address" json:"-"` RegisterTime *time.Time `gorm:"column:register_time" json:"-"` - Alive *bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"-"` - CompanyID *int64 `gorm:"column:company_id;default:666" json:"-"` - PrivateURL *string `gorm:"column:private_url;default:https://a.b.c" json:"-"` + /* + multiline + line1 + line2 + */ + Alive *bool `gorm:"column:alive;comment:multiline\nline1\nline2" json:"-"` + CompanyID *int64 `gorm:"column:company_id;default:666" json:"-"` + PrivateURL *string `gorm:"column:private_url;default:https://a.b.c" json:"-"` } // TableName User's table name diff --git a/tests/generate_test.go b/tests/generate_test.go index 4cfab569..dac6232d 100644 --- a/tests/generate_test.go +++ b/tests/generate_test.go @@ -10,6 +10,7 @@ import ( "time" "gorm.io/gen" + "gorm.io/gen/field" "gorm.io/gen/tests/diy_method" ) @@ -60,7 +61,11 @@ var generateCase = map[string]func(dir string) *gen.Generator{ }) g.UseDB(DB) g.WithJSONTagNameStrategy(func(c string) string { return "-" }) - g.ApplyBasic(g.GenerateAllTable()...) + g.ApplyBasic(g.GenerateAllTable(gen.FieldGORMTagReg(".", func(tag field.GormTag) field.GormTag { + //tag.Set("serialize","json") + tag.Remove("comment") + return tag + }))...) return g }, generateDirPrefix + "dal_4": func(dir string) *gen.Generator {