forked from mirror/gorm
Fix create index
This commit is contained in:
parent
511bd66490
commit
d39bdc3513
|
@ -150,7 +150,7 @@ func (m Migrator) CreateTable(values ...interface{}) error {
|
|||
|
||||
for _, idx := range stmt.Schema.ParseIndexes() {
|
||||
if m.CreateIndexAfterCreateTable {
|
||||
tx.Migrator().CreateIndex(value, idx.Name)
|
||||
defer tx.Migrator().CreateIndex(value, idx.Name)
|
||||
} else {
|
||||
createTableSQL += "INDEX ? ?,"
|
||||
values = append(values, clause.Expr{SQL: idx.Name}, tx.Migrator().(BuildIndexOptionsInterface).BuildIndexOptions(idx.Fields, stmt))
|
||||
|
|
|
@ -26,7 +26,7 @@ type IndexOption struct {
|
|||
func (schema *Schema) ParseIndexes() map[string]Index {
|
||||
var indexes = map[string]Index{}
|
||||
|
||||
for _, field := range schema.FieldsByDBName {
|
||||
for _, field := range schema.Fields {
|
||||
if field.TagSettings["INDEX"] != "" || field.TagSettings["UNIQUE_INDEX"] != "" {
|
||||
for _, index := range parseFieldIndexes(field) {
|
||||
idx := indexes[index.Name]
|
||||
|
@ -66,6 +66,10 @@ func parseFieldIndexes(field *Field) (indexes []Index) {
|
|||
length, _ = strconv.Atoi(settings["LENGTH"])
|
||||
)
|
||||
|
||||
if idx == -1 {
|
||||
idx = len(tag)
|
||||
}
|
||||
|
||||
if idx != -1 {
|
||||
name = tag[0:idx]
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@ type UserIndex struct {
|
|||
Name5 int64 `gorm:"index:,class:FULLTEXT,comment:hello \\, world,where:age > 10"`
|
||||
Name6 int64 `gorm:"index:profile,comment:hello \\, world,where:age > 10"`
|
||||
Age int64 `gorm:"index:profile,expression:ABS(age)"`
|
||||
OID int64 `gorm:"index:idx_id"`
|
||||
MemberNumber string `gorm:"index:idx_id"`
|
||||
}
|
||||
|
||||
func TestParseIndex(t *testing.T) {
|
||||
|
@ -64,6 +66,10 @@ func TestParseIndex(t *testing.T) {
|
|||
Expression: "ABS(age)",
|
||||
}},
|
||||
},
|
||||
"idx_id": {
|
||||
Name: "idx_id",
|
||||
Fields: []schema.IndexOption{{}, {}},
|
||||
},
|
||||
}
|
||||
|
||||
indices := user.ParseIndexes()
|
||||
|
@ -71,7 +77,7 @@ func TestParseIndex(t *testing.T) {
|
|||
for k, result := range results {
|
||||
v, ok := indices[k]
|
||||
if !ok {
|
||||
t.Errorf("Failed to found index %v from parsed indices %+v", k, indices)
|
||||
t.Fatalf("Failed to found index %v from parsed indices %+v", k, indices)
|
||||
}
|
||||
|
||||
for _, name := range []string{"Name", "Class", "Type", "Where", "Comment"} {
|
||||
|
|
Loading…
Reference in New Issue