@@ -3,7 +3,7 @@ package orm
33import (
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