fix(be): migration for dropping foreign key

This commit is contained in:
Denis Gukov 2022-02-06 14:29:56 +05:00
parent c578653f25
commit 1993a14fb6
3 changed files with 31 additions and 33 deletions

View File

@ -11,14 +11,14 @@ import (
)
var (
autoIncrementRE = regexp.MustCompile(`(?i)\bautoincrement\b`)
serialRE = regexp.MustCompile(`(?i)\binteger primary key autoincrement\b`)
dateTimeTypeRE = regexp.MustCompile(`(?i)\bdatetime\b`)
tinyintRE = regexp.MustCompile(`(?i)\btinyint\b`)
longtextRE = regexp.MustCompile(`(?i)\blongtext\b`)
ifExistsRE = regexp.MustCompile(`(?i)\bif exists\b`)
changeRE = regexp.MustCompile(`^alter table \x60(\w+)\x60 change \x60(\w+)\x60 \x60(\w+)\x60 ([\w\(\)]+)( not null)?$`)
dropForeignKeyRE = regexp.MustCompile(`^alter table \x60(\w+)\x60 drop foreign key \x60(\w+)\x60 /\* postgres:\x60(\w*)\x60 mysql:\x60(\w*)\x60 \*/$`)
autoIncrementRE = regexp.MustCompile(`(?i)\bautoincrement\b`)
serialRE = regexp.MustCompile(`(?i)\binteger primary key autoincrement\b`)
dateTimeTypeRE = regexp.MustCompile(`(?i)\bdatetime\b`)
tinyintRE = regexp.MustCompile(`(?i)\btinyint\b`)
longtextRE = regexp.MustCompile(`(?i)\blongtext\b`)
ifExistsRE = regexp.MustCompile(`(?i)\bif exists\b`)
changeRE = regexp.MustCompile(`^alter table \x60(\w+)\x60 change \x60(\w+)\x60 \x60(\w+)\x60 ([\w\(\)]+)( not null)?$`)
//dropForeignKeyRE = regexp.MustCompile(`^alter table \x60(\w+)\x60 drop foreign key \x60(\w+)\x60 /\* postgres:\x60(\w*)\x60 mysql:\x60(\w*)\x60 \*/$`)
dropForeignKey2RE = regexp.MustCompile(`(?i)\bdrop foreign key\b`)
)
@ -51,33 +51,10 @@ func getVersionSQL(path string) (queries []string) {
func (d *SqlDb) prepareMigration(query string) string {
switch d.sql.Dialect.(type) {
case gorp.MySQLDialect:
mysqlFullVersion, err := d.sql.SelectStr("select version()")
if err == nil && strings.Contains(mysqlFullVersion, "MariaDB") {
// Actions for MariaDB only
} else {
// Actions for MySQL only
m := dropForeignKeyRE.FindStringSubmatch(query)
if m != nil {
tableName := m[1]
foreignKeyNameMySQL := m[4]
if foreignKeyNameMySQL == "" {
query = ""
} else {
query = "alter table `" + tableName + "` drop constraint `" + foreignKeyNameMySQL + "`"
}
}
}
query = autoIncrementRE.ReplaceAllString(query, "auto_increment")
query = ifExistsRE.ReplaceAllString(query, "")
case gorp.PostgresDialect:
m := dropForeignKeyRE.FindStringSubmatch(query)
if m != nil {
tableName := m[1]
foreignKeyNamePostgres := m[3]
query = "alter table `" + tableName + "` drop constraint `" + foreignKeyNamePostgres + "`"
}
m = changeRE.FindStringSubmatch(query)
m := changeRE.FindStringSubmatch(query)
if m != nil {
tableName := m[1]
oldColumnName := m[2]
@ -194,6 +171,8 @@ func (d *SqlDb) ApplyMigration(migration db.Migration) error {
switch migration.Version {
case "2.8.26":
err = migration_2_8_26{db: d}.Apply(tx)
case "2.8.42":
err = migration_2_8_42{db: d}.Apply(tx)
}
if err != nil {

View File

@ -0,0 +1,19 @@
package sql
import "github.com/go-gorp/gorp/v3"
type migration_2_8_42 struct {
db *SqlDb
}
func (m migration_2_8_42) Apply(tx *gorp.Transaction) error {
switch m.db.sql.Dialect.(type) {
case gorp.MySQLDialect:
_, _ = tx.Exec(m.db.PrepareQuery("alter table `task` drop foreign key `task_ibfk_3`"))
case gorp.PostgresDialect:
_, err := tx.Exec(
m.db.PrepareQuery("alter table `task` drop constraint if exists `task_build_task_id_fkey`"))
return err
}
return nil
}

View File

@ -1 +1 @@
alter table `task` drop foreign key `task_ibfk_3` /* postgres:`task_build_task_id_fkey` mysql:`` */;
-- see migration_2_8_42.go