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