Fix sql migration query for mysql

This commit is contained in:
kolaente 2020-06-22 21:30:05 +02:00
parent 557be7c334
commit 155371a3fd
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
1 changed files with 20 additions and 14 deletions

View File

@ -31,25 +31,29 @@ func init() {
convertTime := func(table, column string) error {
var sql string
var sql []string
switch tx.Dialect().URI().DBType {
case schemas.POSTGRES:
sql = `
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:
sql = `
ALTER TABLE ` + table + ` DROP COLUMN IF EXISTS ` + column + `_ts;
ALTER TABLE ` + table + ` ADD ` + column + `_ts DATETIME null;
UPDATE ` + table + ` SET ` + column + `_ts = FROM_UNIXTIME(` + column + `);
ALTER TABLE ` + table + ` DROP COLUMN ` + column + `;
ALTER TABLE ` + table + ` CHANGE ` + column + `_ts ` + column + ` DATETIME NOT NULL;
`
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 " + colOld + ";",
"ALTER TABLE " + table + " CHANGE " + colNew + " " + colOld + " DATETIME NOT NULL;",
}
case schemas.SQLITE:
// welp
default:
@ -60,10 +64,12 @@ ALTER TABLE ` + table + ` CHANGE ` + column + `_ts ` + column + ` DATETIME NOT N
if err := sess.Begin(); err != nil {
return err
}
_, err := sess.Exec(sql)
if err != nil {
_ = sess.Rollback()
return err
for _, s := range sql {
_, err := sess.Exec(s)
if err != nil {
_ = sess.Rollback()
return err
}
}
if err := sess.Commit(); err != nil {
return err