fix index function output
修复mysql索引导出函数不准确问题。
This commit is contained in:
@@ -91,11 +91,11 @@ func TestFuncFetchBy(t *testing.T) {
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
fmt.Println(account)
|
fmt.Println(account)
|
||||||
|
|
||||||
account1, err := accountMgr.FetchByAccountUniqueIndex(2, 2) // unique index
|
account1, err := accountMgr.FetchUniqueIndexByAccount(2, 2) // unique index
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
fmt.Println(account1)
|
fmt.Println(account1)
|
||||||
|
|
||||||
accounts, err := accountMgr.FetchByTpIndex(2, 2)
|
accounts, err := accountMgr.FetchIndexByTp(2, 2)
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
fmt.Println(accounts)
|
fmt.Println(accounts)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -333,8 +333,8 @@ func (obj *_AccountMgr) FetchByPrimaryKey(ID int) (result Account, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchByAccountUniqueIndex primay or index 获取唯一内容
|
// FetchUniqueIndexByAccount primay or index 获取唯一内容
|
||||||
func (obj *_AccountMgr) FetchByAccountUniqueIndex(AccountID int, UserID int) (result Account, err error) {
|
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
|
err = obj.DB.Table(obj.GetTableName()).Where("account_id = ? AND user_id = ?", AccountID, UserID).Find(&result).Error
|
||||||
if err == nil && obj.isRelated {
|
if err == nil && obj.isRelated {
|
||||||
{
|
{
|
||||||
@@ -350,8 +350,8 @@ func (obj *_AccountMgr) FetchByAccountUniqueIndex(AccountID int, UserID int) (re
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchByTpIndex 获取多个内容
|
// FetchIndexByTp 获取多个内容
|
||||||
func (obj *_AccountMgr) FetchByTpIndex(UserID int, Type int) (results []*Account, err error) {
|
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
|
err = obj.DB.Table(obj.GetTableName()).Where("user_id = ? AND type = ?", UserID, Type).Find(&results).Error
|
||||||
if err == nil && obj.isRelated {
|
if err == nil && obj.isRelated {
|
||||||
for i := 0; i < len(results); i++ {
|
for i := 0; i < len(results); i++ {
|
||||||
|
|||||||
@@ -197,9 +197,9 @@ func widthFunctionName(info FList) string {
|
|||||||
case ColumnsKeyUnique: // unique key.唯一索引
|
case ColumnsKeyUnique: // unique key.唯一索引
|
||||||
return "FetchByUnique"
|
return "FetchByUnique"
|
||||||
case ColumnsKeyIndex: // index key.复合索引
|
case ColumnsKeyIndex: // index key.复合索引
|
||||||
return "FetchBy" + getCamelName(info.KeyName) + "Index"
|
return "FetchIndexBy" + getCamelName(info.KeyName)
|
||||||
case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引
|
case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引
|
||||||
return "FetchBy" + getCamelName(info.KeyName) + "UniqueIndex"
|
return "FetchUniqueIndexBy" + getCamelName(info.KeyName)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ const (
|
|||||||
// ColumnsKeyDefault default
|
// ColumnsKeyDefault default
|
||||||
ColumnsKeyDefault = iota
|
ColumnsKeyDefault = iota
|
||||||
// ColumnsKeyPrimary primary key.主键
|
// ColumnsKeyPrimary primary key.主键
|
||||||
ColumnsKeyPrimary
|
ColumnsKeyPrimary // 主键
|
||||||
// ColumnsKeyUnique unique key.唯一索引
|
// ColumnsKeyUnique unique key.唯一索引
|
||||||
ColumnsKeyUnique
|
ColumnsKeyUnique // unix 唯一索引
|
||||||
// ColumnsKeyIndex index key.复合索引
|
// ColumnsKeyIndex index key.复合索引
|
||||||
ColumnsKeyIndex
|
ColumnsKeyIndex // 可重复 index 索引
|
||||||
// ColumnsKeyUniqueIndex unique index key.唯一复合索引
|
// ColumnsKeyUniqueIndex unique index key.唯一复合索引
|
||||||
ColumnsKeyUniqueIndex
|
ColumnsKeyUniqueIndex // 唯一复合索引
|
||||||
)
|
)
|
||||||
|
|
||||||
// DBInfo database default info
|
// DBInfo database default info
|
||||||
@@ -53,6 +53,7 @@ type ForeignKey struct {
|
|||||||
// KList database index /unique_index list.数据库index /unique_index 列表
|
// KList database index /unique_index list.数据库index /unique_index 列表
|
||||||
type KList struct {
|
type KList struct {
|
||||||
Key ColumnsKey // non_unique of (show keys from [table])
|
Key ColumnsKey // non_unique of (show keys from [table])
|
||||||
|
Multi bool // Multiple .是否多个(复合组建)
|
||||||
KeyName string // key_name of (show keys from [table])
|
KeyName string // key_name of (show keys from [table])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,12 +107,14 @@ func getPackageInfo(orm *mysqldb.MySqlDB, info *model.DBInfo) {
|
|||||||
|
|
||||||
// getTableElement Get table columns and comments.获取表列及注释
|
// getTableElement Get table columns and comments.获取表列及注释
|
||||||
func getTableElement(orm *mysqldb.MySqlDB, tab string) (el []model.ColumnsInfo) {
|
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
|
// get keys
|
||||||
var Keys []keys
|
var Keys []keys
|
||||||
orm.Raw("show keys from " + assemblyTable(tab)).Scan(&Keys)
|
orm.Raw("show keys from " + assemblyTable(tab)).Scan(&Keys)
|
||||||
for _, v := range Keys {
|
for _, v := range Keys {
|
||||||
keyNums[v.KeyName]++
|
keyNameCount[v.KeyName]++
|
||||||
|
KeyColumnMp[v.ColumnName] = append(KeyColumnMp[v.ColumnName], v)
|
||||||
}
|
}
|
||||||
// ----------end
|
// ----------end
|
||||||
|
|
||||||
@@ -143,27 +145,35 @@ func getTableElement(orm *mysqldb.MySqlDB, tab string) (el []model.ColumnsInfo)
|
|||||||
tmp.Type = v.Type
|
tmp.Type = v.Type
|
||||||
|
|
||||||
// keys
|
// keys
|
||||||
if strings.EqualFold(v.Key, "PRI") { // Set primary key.设置主键
|
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{
|
tmp.Index = append(tmp.Index, model.KList{
|
||||||
Key: model.ColumnsKeyPrimary,
|
Key: model.ColumnsKeyPrimary,
|
||||||
|
Multi: (keyNameCount[v.KeyName] > 1),
|
||||||
})
|
})
|
||||||
} else if strings.EqualFold(v.Key, "UNI") { // unique
|
} 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{
|
tmp.Index = append(tmp.Index, model.KList{
|
||||||
Key: model.ColumnsKeyUnique,
|
Key: model.ColumnsKeyUnique,
|
||||||
|
Multi: (keyNameCount[v.KeyName] > 1),
|
||||||
|
KeyName: v.KeyName,
|
||||||
})
|
})
|
||||||
} 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 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,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,20 +244,21 @@ func (m *_Model) generateFunc() (genOut []GenOutInfo) {
|
|||||||
buildFList(&primary, ColumnsKeyPrimary, "", "int64", "id")
|
buildFList(&primary, ColumnsKeyPrimary, "", "int64", "id")
|
||||||
} else {
|
} else {
|
||||||
typeName := getTypeName(el.Type)
|
typeName := getTypeName(el.Type)
|
||||||
isMulti := true
|
isMulti := (len(el.Index) == 0)
|
||||||
for _, v1 := range el.Index {
|
for _, v1 := range el.Index {
|
||||||
|
if v1.Multi {
|
||||||
|
isMulti = v1.Multi
|
||||||
|
}
|
||||||
|
|
||||||
switch v1.Key {
|
switch v1.Key {
|
||||||
// case ColumnsKeyDefault:
|
// case ColumnsKeyDefault:
|
||||||
case ColumnsKeyPrimary: // primary key.主键
|
case ColumnsKeyPrimary: // primary key.主键
|
||||||
isMulti = false
|
buildFList(&primary, ColumnsKeyPrimary, v1.KeyName, typeName, el.Name)
|
||||||
buildFList(&primary, ColumnsKeyPrimary, "", typeName, el.Name)
|
|
||||||
case ColumnsKeyUnique: // unique key.唯一索引
|
case ColumnsKeyUnique: // unique key.唯一索引
|
||||||
isMulti = false
|
buildFList(&unique, ColumnsKeyUnique, v1.KeyName, typeName, el.Name)
|
||||||
buildFList(&unique, ColumnsKeyUnique, "", typeName, el.Name)
|
|
||||||
case ColumnsKeyIndex: // index key.复合索引
|
case ColumnsKeyIndex: // index key.复合索引
|
||||||
buildFList(&index, ColumnsKeyIndex, v1.KeyName, typeName, el.Name)
|
buildFList(&index, ColumnsKeyIndex, v1.KeyName, typeName, el.Name)
|
||||||
case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引
|
case ColumnsKeyUniqueIndex: // unique index key.唯一复合索引
|
||||||
isMulti = false
|
|
||||||
buildFList(&uniqueIndex, ColumnsKeyUniqueIndex, v1.KeyName, typeName, el.Name)
|
buildFList(&uniqueIndex, ColumnsKeyUniqueIndex, v1.KeyName, typeName, el.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,5 +58,5 @@
|
|||||||
|
|
||||||
`FetchByPrimaryKey` : Primary key acquisition
|
`FetchByPrimaryKey` : Primary key acquisition
|
||||||
`FetchByUnique` : Get by unique index
|
`FetchByUnique` : Get by unique index
|
||||||
`FetchBy[xxx]Index` : Composite index fetch (multiple returned)
|
`FetchIndexBy[xxx]` : Composite index fetch (multiple returned)
|
||||||
`FetchBy[xxx]UniqueIndex` : Unique composite index fetch (return one)
|
`FetchUniqueIndexBy[xxx]` : Unique composite index fetch (return one)
|
||||||
@@ -54,5 +54,5 @@
|
|||||||
### 索引方式获取
|
### 索引方式获取
|
||||||
`FetchByPrimaryKey` : 主键获取
|
`FetchByPrimaryKey` : 主键获取
|
||||||
`FetchByUnique` : 唯一索引方式获取
|
`FetchByUnique` : 唯一索引方式获取
|
||||||
`FetchBy[xxx]Index` : 复合索引获取(返回多个)
|
`FetchIndexBy[xxx]` : 复合索引获取(返回多个)
|
||||||
`FetchBy[xxx]UniqueIndex` : 唯一复合索引获取(返回一个)
|
`FetchUniqueIndexBy[xxx]` : 唯一复合索引获取(返回一个)
|
||||||
Reference in New Issue
Block a user