Support greenplum
This commit is contained in:
parent
f25d0eedf2
commit
eca45c6f24
|
@ -199,15 +199,16 @@ func regDrvsNDialects() bool {
|
|||
getDriver func() Driver
|
||||
getDialect func() Dialect
|
||||
}{
|
||||
"mssql": {"mssql", func() Driver { return &odbcDriver{} }, func() Dialect { return &mssql{} }},
|
||||
"odbc": {"mssql", func() Driver { return &odbcDriver{} }, func() Dialect { return &mssql{} }}, // !nashtsai! TODO change this when supporting MS Access
|
||||
"mssql": {"mssql", func() Driver { return &odbcDriver{"mssql"} }, func() Dialect { return &mssql{} }},
|
||||
"odbc": {"mssql", func() Driver { return &odbcDriver{"odbc"} }, func() Dialect { return &mssql{} }}, // !nashtsai! TODO change this when supporting MS Access
|
||||
"mysql": {"mysql", func() Driver { return &mysqlDriver{} }, func() Dialect { return &mysql{} }},
|
||||
"mymysql": {"mysql", func() Driver { return &mymysqlDriver{} }, func() Dialect { return &mysql{} }},
|
||||
"postgres": {"postgres", func() Driver { return &pqDriver{} }, func() Dialect { return &postgres{} }},
|
||||
"postgres": {"postgres", func() Driver { return &pqDriver{"postgres"} }, func() Dialect { return &postgres{} }},
|
||||
"pgx": {"postgres", func() Driver { return &pqDriverPgx{} }, func() Dialect { return &postgres{} }},
|
||||
"sqlite3": {"sqlite3", func() Driver { return &sqlite3Driver{} }, func() Dialect { return &sqlite3{} }},
|
||||
"oci8": {"oracle", func() Driver { return &oci8Driver{} }, func() Dialect { return &oracle{} }},
|
||||
"goracle": {"oracle", func() Driver { return &goracleDriver{} }, func() Dialect { return &oracle{} }},
|
||||
"greenplum": {schemas.GREENPLUM, func() Driver { return &pqDriver{"postgres"} }, func() Dialect { return &greenplum{} }},
|
||||
}
|
||||
|
||||
for driverName, v := range providedDrvsNDialects {
|
||||
|
|
|
@ -8,7 +8,9 @@ import (
|
|||
"fmt"
|
||||
)
|
||||
|
||||
// Driver represents a driver interface
|
||||
type Driver interface {
|
||||
Name() string
|
||||
Parse(string, string) (*URI, error)
|
||||
}
|
||||
|
||||
|
@ -16,6 +18,7 @@ var (
|
|||
drivers = map[string]Driver{}
|
||||
)
|
||||
|
||||
// RegisterDriver register a driver
|
||||
func RegisterDriver(driverName string, driver Driver) {
|
||||
if driver == nil {
|
||||
panic("core: Register driver is nil")
|
||||
|
|
|
@ -531,6 +531,11 @@ func (db *mssql) Filters() []Filter {
|
|||
}
|
||||
|
||||
type odbcDriver struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (p *odbcDriver) Name() string {
|
||||
return p.name
|
||||
}
|
||||
|
||||
func (p *odbcDriver) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
|
|
|
@ -573,6 +573,10 @@ func (db *mysql) Filters() []Filter {
|
|||
type mymysqlDriver struct {
|
||||
}
|
||||
|
||||
func (d *mymysqlDriver) Name() string {
|
||||
return "mymysql"
|
||||
}
|
||||
|
||||
func (p *mymysqlDriver) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
uri := &URI{DBType: schemas.MYSQL}
|
||||
|
||||
|
@ -625,6 +629,10 @@ func (p *mymysqlDriver) Parse(driverName, dataSourceName string) (*URI, error) {
|
|||
type mysqlDriver struct {
|
||||
}
|
||||
|
||||
func (d *mysqlDriver) Name() string {
|
||||
return "mysql"
|
||||
}
|
||||
|
||||
func (p *mysqlDriver) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
dsnPattern := regexp.MustCompile(
|
||||
`^(?:(?P<user>.*?)(?::(?P<passwd>.*))?@)?` + // [user[:password]@]
|
||||
|
|
|
@ -805,6 +805,10 @@ func (db *oracle) Filters() []Filter {
|
|||
type goracleDriver struct {
|
||||
}
|
||||
|
||||
func (d *goracleDriver) Name() string {
|
||||
return "goracle"
|
||||
}
|
||||
|
||||
func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
db := &URI{DBType: schemas.ORACLE}
|
||||
dsnPattern := regexp.MustCompile(
|
||||
|
@ -831,6 +835,10 @@ func (cfg *goracleDriver) Parse(driverName, dataSourceName string) (*URI, error)
|
|||
type oci8Driver struct {
|
||||
}
|
||||
|
||||
func (d *oci8Driver) Name() string {
|
||||
return "oci8"
|
||||
}
|
||||
|
||||
// dataSourceName=user/password@ipv4:port/dbname
|
||||
// dataSourceName=user/password@[ipv6]:port/dbname
|
||||
func (p *oci8Driver) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
|
|
|
@ -1241,6 +1241,11 @@ func (db *postgres) Filters() []Filter {
|
|||
}
|
||||
|
||||
type pqDriver struct {
|
||||
name string
|
||||
}
|
||||
|
||||
func (d *pqDriver) Name() string {
|
||||
return d.name
|
||||
}
|
||||
|
||||
type values map[string]string
|
||||
|
@ -1321,6 +1326,10 @@ type pqDriverPgx struct {
|
|||
pqDriver
|
||||
}
|
||||
|
||||
func (pgx *pqDriverPgx) Name() string {
|
||||
return "pgx"
|
||||
}
|
||||
|
||||
func (pgx *pqDriverPgx) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
// Remove the leading characters for driver to work
|
||||
if len(dataSourceName) >= 9 && dataSourceName[0] == 0 {
|
||||
|
|
|
@ -520,6 +520,10 @@ func (db *sqlite3) Filters() []Filter {
|
|||
type sqlite3Driver struct {
|
||||
}
|
||||
|
||||
func (p *sqlite3Driver) Name() string {
|
||||
return "sqlite3"
|
||||
}
|
||||
|
||||
func (p *sqlite3Driver) Parse(driverName, dataSourceName string) (*URI, error) {
|
||||
if strings.Contains(dataSourceName, "?") {
|
||||
dataSourceName = dataSourceName[:strings.Index(dataSourceName, "?")]
|
||||
|
|
|
@ -19,6 +19,7 @@ const (
|
|||
MYSQL DBType = "mysql"
|
||||
MSSQL DBType = "mssql"
|
||||
ORACLE DBType = "oracle"
|
||||
GREENPLUM DBType = "greenplum"
|
||||
)
|
||||
|
||||
// SQLType represents SQL types
|
||||
|
|
Loading…
Reference in New Issue