Merge pull request #131 from pressly/delete_row_on_down

delete version row on down
pull/133/head v2.4.4
Vojtech Vitek 2018-11-26 12:27:56 -05:00 committed by GitHub
commit 5807a91215
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 9 deletions

View File

@ -11,6 +11,7 @@ type SQLDialect interface {
createVersionTableSQL() string // sql string to create the db version table
insertVersionSQL() string // sql string to insert the initial version table row
updateVersionSQL() string // sql string to update version
deleteVersionSQL() string // sql string to delete version
dbVersionQuery(db *sql.DB) (*sql.Rows, error)
}
@ -63,7 +64,7 @@ func (pg PostgresDialect) insertVersionSQL() string {
}
func (pg PostgresDialect) updateVersionSQL() string {
return fmt.Sprintf("UPDATE %s SET version_id=? WHERE version_id=?;", TableName())
return fmt.Sprintf("UPDATE %s SET version_id=? WHERE version_id=$1;", TableName())
}
func (pg PostgresDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
@ -75,6 +76,10 @@ func (pg PostgresDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
return rows, err
}
func (pg PostgresDialect) deleteVersionSQL() string {
return fmt.Sprintf("DELETE FROM %s WHERE version_id=$1;", TableName())
}
////////////////////////////
// MySQL
////////////////////////////
@ -109,6 +114,10 @@ func (m MySQLDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
return rows, err
}
func (m MySQLDialect) deleteVersionSQL() string {
return fmt.Sprintf("DELETE FROM %s WHERE version_id=?;", TableName())
}
////////////////////////////
// sqlite3
////////////////////////////
@ -130,7 +139,7 @@ func (m Sqlite3Dialect) insertVersionSQL() string {
}
func (m Sqlite3Dialect) updateVersionSQL() string {
return fmt.Sprintf("UPDATE %s SET version_id=? WHERE version_id=?;", TableName())
return fmt.Sprintf("UPDATE %s SET version_id=%1 WHERE version_id=2;", TableName())
}
func (m Sqlite3Dialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
@ -142,6 +151,10 @@ func (m Sqlite3Dialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
return rows, err
}
func (m Sqlite3Dialect) deleteVersionSQL() string {
return fmt.Sprintf("DELETE FROM %s WHERE version_id=?;", TableName())
}
////////////////////////////
// Redshift
////////////////////////////
@ -164,7 +177,7 @@ func (rs RedshiftDialect) insertVersionSQL() string {
}
func (rs RedshiftDialect) updateVersionSQL() string {
return fmt.Sprintf("UPDATE %s SET version_id=? WHERE version_id=?;", TableName())
return fmt.Sprintf("UPDATE %s SET version_id=%1 WHERE version_id=$2;", TableName())
}
func (rs RedshiftDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
@ -176,6 +189,10 @@ func (rs RedshiftDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
return rows, err
}
func (rs RedshiftDialect) deleteVersionSQL() string {
return fmt.Sprintf("DELETE FROM %s WHERE version_id=?;", TableName())
}
////////////////////////////
// TiDB
////////////////////////////
@ -209,3 +226,7 @@ func (m TiDBDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
return rows, err
}
func (m TiDBDialect) deleteVersionSQL() string {
return fmt.Sprintf("DELETE FROM %s WHERE version_id=?;", TableName())
}

View File

@ -77,9 +77,17 @@ func (m *Migration) run(db *sql.DB, direction bool) error {
return err
}
}
if _, err := tx.Exec(GetDialect().insertVersionSQL(), m.Version, direction); err != nil {
tx.Rollback()
return err
if direction {
if _, err := tx.Exec(GetDialect().insertVersionSQL(), m.Version, direction); err != nil {
tx.Rollback()
return err
}
} else {
if _, err := tx.Exec(GetDialect().deleteVersionSQL(), m.Version); err != nil {
tx.Rollback()
return err
}
}
return tx.Commit()

View File

@ -164,9 +164,17 @@ func runSQLMigration(db *sql.DB, scriptFile string, v int64, direction bool) err
return err
}
}
if _, err := tx.Exec(GetDialect().insertVersionSQL(), v, direction); err != nil {
tx.Rollback()
return err
if direction {
if _, err := tx.Exec(GetDialect().insertVersionSQL(), v, direction); err != nil {
tx.Rollback()
return err
}
} else {
if _, err := tx.Exec(GetDialect().deleteVersionSQL(), v); err != nil {
tx.Rollback()
return err
}
}
return tx.Commit()