Automatically rename _unix suffix

This commit is contained in:
kolaente 2020-06-22 22:11:01 +02:00
parent 78757162ab
commit 6092fbd78d
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
1 changed files with 29 additions and 16 deletions

View File

@ -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