mirror of
https://github.com/pressly/goose.git
synced 2025-05-25 00:41:37 +00:00
add clickhouse support
This commit is contained in:
parent
e42e49944b
commit
954940e3ab
7
cmd/goose/driver_clickhouse.go
Normal file
7
cmd/goose/driver_clickhouse.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// +build !no_sqlite3
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "github.com/ClickHouse/clickhouse-go"
|
||||||
|
)
|
@ -85,6 +85,7 @@ Drivers:
|
|||||||
sqlite3
|
sqlite3
|
||||||
mssql
|
mssql
|
||||||
redshift
|
redshift
|
||||||
|
clickhouse
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
goose sqlite3 ./foo.db status
|
goose sqlite3 ./foo.db status
|
||||||
@ -98,6 +99,7 @@ Examples:
|
|||||||
goose redshift "postgres://user:password@qwerty.us-east-1.redshift.amazonaws.com:5439/db" status
|
goose redshift "postgres://user:password@qwerty.us-east-1.redshift.amazonaws.com:5439/db" status
|
||||||
goose tidb "user:password@/dbname?parseTime=true" status
|
goose tidb "user:password@/dbname?parseTime=true" status
|
||||||
goose mssql "sqlserver://user:password@dbname:1433?database=master" status
|
goose mssql "sqlserver://user:password@dbname:1433?database=master" status
|
||||||
|
goose clickhouse "tcp://127.0.0.1:9000" status
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
`
|
`
|
||||||
|
2
db.go
2
db.go
@ -22,7 +22,7 @@ func OpenDBWithDriver(driver string, dbstring string) (*sql.DB, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch driver {
|
switch driver {
|
||||||
case "postgres", "sqlite3", "mysql", "sqlserver":
|
case "postgres", "sqlite3", "mysql", "sqlserver", "clickhouse":
|
||||||
return sql.Open(driver, dbstring)
|
return sql.Open(driver, dbstring)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unsupported driver %s", driver)
|
return nil, fmt.Errorf("unsupported driver %s", driver)
|
||||||
|
40
dialect.go
40
dialect.go
@ -37,6 +37,8 @@ func SetDialect(d string) error {
|
|||||||
dialect = &RedshiftDialect{}
|
dialect = &RedshiftDialect{}
|
||||||
case "tidb":
|
case "tidb":
|
||||||
dialect = &TiDBDialect{}
|
dialect = &TiDBDialect{}
|
||||||
|
case "clickhouse":
|
||||||
|
dialect = &ClickHouseDialect{}
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("%q: unknown dialect", d)
|
return fmt.Errorf("%q: unknown dialect", d)
|
||||||
}
|
}
|
||||||
@ -282,3 +284,41 @@ func (m TiDBDialect) migrationSQL() string {
|
|||||||
func (m TiDBDialect) deleteVersionSQL() string {
|
func (m TiDBDialect) deleteVersionSQL() string {
|
||||||
return fmt.Sprintf("DELETE FROM %s WHERE version_id=?;", TableName())
|
return fmt.Sprintf("DELETE FROM %s WHERE version_id=?;", TableName())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////
|
||||||
|
// ClickHouse
|
||||||
|
////////////////////////////
|
||||||
|
|
||||||
|
// ClickHouseDialect struct.
|
||||||
|
type ClickHouseDialect struct{}
|
||||||
|
|
||||||
|
func (m ClickHouseDialect) createVersionTableSQL() string {
|
||||||
|
return `
|
||||||
|
CREATE TABLE goose_db_version (
|
||||||
|
version_id Int64,
|
||||||
|
is_applied UInt8,
|
||||||
|
date Date default now(),
|
||||||
|
tstamp DateTime default now()
|
||||||
|
) Engine = MergeTree(date, (date), 8192)
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ClickHouseDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
|
||||||
|
rows, err := db.Query(fmt.Sprintf("SELECT version_id, is_applied FROM %s ORDER BY tstamp DESC LIMIT 1", TableName()))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return rows, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ClickHouseDialect) insertVersionSQL() string {
|
||||||
|
return fmt.Sprintf("INSERT INTO %s (version_id, is_applied) VALUES (?, ?)", TableName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ClickHouseDialect) migrationSQL() string {
|
||||||
|
return fmt.Sprintf("SELECT tstamp, is_applied FROM %s WHERE version_id = ? ORDER BY tstamp DESC LIMIT 1", TableName())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ClickHouseDialect) deleteVersionSQL() string {
|
||||||
|
return fmt.Sprintf("ALTER TABLE %s DELETE WHERE version_id = ?", TableName())
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user