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
}
type TableComment interface {
TableComment() string
}
var (
tpTableName = reflect.TypeOf((*TableName)(nil)).Elem()
tpTableComment = reflect.TypeOf((*TableComment)(nil)).Elem()
tvCache sync.Map
)
@ -55,3 +60,12 @@ func GetTableName(mapper Mapper, v reflect.Value) string {
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
}
// 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)
if parser.cacherMgr.GetDefaultCacher() != nil {
@ -324,6 +316,7 @@ func (parser *Parser) Parse(v reflect.Value) (*schemas.Table, error) {
table := schemas.NewEmptyTable()
table.Type = t
table.Name = names.GetTableName(parser.tableMapper, v)
table.Comment = names.GetTableComment(v)
for i := 0; i < t.NumField(); 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"
}
func (p ParseTableName2) TableComment() string {
return "p2_testTableComment"
}
func TestParseTableName(t *testing.T) {
parser := NewParser(
"xorm",
@ -47,6 +51,27 @@ func TestParseTableName(t *testing.T) {
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) {
parser := NewParser(
"xorm",