diff --git a/data/view/genfunc/genfunc_test.go b/data/view/genfunc/genfunc_test.go index 674ed37..0a39dc3 100644 --- a/data/view/genfunc/genfunc_test.go +++ b/data/view/genfunc/genfunc_test.go @@ -91,11 +91,11 @@ func TestFuncFetchBy(t *testing.T) { fmt.Println(err) fmt.Println(account) - account1, err := accountMgr.FetchByAccountUniqueIndex(2, 2) // unique index + account1, err := accountMgr.FetchUniqueIndexByAccount(2, 2) // unique index fmt.Println(err) fmt.Println(account1) - accounts, err := accountMgr.FetchByTpIndex(2, 2) + accounts, err := accountMgr.FetchIndexByTp(2, 2) fmt.Println(err) fmt.Println(accounts) } diff --git a/data/view/genfunc/model/matrix.gen.account.go b/data/view/genfunc/model/matrix.gen.account.go index 95e9468..0bbfc3b 100644 --- a/data/view/genfunc/model/matrix.gen.account.go +++ b/data/view/genfunc/model/matrix.gen.account.go @@ -333,8 +333,8 @@ func (obj *_AccountMgr) FetchByPrimaryKey(ID int) (result Account, err error) { return } -// FetchByAccountUniqueIndex primay or index 获取唯一内容 -func (obj *_AccountMgr) FetchByAccountUniqueIndex(AccountID int, UserID int) (result Account, err error) { +// FetchUniqueIndexByAccount primay or index 获取唯一内容 +func (obj *_AccountMgr) FetchUniqueIndexByAccount(AccountID int, UserID int) (result Account, err error) { err = obj.DB.Table(obj.GetTableName()).Where("account_id = ? AND user_id = ?", AccountID, UserID).Find(&result).Error if err == nil && obj.isRelated { { @@ -350,8 +350,8 @@ func (obj *_AccountMgr) FetchByAccountUniqueIndex(AccountID int, UserID int) (re return } -// FetchByTpIndex 获取多个内容 -func (obj *_AccountMgr) FetchByTpIndex(UserID int, Type int) (results []*Account, err error) { +// FetchIndexByTp 获取多个内容 +func (obj *_AccountMgr) FetchIndexByTp(UserID int, Type int) (results []*Account, err error) { err = obj.DB.Table(obj.GetTableName()).Where("user_id = ? AND type = ?", UserID, Type).Find(&results).Error if err == nil && obj.isRelated { for i := 0; i < len(results); i++ { diff --git a/data/view/model/common.go b/data/view/model/common.go index 5d24716..ff1ae60 100644 --- a/data/view/model/common.go +++ b/data/view/model/common.go @@ -197,9 +197,9 @@ func widthFunctionName(info FList) string { case ColumnsKeyUnique: // unique key.唯一索引 return "FetchByUnique" case ColumnsKeyIndex: // index key.复合索引 - return "FetchBy" + getCamelName(info.KeyName) + "Index" + return "FetchIndexBy" + getCamelName(info.KeyName) case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引 - return "FetchBy" + getCamelName(info.KeyName) + "UniqueIndex" + return "FetchUniqueIndexBy" + getCamelName(info.KeyName) } return "" diff --git a/data/view/model/def.go b/data/view/model/def.go index 0eb4c8f..8812874 100644 --- a/data/view/model/def.go +++ b/data/view/model/def.go @@ -12,13 +12,13 @@ const ( // ColumnsKeyDefault default ColumnsKeyDefault = iota // ColumnsKeyPrimary primary key.主键 - ColumnsKeyPrimary + ColumnsKeyPrimary // 主键 // ColumnsKeyUnique unique key.唯一索引 - ColumnsKeyUnique + ColumnsKeyUnique // unix 唯一索引 // ColumnsKeyIndex index key.复合索引 - ColumnsKeyIndex + ColumnsKeyIndex // 可重复 index 索引 // ColumnsKeyUniqueIndex unique index key.唯一复合索引 - ColumnsKeyUniqueIndex + ColumnsKeyUniqueIndex // 唯一复合索引 ) // DBInfo database default info @@ -53,6 +53,7 @@ type ForeignKey struct { // KList database index /unique_index list.数据库index /unique_index 列表 type KList struct { Key ColumnsKey // non_unique of (show keys from [table]) + Multi bool // Multiple .是否多个(复合组建) KeyName string // key_name of (show keys from [table]) } diff --git a/data/view/model/genmysql/genmysql.go b/data/view/model/genmysql/genmysql.go index 772aeb5..c8b77d1 100644 --- a/data/view/model/genmysql/genmysql.go +++ b/data/view/model/genmysql/genmysql.go @@ -107,12 +107,14 @@ func getPackageInfo(orm *mysqldb.MySqlDB, info *model.DBInfo) { // getTableElement Get table columns and comments.获取表列及注释 func getTableElement(orm *mysqldb.MySqlDB, tab string) (el []model.ColumnsInfo) { - keyNums := make(map[string]int) + keyNameCount := make(map[string]int) + KeyColumnMp := make(map[string][]keys) // get keys var Keys []keys orm.Raw("show keys from " + assemblyTable(tab)).Scan(&Keys) for _, v := range Keys { - keyNums[v.KeyName]++ + keyNameCount[v.KeyName]++ + KeyColumnMp[v.ColumnName] = append(KeyColumnMp[v.ColumnName], v) } // ----------end @@ -143,27 +145,35 @@ func getTableElement(orm *mysqldb.MySqlDB, tab string) (el []model.ColumnsInfo) tmp.Type = v.Type // keys - if strings.EqualFold(v.Key, "PRI") { // Set primary key.设置主键 - tmp.Index = append(tmp.Index, model.KList{ - Key: model.ColumnsKeyPrimary, - }) - } else if strings.EqualFold(v.Key, "UNI") { // unique - tmp.Index = append(tmp.Index, model.KList{ - Key: model.ColumnsKeyUnique, - }) - } else { - for _, v1 := range Keys { - if strings.EqualFold(v1.ColumnName, v.Field) { - var k model.KList - if v1.NonUnique == 1 { // index - k.Key = model.ColumnsKeyIndex - } else { - k.Key = model.ColumnsKeyUniqueIndex + if keylist, ok := KeyColumnMp[v.Field]; ok { // maybe have index or key + for _, v := range keylist { + if v.NonUnique == 0 { // primary or unique + if strings.EqualFold(v.KeyName, "PRIMARY") { // PRI Set primary key.设置主键 + tmp.Index = append(tmp.Index, model.KList{ + Key: model.ColumnsKeyPrimary, + Multi: (keyNameCount[v.KeyName] > 1), + }) + } else { // unique + if keyNameCount[v.KeyName] > 1 { + tmp.Index = append(tmp.Index, model.KList{ + Key: model.ColumnsKeyUniqueIndex, + Multi: (keyNameCount[v.KeyName] > 1), + KeyName: v.KeyName, + }) + } else { // unique index key.唯一复合索引 + tmp.Index = append(tmp.Index, model.KList{ + Key: model.ColumnsKeyUnique, + Multi: (keyNameCount[v.KeyName] > 1), + KeyName: v.KeyName, + }) + } } - if keyNums[v1.KeyName] > 1 { // Composite index.复合索引 - k.KeyName = v1.KeyName - } - tmp.Index = append(tmp.Index, k) + } else { // mut + tmp.Index = append(tmp.Index, model.KList{ + Key: model.ColumnsKeyIndex, + Multi: (keyNameCount[v.KeyName] > 1), + KeyName: v.KeyName, + }) } } } diff --git a/data/view/model/model.go b/data/view/model/model.go index 7c02705..2d899c1 100644 --- a/data/view/model/model.go +++ b/data/view/model/model.go @@ -244,20 +244,21 @@ func (m *_Model) generateFunc() (genOut []GenOutInfo) { buildFList(&primary, ColumnsKeyPrimary, "", "int64", "id") } else { typeName := getTypeName(el.Type) - isMulti := true + isMulti := (len(el.Index) == 0) for _, v1 := range el.Index { + if v1.Multi { + isMulti = v1.Multi + } + switch v1.Key { // case ColumnsKeyDefault: case ColumnsKeyPrimary: // primary key.主键 - isMulti = false - buildFList(&primary, ColumnsKeyPrimary, "", typeName, el.Name) + buildFList(&primary, ColumnsKeyPrimary, v1.KeyName, typeName, el.Name) case ColumnsKeyUnique: // unique key.唯一索引 - isMulti = false - buildFList(&unique, ColumnsKeyUnique, "", typeName, el.Name) + buildFList(&unique, ColumnsKeyUnique, v1.KeyName, typeName, el.Name) case ColumnsKeyIndex: // index key.复合索引 buildFList(&index, ColumnsKeyIndex, v1.KeyName, typeName, el.Name) case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引 - isMulti = false buildFList(&uniqueIndex, ColumnsKeyUniqueIndex, v1.KeyName, typeName, el.Name) } } diff --git a/doc/func.md b/doc/func.md index f49f13b..caca622 100644 --- a/doc/func.md +++ b/doc/func.md @@ -58,5 +58,5 @@ `FetchByPrimaryKey` : Primary key acquisition `FetchByUnique` : Get by unique index - `FetchBy[xxx]Index` : Composite index fetch (multiple returned) - `FetchBy[xxx]UniqueIndex` : Unique composite index fetch (return one) \ No newline at end of file + `FetchIndexBy[xxx]` : Composite index fetch (multiple returned) + `FetchUniqueIndexBy[xxx]` : Unique composite index fetch (return one) \ No newline at end of file diff --git a/doc/func_cn.md b/doc/func_cn.md index bc84244..8f97e05 100644 --- a/doc/func_cn.md +++ b/doc/func_cn.md @@ -54,5 +54,5 @@ ### 索引方式获取 `FetchByPrimaryKey` : 主键获取 `FetchByUnique` : 唯一索引方式获取 - `FetchBy[xxx]Index` : 复合索引获取(返回多个) - `FetchBy[xxx]UniqueIndex` : 唯一复合索引获取(返回一个) \ No newline at end of file + `FetchIndexBy[xxx]` : 复合索引获取(返回多个) + `FetchUniqueIndexBy[xxx]` : 唯一复合索引获取(返回一个) \ No newline at end of file