parent
							
								
									b0e13d95b4
								
							
						
					
					
						commit
						3d91802b1d
					
				| @ -120,7 +120,10 @@ func (m Migrator) AutoMigrate(values ...interface{}) error { | |||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					return err | 					return err | ||||||
| 				} | 				} | ||||||
| 
 | 				var ( | ||||||
|  | 					parseIndexes          = stmt.Schema.ParseIndexes() | ||||||
|  | 					parseCheckConstraints = stmt.Schema.ParseCheckConstraints() | ||||||
|  | 				) | ||||||
| 				for _, dbName := range stmt.Schema.DBNames { | 				for _, dbName := range stmt.Schema.DBNames { | ||||||
| 					field := stmt.Schema.FieldsByDBName[dbName] | 					field := stmt.Schema.FieldsByDBName[dbName] | ||||||
| 					var foundColumn gorm.ColumnType | 					var foundColumn gorm.ColumnType | ||||||
| @ -157,7 +160,7 @@ func (m Migrator) AutoMigrate(values ...interface{}) error { | |||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				for _, chk := range stmt.Schema.ParseCheckConstraints() { | 				for _, chk := range parseCheckConstraints { | ||||||
| 					if !queryTx.Migrator().HasConstraint(value, chk.Name) { | 					if !queryTx.Migrator().HasConstraint(value, chk.Name) { | ||||||
| 						if err := execTx.Migrator().CreateConstraint(value, chk.Name); err != nil { | 						if err := execTx.Migrator().CreateConstraint(value, chk.Name); err != nil { | ||||||
| 							return err | 							return err | ||||||
| @ -165,7 +168,7 @@ func (m Migrator) AutoMigrate(values ...interface{}) error { | |||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				for _, idx := range stmt.Schema.ParseIndexes() { | 				for _, idx := range parseIndexes { | ||||||
| 					if !queryTx.Migrator().HasIndex(value, idx.Name) { | 					if !queryTx.Migrator().HasIndex(value, idx.Name) { | ||||||
| 						if err := execTx.Migrator().CreateIndex(value, idx.Name); err != nil { | 						if err := execTx.Migrator().CreateIndex(value, idx.Name); err != nil { | ||||||
| 							return err | 							return err | ||||||
| @ -430,7 +433,8 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy | |||||||
| 	realDataType := strings.ToLower(columnType.DatabaseTypeName()) | 	realDataType := strings.ToLower(columnType.DatabaseTypeName()) | ||||||
| 
 | 
 | ||||||
| 	var ( | 	var ( | ||||||
| 		alterColumn, isSameType bool | 		alterColumn bool | ||||||
|  | 		isSameType  = fullDataType == realDataType | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	if !field.PrimaryKey { | 	if !field.PrimaryKey { | ||||||
|  | |||||||
| @ -129,6 +129,7 @@ func parseFieldIndexes(field *Field) (indexes []Index, err error) { | |||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if (k == "UNIQUEINDEX") || settings["UNIQUE"] != "" { | 				if (k == "UNIQUEINDEX") || settings["UNIQUE"] != "" { | ||||||
|  | 					field.Unique = true | ||||||
| 					settings["CLASS"] = "UNIQUE" | 					settings["CLASS"] = "UNIQUE" | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ require ( | |||||||
| 	gorm.io/driver/postgres v1.4.6 | 	gorm.io/driver/postgres v1.4.6 | ||||||
| 	gorm.io/driver/sqlite v1.4.4 | 	gorm.io/driver/sqlite v1.4.4 | ||||||
| 	gorm.io/driver/sqlserver v1.4.1 | 	gorm.io/driver/sqlserver v1.4.1 | ||||||
| 	gorm.io/gorm v1.24.2 | 	gorm.io/gorm v1.24.3 | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| replace gorm.io/gorm => ../ | replace gorm.io/gorm => ../ | ||||||
|  | |||||||
| @ -1270,6 +1270,38 @@ func TestMigrateDefaultNullString(t *testing.T) { | |||||||
| 	AssertEqual(t, ok, false) | 	AssertEqual(t, ok, false) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestMigrateMySQLWithCustomizedTypes(t *testing.T) { | ||||||
|  | 	if DB.Dialector.Name() != "mysql" { | ||||||
|  | 		t.Skip() | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	type MyTable struct { | ||||||
|  | 		Def string `gorm:"size:512;index:idx_def,unique"` | ||||||
|  | 		Abc string `gorm:"size:65000000"` | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	DB.Migrator().DropTable("my_tables") | ||||||
|  | 
 | ||||||
|  | 	sql := "CREATE TABLE `my_tables` (`def` varchar(512),`abc` longtext,UNIQUE INDEX `idx_def` (`def`))" | ||||||
|  | 	if err := DB.Exec(sql).Error; err != nil { | ||||||
|  | 		t.Errorf("Failed, got error: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	session := DB.Session(&gorm.Session{Logger: Tracer{ | ||||||
|  | 		Logger: DB.Config.Logger, | ||||||
|  | 		Test: func(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { | ||||||
|  | 			sql, _ := fc() | ||||||
|  | 			if strings.HasPrefix(sql, "ALTER TABLE") { | ||||||
|  | 				t.Errorf("shouldn't execute: sql=%s", sql) | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 	}}) | ||||||
|  | 
 | ||||||
|  | 	if err := session.AutoMigrate(&MyTable{}); err != nil { | ||||||
|  | 		t.Errorf("Failed, got error: %v", err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func TestMigrateIgnoreRelations(t *testing.T) { | func TestMigrateIgnoreRelations(t *testing.T) { | ||||||
| 	type RelationModel1 struct { | 	type RelationModel1 struct { | ||||||
| 		ID uint | 		ID uint | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu