use map look-up for indexes (#7242)
This commit is contained in:
		
							parent
							
								
									b0d70a26d1
								
							
						
					
					
						commit
						49bbaa637f
					
				| @ -76,11 +76,12 @@ func (schema *Schema) ParseIndexes() map[string]Index { | |||||||
| func (schema *Schema) LookIndex(name string) *Index { | func (schema *Schema) LookIndex(name string) *Index { | ||||||
| 	if schema != nil { | 	if schema != nil { | ||||||
| 		indexes := schema.ParseIndexes() | 		indexes := schema.ParseIndexes() | ||||||
| 		for _, index := range indexes { | 
 | ||||||
| 			if index.Name == name { | 		if index, found := indexes[name]; found { | ||||||
| 			return &index | 			return &index | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		for _, index := range indexes { | ||||||
| 			for _, field := range index.Fields { | 			for _, field := range index.Fields { | ||||||
| 				if field.Name == name { | 				if field.Name == name { | ||||||
| 					return &index | 					return &index | ||||||
| @ -111,10 +112,7 @@ func parseFieldIndexes(field *Field) (indexes []Index, err error) { | |||||||
| 					idx = len(tag) | 					idx = len(tag) | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if idx != -1 { |  | ||||||
| 				name = tag[0:idx] | 				name = tag[0:idx] | ||||||
| 				} |  | ||||||
| 
 |  | ||||||
| 				if name == "" { | 				if name == "" { | ||||||
| 					subName := field.Name | 					subName := field.Name | ||||||
| 					const key = "COMPOSITE" | 					const key = "COMPOSITE" | ||||||
|  | |||||||
| @ -21,6 +21,9 @@ type UserIndex struct { | |||||||
| 	Name7        string `gorm:"index:type"` | 	Name7        string `gorm:"index:type"` | ||||||
| 	Name8        string `gorm:"index:,length:10;index:,collate:utf8"` | 	Name8        string `gorm:"index:,length:10;index:,collate:utf8"` | ||||||
| 
 | 
 | ||||||
|  | 	CompName1 string `gorm:"index:,unique,composite:idx_compname_1,option:NULLS NOT DISTINCT;not null"` | ||||||
|  | 	CompName2 string `gorm:"index:,composite:idx_compname_1"` | ||||||
|  | 
 | ||||||
| 	// Composite Index: Flattened structure.
 | 	// Composite Index: Flattened structure.
 | ||||||
| 	Data0A string `gorm:"index:,composite:comp_id0"` | 	Data0A string `gorm:"index:,composite:comp_id0"` | ||||||
| 	Data0B string `gorm:"index:,composite:comp_id0"` | 	Data0B string `gorm:"index:,composite:comp_id0"` | ||||||
| @ -154,6 +157,15 @@ func TestParseIndex(t *testing.T) { | |||||||
| 				Field: &schema.Field{Name: "Data2B"}, | 				Field: &schema.Field{Name: "Data2B"}, | ||||||
| 			}}, | 			}}, | ||||||
| 		}, | 		}, | ||||||
|  | 		"idx_user_indices_idx_compname_1": { | ||||||
|  | 			Class:  "UNIQUE", | ||||||
|  | 			Name:   "idx_user_indices_idx_compname_1", | ||||||
|  | 			Option: "NULLS NOT DISTINCT", | ||||||
|  | 			Fields: []schema.IndexOption{ | ||||||
|  | 				{Field: &schema.Field{Name: "CompName1", NotNull: true}}, | ||||||
|  | 				{Field: &schema.Field{Name: "CompName2"}}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	CheckIndices(t, results, user.ParseIndexes()) | 	CheckIndices(t, results, user.ParseIndexes()) | ||||||
| @ -253,7 +265,7 @@ func CheckIndices(t *testing.T, expected, actual map[string]schema.Index) { | |||||||
| 			} | 			} | ||||||
| 			for i, ef := range ei.Fields { | 			for i, ef := range ei.Fields { | ||||||
| 				af := ai.Fields[i] | 				af := ai.Fields[i] | ||||||
| 				tests.AssertObjEqual(t, af, ef, "Name", "Unique", "UniqueIndex", "Expression", "Sort", "Collate", "Length") | 				tests.AssertObjEqual(t, af, ef, "Name", "Unique", "UniqueIndex", "Expression", "Sort", "Collate", "Length", "NotNull") | ||||||
| 			} | 			} | ||||||
| 		}) | 		}) | ||||||
| 		delete(actual, k) | 		delete(actual, k) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Ivan Ryabov
						Ivan Ryabov