fix: preserve legacy time casts throughout index migrations
This commit is contained in:
@@ -221,6 +221,47 @@ func TestMySQLRegistrationIndexPreservesCastAndUsesRange(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMySQLLaterRegistrationIndexesPreserveMalformedLegacyTimes(t *testing.T) {
|
||||
db := openRehearsalMySQL(t)
|
||||
for _, sql := range []string{
|
||||
"CREATE TABLE tab_user(id INT,source_db VARCHAR(10),puid INT,promote_id INT,register_time VARCHAR(20),PRIMARY KEY(id,source_db))",
|
||||
"INSERT INTO tab_user VALUES(1,'lx',0,10,''),(2,'lx',0,10,'bad'),(3,'lx',0,10,'1793635200 ')",
|
||||
} {
|
||||
if err := db.Exec(sql).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
pool, _ := db.DB()
|
||||
pool.SetMaxOpenConns(1)
|
||||
var mode string
|
||||
if err := db.Raw("SELECT @@session.sql_mode").Scan(&mode).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := migrateRegistrationIndex(db); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
indexes := []businessQueryIndex{{"tab_user", "idx_alert_user_window", []string{"source_db", "promote_id", "sw_register_time_unix", "puid"}}}
|
||||
for i := 0; i < 2; i++ {
|
||||
if err := migrateQueryIndexes(db, indexes); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
var after string
|
||||
if err := db.Raw("SELECT @@session.sql_mode").Scan(&after).Error; err != nil || mode != after {
|
||||
t.Fatalf("sql_mode changed: %v", err)
|
||||
}
|
||||
var values []string
|
||||
if err := db.Table("tab_user").Order("id").Pluck("register_time", &values).Error; err != nil || strings.Join(values, "|") != "|bad|1793635200 " {
|
||||
t.Fatalf("original strings changed: %q %v", values, err)
|
||||
}
|
||||
if err := migrateQueryIndexes(db, []businessQueryIndex{{"tab_user", "idx_invalid_column", []string{"missing_column"}}}); err == nil {
|
||||
t.Fatal("invalid DDL unexpectedly succeeded")
|
||||
}
|
||||
if err := db.Raw("SELECT @@session.sql_mode").Scan(&after).Error; err != nil || mode != after {
|
||||
t.Fatalf("failed DDL did not restore sql_mode: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMySQLChannelCreationSerializesAccount(t *testing.T) {
|
||||
db := openRehearsalMySQL(t)
|
||||
if err := db.AutoMigrate(&platformChannelPO{}, &channelSettlementPO{}); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user