From 1a2376dba3c7931cf8ebedeb1e162ad352c1635a Mon Sep 17 00:00:00 2001 From: Jeffry Luqman Date: Tue, 28 Feb 2023 15:21:21 +0700 Subject: [PATCH] test: pgsql alter column from smallint to boolean --- tests/migrate_test.go | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/migrate_test.go b/tests/migrate_test.go index 11a0afda..9a317303 100644 --- a/tests/migrate_test.go +++ b/tests/migrate_test.go @@ -1542,3 +1542,52 @@ func TestMigrateView(t *testing.T) { t.Fatalf("Failed to drop view, got %v", err) } } + +func TestMigrateExistingSmallintBoolColumnPG(t *testing.T) { + if DB.Dialector.Name() != "postgres" { + return + } + + type ColumnStruct struct { + gorm.Model + Name string + IsActive bool `gorm:"type:smallint"` + } + + type ColumnStruct2 struct { + gorm.Model + Name string + IsActive bool // change existing boolean column from smallint or other to boolean + } + + DB.Migrator().DropTable(&ColumnStruct{}) + + if err := DB.AutoMigrate(&ColumnStruct{}); err != nil { + t.Errorf("Failed to migrate, got %v", err) + } + + if err := DB.Table("column_structs").AutoMigrate(&ColumnStruct2{}); err != nil { + t.Fatalf("no error should happened when auto migrate column, but got %v", err) + } + + if columnTypes, err := DB.Migrator().ColumnTypes(&ColumnStruct{}); err != nil { + t.Fatalf("no error should returns for ColumnTypes") + } else { + stmt := &gorm.Statement{DB: DB} + stmt.Parse(&ColumnStruct2{}) + + for _, columnType := range columnTypes { + switch columnType.Name() { + case "id": + if v, ok := columnType.PrimaryKey(); !ok || !v { + t.Fatalf("column id primary key should be correct, name: %v, column: %#v", columnType.Name(), columnType) + } + case "is_active": + dataType := DB.Dialector.DataTypeOf(stmt.Schema.LookUpField(columnType.Name())) + if !strings.Contains(strings.ToUpper(dataType), strings.ToUpper(columnType.DatabaseTypeName())) { + t.Fatalf("column name type should be correct, name: %v, length: %v, expects: %v, column: %#v", columnType.Name(), columnType.DatabaseTypeName(), dataType, columnType) + } + } + } + } +}