(t *testing.T)
| 1528 | } |
| 1529 | |
| 1530 | func TestMigrateWithDefaultValue(t *testing.T) { |
| 1531 | if DB.Dialector.Name() == "sqlserver" { |
| 1532 | // sqlserver driver treats NULL and 'NULL' the same |
| 1533 | t.Skip("skip sqlserver") |
| 1534 | } |
| 1535 | |
| 1536 | type NullModel struct { |
| 1537 | ID uint |
| 1538 | Content string `gorm:"default:null"` |
| 1539 | } |
| 1540 | |
| 1541 | type NullStringModel struct { |
| 1542 | ID uint |
| 1543 | Content string `gorm:"default:'null'"` |
| 1544 | Active bool `gorm:"default:false"` |
| 1545 | } |
| 1546 | |
| 1547 | tableName := "null_string_model" |
| 1548 | |
| 1549 | DB.Migrator().DropTable(tableName) |
| 1550 | |
| 1551 | err := DB.Table(tableName).AutoMigrate(&NullModel{}) |
| 1552 | AssertEqual(t, err, nil) |
| 1553 | |
| 1554 | // default null -> 'null' |
| 1555 | err = DB.Table(tableName).AutoMigrate(&NullStringModel{}) |
| 1556 | AssertEqual(t, err, nil) |
| 1557 | |
| 1558 | columnType, err := findColumnType(tableName, "content") |
| 1559 | AssertEqual(t, err, nil) |
| 1560 | |
| 1561 | defVal, ok := columnType.DefaultValue() |
| 1562 | AssertEqual(t, defVal, "null") |
| 1563 | AssertEqual(t, ok, true) |
| 1564 | |
| 1565 | columnType2, err := findColumnType(tableName, "active") |
| 1566 | AssertEqual(t, err, nil) |
| 1567 | |
| 1568 | defVal, ok = columnType2.DefaultValue() |
| 1569 | bv, _ := strconv.ParseBool(defVal) |
| 1570 | AssertEqual(t, bv, false) |
| 1571 | AssertEqual(t, ok, true) |
| 1572 | |
| 1573 | // default 'null' -> 'null' |
| 1574 | session := DB.Session(&gorm.Session{Logger: Tracer{ |
| 1575 | Logger: DB.Config.Logger, |
| 1576 | Test: func(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { |
| 1577 | sql, _ := fc() |
| 1578 | if strings.HasPrefix(sql, "ALTER TABLE") { |
| 1579 | t.Errorf("shouldn't execute: sql=%s", sql) |
| 1580 | } |
| 1581 | }, |
| 1582 | }}) |
| 1583 | err = session.Table(tableName).AutoMigrate(&NullStringModel{}) |
| 1584 | AssertEqual(t, err, nil) |
| 1585 | |
| 1586 | columnType, err = findColumnType(tableName, "content") |
| 1587 | AssertEqual(t, err, nil) |
nothing calls this directly
no test coverage detected