Automatically rename _unix suffix
This commit is contained in:
parent
78757162ab
commit
6092fbd78d
|
@ -19,6 +19,7 @@ package migration
|
|||
import (
|
||||
"fmt"
|
||||
"src.techknowlogick.com/xormigrate"
|
||||
"strings"
|
||||
"xorm.io/xorm"
|
||||
"xorm.io/xorm/schemas"
|
||||
)
|
||||
|
@ -32,27 +33,39 @@ func init() {
|
|||
convertTime := func(table, column string) error {
|
||||
|
||||
var sql []string
|
||||
colOld := "`" + column + "`"
|
||||
colTmp := "`" + column + `_ts` + "`"
|
||||
// If the column namme ends with "_unix", we want to directly remove that since the timestamp
|
||||
// isn't a unix one anymore.
|
||||
var colFinal = colOld
|
||||
if strings.HasSuffix(column, "_unix") {
|
||||
colFinal = "`" + column[:len(column)-5] + "`"
|
||||
}
|
||||
|
||||
switch tx.Dialect().URI().DBType {
|
||||
case schemas.POSTGRES:
|
||||
sql = []string{`
|
||||
ALTER TABLE ` + table + ` DROP COLUMN IF EXISTS ` + column + `_ts;
|
||||
ALTER TABLE ` + table + ` ADD COLUMN ` + column + `_ts TIMESTAMP WITHOUT TIME ZONE NULL;
|
||||
UPDATE ` + table + ` SET ` + column + `_ts = TIMESTAMP 'epoch' + ` + column + ` * INTERVAL '1 second';
|
||||
ALTER TABLE ` + table + ` ALTER COLUMN ` + column + ` TYPE TIMESTAMP USING ` + column + `_ts;
|
||||
ALTER TABLE ` + table + ` DROP COLUMN ` + column + `_ts;
|
||||
`}
|
||||
case schemas.MYSQL:
|
||||
|
||||
colOld := "`" + column + "`"
|
||||
colNew := "`" + column + `_ts` + "`"
|
||||
|
||||
sql = []string{
|
||||
"ALTER TABLE " + table + " DROP COLUMN IF EXISTS " + colNew + ";",
|
||||
"ALTER TABLE " + table + " ADD COLUMN " + colNew + " DATETIME NULL;",
|
||||
"UPDATE " + table + " SET " + colNew + " = FROM_UNIXTIME(" + colOld + ");",
|
||||
"ALTER TABLE " + table + " DROP COLUMN IF EXISTS " + colTmp + ";",
|
||||
"ALTER TABLE " + table + " ADD COLUMN " + colTmp + " TIMESTAMP WITHOUT TIME ZONE NULL;",
|
||||
}
|
||||
if colFinal != colOld {
|
||||
sql = append(sql, "ALTER TABLE "+table+" ADD COLUMN "+colFinal+" TIMESTAMP WITHOUT TIME ZONE NULL;")
|
||||
}
|
||||
sql = append(sql,
|
||||
"UPDATE "+table+" SET "+colTmp+" = TIMESTAMP 'epoch' + "+colOld+" * INTERVAL '1 second';",
|
||||
"ALTER TABLE "+table+" ALTER COLUMN "+colFinal+" TYPE TIMESTAMP USING "+colTmp+";",
|
||||
"ALTER TABLE "+table+" DROP COLUMN "+colTmp+";",
|
||||
)
|
||||
if colFinal != colOld {
|
||||
sql = append(sql, "ALTER TABLE "+table+" DROP COLUMN "+colOld+";")
|
||||
}
|
||||
case schemas.MYSQL:
|
||||
sql = []string{
|
||||
"ALTER TABLE " + table + " DROP COLUMN IF EXISTS " + colTmp + ";",
|
||||
"ALTER TABLE " + table + " ADD COLUMN " + colTmp + " DATETIME NULL;",
|
||||
"UPDATE " + table + " SET " + colTmp + " = FROM_UNIXTIME(" + colOld + ");",
|
||||
"ALTER TABLE " + table + " DROP COLUMN " + colOld + ";",
|
||||
"ALTER TABLE " + table + " CHANGE " + colNew + " " + colOld + " DATETIME NOT NULL;",
|
||||
"ALTER TABLE " + table + " CHANGE " + colTmp + " " + colFinal + " DATETIME NOT NULL;",
|
||||
}
|
||||
case schemas.SQLITE:
|
||||
// welp
|
||||
|
|
Loading…
Reference in New Issue