Modify Comment to TableComment & moved into parser.Parse

This commit is contained in:
fanybook 2021-11-08 11:40:13 +08:00
parent b1d6ec1db5
commit 72efd4ed00
3 changed files with 40 additions and 8 deletions

View File

@ -14,8 +14,13 @@ type TableName interface {
TableName() string TableName() string
} }
type TableComment interface {
TableComment() string
}
var ( var (
tpTableName = reflect.TypeOf((*TableName)(nil)).Elem() tpTableName = reflect.TypeOf((*TableName)(nil)).Elem()
tpTableComment = reflect.TypeOf((*TableComment)(nil)).Elem()
tvCache sync.Map tvCache sync.Map
) )
@ -55,3 +60,12 @@ func GetTableName(mapper Mapper, v reflect.Value) string {
return mapper.Obj2Table(v.Type().Name()) return mapper.Obj2Table(v.Type().Name())
} }
// GetTableComment returns table comment
func GetTableComment(v reflect.Value) string {
if v.Type().Implements(tpTableComment) {
return v.Interface().(TableComment).TableComment()
}
return ""
}

View File

@ -90,14 +90,6 @@ func (parser *Parser) ParseWithCache(v reflect.Value) (*schemas.Table, error) {
return nil, err return nil, err
} }
// if bean has Comment Method, then set table.Comment
if _, ok := t.MethodByName("Comment"); ok {
tableCommentFn := v.MethodByName("Comment")
if tableCommentFn.Type().String() == "func() string" {
table.Comment = fmt.Sprintf("%s", tableCommentFn.Call(nil)[0])
}
}
parser.tableCache.Store(t, table) parser.tableCache.Store(t, table)
if parser.cacherMgr.GetDefaultCacher() != nil { if parser.cacherMgr.GetDefaultCacher() != nil {
@ -324,6 +316,7 @@ func (parser *Parser) Parse(v reflect.Value) (*schemas.Table, error) {
table := schemas.NewEmptyTable() table := schemas.NewEmptyTable()
table.Type = t table.Type = t
table.Name = names.GetTableName(parser.tableMapper, v) table.Name = names.GetTableName(parser.tableMapper, v)
table.Comment = names.GetTableComment(v)
for i := 0; i < t.NumField(); i++ { for i := 0; i < t.NumField(); i++ {
col, err := parser.parseField(table, i, t.Field(i), v.Field(i)) col, err := parser.parseField(table, i, t.Field(i), v.Field(i))

View File

@ -26,6 +26,10 @@ func (p ParseTableName2) TableName() string {
return "p_parseTableName" return "p_parseTableName"
} }
func (p ParseTableName2) TableComment() string {
return "p2_testTableComment"
}
func TestParseTableName(t *testing.T) { func TestParseTableName(t *testing.T) {
parser := NewParser( parser := NewParser(
"xorm", "xorm",
@ -47,6 +51,27 @@ func TestParseTableName(t *testing.T) {
assert.EqualValues(t, "p_parseTableName", table.Name) assert.EqualValues(t, "p_parseTableName", table.Name)
} }
func TestParseTableComment(t *testing.T) {
parser := NewParser(
"xorm",
dialects.QueryDialect("mysql"),
names.SnakeMapper{},
names.SnakeMapper{},
caches.NewManager(),
)
table, err := parser.Parse(reflect.ValueOf(new(ParseTableName1)))
assert.NoError(t, err)
assert.EqualValues(t, "", table.Comment)
table, err = parser.Parse(reflect.ValueOf(new(ParseTableName2)))
assert.NoError(t, err)
assert.EqualValues(t, "p2_testTableComment", table.Comment)
table, err = parser.Parse(reflect.ValueOf(ParseTableName2{}))
assert.NoError(t, err)
assert.EqualValues(t, "p2_testTableComment", table.Comment)
}
func TestUnexportField(t *testing.T) { func TestUnexportField(t *testing.T) {
parser := NewParser( parser := NewParser(
"xorm", "xorm",