Added a dialect for TiDB

This commit is contained in:
Simon Wikstrand 2017-12-01 18:50:38 +01:00
parent a68655caf6
commit 19673d2b47
No known key found for this signature in database
GPG Key ID: 1FE8AC12BCDD37E7

View File

@ -31,6 +31,8 @@ func SetDialect(d string) error {
dialect = &Sqlite3Dialect{}
case "redshift":
dialect = &RedshiftDialect{}
case "tidb":
dialect = &TiDBDialect{}
default:
return fmt.Errorf("%q: unknown dialect", d)
}
@ -156,3 +158,33 @@ func (rs RedshiftDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
return rows, err
}
////////////////////////////
// TiDB
////////////////////////////
// MySQLDialect struct.
type TiDBDialect struct{}
func (m TiDBDialect) createVersionTableSQL() string {
return `CREATE TABLE goose_db_version (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE,
version_id bigint NOT NULL,
is_applied boolean NOT NULL,
tstamp timestamp NULL default now(),
PRIMARY KEY(id)
);`
}
func (m TiDBDialect) insertVersionSQL() string {
return "INSERT INTO goose_db_version (version_id, is_applied) VALUES (?, ?);"
}
func (m TiDBDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
rows, err := db.Query("SELECT version_id, is_applied from goose_db_version ORDER BY id DESC")
if err != nil {
return nil, err
}
return rows, err
}