Skip to content

Commit 637dd90

Browse files
committed
create table fix
1 parent a1f7d0c commit 637dd90

File tree

2 files changed

+65
-28
lines changed

2 files changed

+65
-28
lines changed

orm/create_struct.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"reflect"
99
"regexp"
1010
"runtime"
11+
"strconv"
1112
"strings"
1213
"time"
1314
)
@@ -188,16 +189,16 @@ func getTableDbColumns[T Table](query *Query[T]) ([]dBColumn, error) {
188189
keyName := strings.Trim(keyNameAndCols[0], "`")
189190
cols := strings.Split(strings.Trim(keyNameAndCols[1], "()"), ",")
190191

191-
if len(cols) == 1 {
192-
colName := strings.Trim(cols[0], "`")
193-
ret[existColumn[colName]].Unique = true
194-
} else {
195-
if strings.HasPrefix(keyName, "unique_") == false {
196-
keyName = "unique_" + keyName
197-
}
198-
for _, v2 := range cols {
199-
colName := strings.Trim(v2, "`")
200-
192+
if len(cols) == 1 && cols[0] == keyNameAndCols[0] {
193+
keyName = "unique"
194+
} else if strings.HasPrefix(keyName, "unique_") == false {
195+
keyName = "unique_" + keyName
196+
}
197+
for k2, v2 := range cols {
198+
colName := strings.Trim(v2, "`")
199+
if len(cols) > 1 {
200+
ret[existColumn[colName]].Uniques = append(ret[existColumn[colName]].Uniques, keyName+"("+strconv.Itoa(k2)+")")
201+
} else {
201202
ret[existColumn[colName]].Uniques = append(ret[existColumn[colName]].Uniques, keyName)
202203
}
203204
}
@@ -211,16 +212,17 @@ func getTableDbColumns[T Table](query *Query[T]) ([]dBColumn, error) {
211212
keyName := strings.Trim(keyNameAndCols[0], "`")
212213
cols := strings.Split(strings.Trim(keyNameAndCols[1], "()"), ",")
213214

214-
if len(cols) == 1 {
215-
colName := strings.Trim(cols[0], "`")
216-
ret[existColumn[colName]].Index = true
217-
} else {
218-
if strings.HasPrefix(keyName, "index_") == false {
219-
keyName = "index_" + keyName
220-
}
221-
for _, v2 := range cols {
222-
colName := strings.Trim(v2, "`")
215+
if len(cols) == 1 && cols[0] == keyNameAndCols[0] {
216+
keyName = "index"
217+
} else if strings.HasPrefix(keyName, "index_") == false {
218+
keyName = "index_" + keyName
219+
}
220+
for k2, v2 := range cols {
221+
colName := strings.Trim(v2, "`")
223222

223+
if len(cols) > 1 {
224+
ret[existColumn[colName]].Indexs = append(ret[existColumn[colName]].Indexs, keyName+"("+strconv.Itoa(k2)+")")
225+
} else {
224226
ret[existColumn[colName]].Indexs = append(ret[existColumn[colName]].Indexs, keyName)
225227
}
226228
}

orm/create_table.go

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package orm
33
import (
44
"fmt"
55
"reflect"
6-
"sort"
6+
"strconv"
77
"strings"
88
"time"
99
)
@@ -159,12 +159,41 @@ func generateColumnStrings(dbColums []dBColumn) []string {
159159

160160
if len(v.Uniques) > 0 {
161161
for _, v2 := range v.Uniques {
162+
if strings.HasSuffix(v2, ")") {
163+
li := strings.LastIndex(v2, "(")
164+
if li > 0 {
165+
numStr := v2[li+1 : len(v2)-1]
166+
num, numErr := strconv.Atoi(numStr)
167+
if numErr == nil {
168+
if uniqueComps[v2[:li]] == nil {
169+
uniqueComps[v2[:li]] = make([]string, 16)
170+
}
171+
uniqueComps[v2[:li]][num] = v.Name
172+
continue
173+
}
174+
}
175+
}
162176
uniqueComps[v2] = append(uniqueComps[v2], v.Name)
177+
163178
}
164179
}
165180

166181
if len(v.Indexs) > 0 {
167182
for _, v2 := range v.Indexs {
183+
if strings.HasSuffix(v2, ")") {
184+
li := strings.LastIndex(v2, "(")
185+
if li > 0 {
186+
numStr := v2[li+1 : len(v2)-1]
187+
num, numErr := strconv.Atoi(numStr)
188+
if numErr == nil {
189+
if indexComps[v2[:li]] == nil {
190+
indexComps[v2[:li]] = make([]string, 16)
191+
}
192+
indexComps[v2[:li]][num] = v.Name
193+
continue
194+
}
195+
}
196+
}
168197
indexComps[v2] = append(indexComps[v2], v.Name)
169198
}
170199
}
@@ -181,16 +210,22 @@ func generateColumnStrings(dbColums []dBColumn) []string {
181210
ret = append(ret, v)
182211
}
183212
for k, v := range uniqueComps {
184-
sort.SliceStable(v, func(i, j int) bool {
185-
return strings.Index(k, v[i]) < strings.Index(k, v[j])
186-
})
187-
ret = append(ret, fmt.Sprintf("unique key `%s` (%s)", k, "`"+strings.Join(v, "`,`")+"`"))
213+
var newv []string
214+
for _, v2 := range v {
215+
if v2 != "" {
216+
newv = append(newv, v2)
217+
}
218+
}
219+
ret = append(ret, fmt.Sprintf("unique key `%s` (%s)", k, "`"+strings.Join(newv, "`,`")+"`"))
188220
}
189221
for k, v := range indexComps {
190-
sort.SliceStable(v, func(i, j int) bool {
191-
return strings.Index(k, v[i]) < strings.Index(k, v[j])
192-
})
193-
ret = append(ret, fmt.Sprintf("key `%s` (%s)", k, "`"+strings.Join(v, "`,`")+"`"))
222+
var newv []string
223+
for _, v2 := range v {
224+
if v2 != "" {
225+
newv = append(newv, v2)
226+
}
227+
}
228+
ret = append(ret, fmt.Sprintf("key `%s` (%s)", k, "`"+strings.Join(newv, "`,`")+"`"))
194229
}
195230
return ret
196231
}

0 commit comments

Comments
 (0)