diff --git a/cmd/gf/internal/cmd/cmd_z_unit_gen_dao_test.go b/cmd/gf/internal/cmd/cmd_z_unit_gen_dao_test.go index 39e1eb54799..e93f59d3fb2 100644 --- a/cmd/gf/internal/cmd/cmd_z_unit_gen_dao_test.go +++ b/cmd/gf/internal/cmd/cmd_z_unit_gen_dao_test.go @@ -287,6 +287,109 @@ func Test_Gen_Dao_Issue2572(t *testing.T) { _, err = gendao.CGenDao{}.Dao(ctx, in) t.AssertNil(err) - fmt.Println(path) + generatedFiles, err := gfile.ScanDir(path, "*.go", true) + t.AssertNil(err) + t.Assert(len(generatedFiles), 8) + for i, generatedFile := range generatedFiles { + generatedFiles[i] = gstr.TrimLeftStr(generatedFile, path) + } + t.Assert(gstr.InArray(generatedFiles, "/dao/internal/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/dao/internal/user_2.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/dao/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/dao/user_2.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/do/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/do/user_2.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/entity/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/entity/user_2.go"), true) + }) +} + +func Test_Gen_Dao_Issue2616(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + var ( + err error + db = testDB + table1 = "user1" + table2 = "user2" + issueDirPath = gtest.DataPath(`issue`, `2616`) + ) + t.AssertNil(execSqlFile(db, gtest.DataPath(`issue`, `2616`, `sql1.sql`))) + t.AssertNil(execSqlFile(db, gtest.DataPath(`issue`, `2616`, `sql2.sql`))) + defer dropTableWithDb(db, table1) + defer dropTableWithDb(db, table2) + + var ( + path = gfile.Temp(guid.S()) + group = "test" + in = gendao.CGenDaoInput{ + Path: path, + Link: link, + Tables: "", + TablesEx: "", + Group: group, + Prefix: "", + RemovePrefix: "", + JsonCase: "SnakeScreaming", + ImportPrefix: "", + DaoPath: "", + DoPath: "", + EntityPath: "", + TplDaoIndexPath: "", + TplDaoInternalPath: "", + TplDaoDoPath: "", + TplDaoEntityPath: "", + StdTime: false, + WithTime: false, + GJsonSupport: false, + OverwriteDao: false, + DescriptionTag: false, + NoJsonTag: false, + NoModelComment: false, + Clear: false, + TypeMapping: nil, + } + ) + err = gutil.FillStructWithDefault(&in) + t.AssertNil(err) + + err = gfile.Copy(issueDirPath, path) + t.AssertNil(err) + + defer gfile.Remove(path) + + pwd := gfile.Pwd() + err = gfile.Chdir(path) + t.AssertNil(err) + + defer gfile.Chdir(pwd) + + _, err = gendao.CGenDao{}.Dao(ctx, in) + t.AssertNil(err) + + generatedFiles, err := gfile.ScanDir(path, "*.go", true) + t.AssertNil(err) + t.Assert(len(generatedFiles), 8) + for i, generatedFile := range generatedFiles { + generatedFiles[i] = gstr.TrimLeftStr(generatedFile, path) + } + t.Assert(gstr.InArray(generatedFiles, "/dao/internal/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/dao/internal/user_2.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/dao/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/dao/user_2.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/do/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/do/user_2.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/entity/user_1.go"), true) + t.Assert(gstr.InArray(generatedFiles, "/model/entity/user_2.go"), true) + + // Key string to check if overwrite the dao files. + // dao user1 is not be overwritten as configured in config.yaml. + // dao user2 is to be overwritten as configured in config.yaml. + var ( + keyStr = `// I am not overwritten.` + daoUser1Content = gfile.GetContents(path + "/dao/user_1.go") + daoUser2Content = gfile.GetContents(path + "/dao/user_2.go") + ) + t.Assert(gstr.Contains(daoUser1Content, keyStr), true) + t.Assert(gstr.Contains(daoUser2Content, keyStr), false) }) } diff --git a/cmd/gf/internal/cmd/gendao/gendao_dao.go b/cmd/gf/internal/cmd/gendao/gendao_dao.go index 73fe05f8b18..f2b0f5efd93 100644 --- a/cmd/gf/internal/cmd/gendao/gendao_dao.go +++ b/cmd/gf/internal/cmd/gendao/gendao_dao.go @@ -105,6 +105,11 @@ type generateDaoIndexInput struct { func generateDaoIndex(in generateDaoIndexInput) { path := filepath.FromSlash(gfile.Join(in.DirPathDao, in.FileName+".go")) + // It should add path to result slice whenever it would generate the path file or not. + in.generatedFilePaths.DaoFilePaths = append( + in.generatedFilePaths.DaoFilePaths, + path, + ) if in.OverwriteDao || !gfile.Exists(path) { indexContent := gstr.ReplaceByMap( getTemplateFromPathOrDefault(in.TplDaoIndexPath, consts.TemplateGenDaoIndexContent), @@ -115,10 +120,6 @@ func generateDaoIndex(in generateDaoIndexInput) { tplVarTableNameCamelLowerCase: in.TableNameCamelLowerCase, }) indexContent = replaceDefaultVar(in.CGenDaoInternalInput, indexContent) - in.generatedFilePaths.DaoFilePaths = append( - in.generatedFilePaths.DaoFilePaths, - path, - ) if err := gfile.PutContents(path, strings.TrimSpace(indexContent)); err != nil { mlog.Fatalf("writing content to '%s' failed: %v", path, err) } else { diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/config.yaml b/cmd/gf/internal/cmd/testdata/issue/2616/config.yaml new file mode 100644 index 00000000000..fc6299a3b9d --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/config.yaml @@ -0,0 +1,20 @@ +gfcli: + gen: + dao: + - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test" + tables: "user1" + descriptionTag: true + noModelComment: true + group: "sys" + clear: true + overwriteDao: false + - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test" + tables: "user2" + descriptionTag: true + noModelComment: true + group: "book" + clear: true + overwriteDao: true + + + diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_1.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_1.go new file mode 100644 index 00000000000..9988251832e --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_1.go @@ -0,0 +1,85 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// User1Dao is the data access object for table user1. +type User1Dao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns User1Columns // columns contains all the column names of Table for convenient usage. +} + +// User1Columns defines and stores column names for table user1. +type User1Columns struct { + Id string // User ID + Passport string // User Passport + Password string // User Password + Nickname string // User Nickname + Score string // Total score amount. + CreateAt string // Created Time + UpdateAt string // Updated Time +} + +// user1Columns holds the columns for table user1. +var user1Columns = User1Columns{ + Id: "id", + Passport: "passport", + Password: "password", + Nickname: "nickname", + Score: "score", + CreateAt: "create_at", + UpdateAt: "update_at", +} + +// NewUser1Dao creates and returns a new DAO object for table data access. +func NewUser1Dao() *User1Dao { + return &User1Dao{ + group: "sys", + table: "user1", + columns: user1Columns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *User1Dao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *User1Dao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *User1Dao) Columns() User1Columns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *User1Dao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *User1Dao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *User1Dao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_2.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_2.go new file mode 100644 index 00000000000..7e9cf2fa9ac --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_2.go @@ -0,0 +1,85 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// User2Dao is the data access object for table user2. +type User2Dao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns User2Columns // columns contains all the column names of Table for convenient usage. +} + +// User2Columns defines and stores column names for table user2. +type User2Columns struct { + Id string // User ID + Passport string // User Passport + Password string // User Password + Nickname string // User Nickname + Score string // Total score amount. + CreateAt string // Created Time + UpdateAt string // Updated Time +} + +// user2Columns holds the columns for table user2. +var user2Columns = User2Columns{ + Id: "id", + Passport: "passport", + Password: "password", + Nickname: "nickname", + Score: "score", + CreateAt: "create_at", + UpdateAt: "update_at", +} + +// NewUser2Dao creates and returns a new DAO object for table data access. +func NewUser2Dao() *User2Dao { + return &User2Dao{ + group: "sys", + table: "user2", + columns: user2Columns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *User2Dao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *User2Dao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *User2Dao) Columns() User2Columns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *User2Dao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *User2Dao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *User2Dao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_3.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_3.go new file mode 100644 index 00000000000..db59440164d --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_3.go @@ -0,0 +1,85 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// User3Dao is the data access object for table user3. +type User3Dao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns User3Columns // columns contains all the column names of Table for convenient usage. +} + +// User3Columns defines and stores column names for table user3. +type User3Columns struct { + Id string // User ID + Passport string // User Passport + Password string // User Password + Nickname string // User Nickname + Score string // Total score amount. + CreateAt string // Created Time + UpdateAt string // Updated Time +} + +// user3Columns holds the columns for table user3. +var user3Columns = User3Columns{ + Id: "id", + Passport: "passport", + Password: "password", + Nickname: "nickname", + Score: "score", + CreateAt: "create_at", + UpdateAt: "update_at", +} + +// NewUser3Dao creates and returns a new DAO object for table data access. +func NewUser3Dao() *User3Dao { + return &User3Dao{ + group: "sys", + table: "user3", + columns: user3Columns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *User3Dao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *User3Dao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *User3Dao) Columns() User3Columns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *User3Dao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *User3Dao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *User3Dao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_4.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_4.go new file mode 100644 index 00000000000..0488034d842 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/internal/user_4.go @@ -0,0 +1,85 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// User4Dao is the data access object for table user4. +type User4Dao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns User4Columns // columns contains all the column names of Table for convenient usage. +} + +// User4Columns defines and stores column names for table user4. +type User4Columns struct { + Id string // User ID + Passport string // User Passport + Password string // User Password + Nickname string // User Nickname + Score string // Total score amount. + CreateAt string // Created Time + UpdateAt string // Updated Time +} + +// user4Columns holds the columns for table user4. +var user4Columns = User4Columns{ + Id: "id", + Passport: "passport", + Password: "password", + Nickname: "nickname", + Score: "score", + CreateAt: "create_at", + UpdateAt: "update_at", +} + +// NewUser4Dao creates and returns a new DAO object for table data access. +func NewUser4Dao() *User4Dao { + return &User4Dao{ + group: "book", + table: "user4", + columns: user4Columns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *User4Dao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *User4Dao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *User4Dao) Columns() User4Columns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *User4Dao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *User4Dao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *User4Dao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_1.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_1.go new file mode 100644 index 00000000000..69af67a98bb --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_1.go @@ -0,0 +1,29 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +// I am not overwritten. + +package dao + +import ( + "/internal" +) + +// internalUser1Dao is internal type for wrapping internal DAO implements. +type internalUser1Dao = *internal.User1Dao + +// user1Dao is the data access object for table user1. +// You can define custom methods on it to extend its functionality as you wish. +type user1Dao struct { + internalUser1Dao +} + +var ( + // User1 is globally public accessible object for table user1 operations. + User1 = user1Dao{ + internal.NewUser1Dao(), + } +) + +// Fill with you ideas below. diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_2.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_2.go new file mode 100644 index 00000000000..895d406cb3d --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_2.go @@ -0,0 +1,29 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +// I am not overwritten. + +package dao + +import ( + "/internal" +) + +// internalUser2Dao is internal type for wrapping internal DAO implements. +type internalUser2Dao = *internal.User2Dao + +// user2Dao is the data access object for table user2. +// You can define custom methods on it to extend its functionality as you wish. +type user2Dao struct { + internalUser2Dao +} + +var ( + // User2 is globally public accessible object for table user2 operations. + User2 = user2Dao{ + internal.NewUser2Dao(), + } +) + +// Fill with you ideas below. diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_3.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_3.go new file mode 100644 index 00000000000..375276e4823 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_3.go @@ -0,0 +1,27 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dao + +import ( + "/internal" +) + +// internalUser3Dao is internal type for wrapping internal DAO implements. +type internalUser3Dao = *internal.User3Dao + +// user3Dao is the data access object for table user3. +// You can define custom methods on it to extend its functionality as you wish. +type user3Dao struct { + internalUser3Dao +} + +var ( + // User3 is globally public accessible object for table user3 operations. + User3 = user3Dao{ + internal.NewUser3Dao(), + } +) + +// Fill with you ideas below. diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_4.go b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_4.go new file mode 100644 index 00000000000..7d023591979 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/dao/user_4.go @@ -0,0 +1,27 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dao + +import ( + "/internal" +) + +// internalUser4Dao is internal type for wrapping internal DAO implements. +type internalUser4Dao = *internal.User4Dao + +// user4Dao is the data access object for table user4. +// You can define custom methods on it to extend its functionality as you wish. +type user4Dao struct { + internalUser4Dao +} + +var ( + // User4 is globally public accessible object for table user4 operations. + User4 = user4Dao{ + internal.NewUser4Dao(), + } +) + +// Fill with you ideas below. diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_3.go b/cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_3.go new file mode 100644 index 00000000000..14a1bf4e3d7 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_3.go @@ -0,0 +1,22 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package do + +import ( + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" +) + +// User1 is the golang structure of table user1 for DAO operations like Where/Data. +type User1 struct { + g.Meta `orm:"table:user1, do:true"` + Id interface{} // User ID + Passport interface{} // User Passport + Password interface{} // User Password + Nickname interface{} // User Nickname + Score interface{} // Total score amount. + CreateAt *gtime.Time // Created Time + UpdateAt *gtime.Time // Updated Time +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_4.go b/cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_4.go new file mode 100644 index 00000000000..8019772551f --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/model/do/user_4.go @@ -0,0 +1,22 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package do + +import ( + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" +) + +// User2 is the golang structure of table user2 for DAO operations like Where/Data. +type User2 struct { + g.Meta `orm:"table:user2, do:true"` + Id interface{} // User ID + Passport interface{} // User Passport + Password interface{} // User Password + Nickname interface{} // User Nickname + Score interface{} // Total score amount. + CreateAt *gtime.Time // Created Time + UpdateAt *gtime.Time // Updated Time +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_3.go b/cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_3.go new file mode 100644 index 00000000000..de4cd54fb8d --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_3.go @@ -0,0 +1,20 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package entity + +import ( + "github.com/gogf/gf/v2/os/gtime" +) + +// User1 is the golang structure for table user1. +type User1 struct { + Id uint `json:"ID" description:"User ID"` + Passport string `json:"PASSPORT" description:"User Passport"` + Password string `json:"PASSWORD" description:"User Password"` + Nickname string `json:"NICKNAME" description:"User Nickname"` + Score float64 `json:"SCORE" description:"Total score amount."` + CreateAt *gtime.Time `json:"CREATE_AT" description:"Created Time"` + UpdateAt *gtime.Time `json:"UPDATE_AT" description:"Updated Time"` +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_4.go b/cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_4.go new file mode 100644 index 00000000000..4727f6260df --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/model/entity/user_4.go @@ -0,0 +1,20 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package entity + +import ( + "github.com/gogf/gf/v2/os/gtime" +) + +// User2 is the golang structure for table user2. +type User2 struct { + Id uint `json:"ID" description:"User ID"` + Passport string `json:"PASSPORT" description:"User Passport"` + Password string `json:"PASSWORD" description:"User Password"` + Nickname string `json:"NICKNAME" description:"User Nickname"` + Score float64 `json:"SCORE" description:"Total score amount."` + CreateAt *gtime.Time `json:"CREATE_AT" description:"Created Time"` + UpdateAt *gtime.Time `json:"UPDATE_AT" description:"Updated Time"` +} diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/sql1.sql b/cmd/gf/internal/cmd/testdata/issue/2616/sql1.sql new file mode 100644 index 00000000000..2877f1f0d06 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/sql1.sql @@ -0,0 +1,10 @@ +CREATE TABLE `user1` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'User ID', + `passport` varchar(45) NOT NULL COMMENT 'User Passport', + `password` varchar(45) NOT NULL COMMENT 'User Password', + `nickname` varchar(45) NOT NULL COMMENT 'User Nickname', + `score` decimal(10,2) unsigned DEFAULT NULL COMMENT 'Total score amount.', + `create_at` datetime DEFAULT NULL COMMENT 'Created Time', + `update_at` datetime DEFAULT NULL COMMENT 'Updated Time', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/cmd/gf/internal/cmd/testdata/issue/2616/sql2.sql b/cmd/gf/internal/cmd/testdata/issue/2616/sql2.sql new file mode 100644 index 00000000000..ca450aa72f0 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/2616/sql2.sql @@ -0,0 +1,10 @@ +CREATE TABLE `user2` ( + `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'User ID', + `passport` varchar(45) NOT NULL COMMENT 'User Passport', + `password` varchar(45) NOT NULL COMMENT 'User Password', + `nickname` varchar(45) NOT NULL COMMENT 'User Nickname', + `score` decimal(10,2) unsigned DEFAULT NULL COMMENT 'Total score amount.', + `create_at` datetime DEFAULT NULL COMMENT 'Created Time', + `update_at` datetime DEFAULT NULL COMMENT 'Updated Time', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8;