From ae5891068e0ee26878a7390ce29db57851b077f4 Mon Sep 17 00:00:00 2001 From: John Guo Date: Wed, 27 Apr 2022 17:15:26 +0800 Subject: [PATCH] schema switch in runtime feature for clickhouse/mssql/pgsql/oracle --- contrib/drivers/clickhouse/clickhouse.go | 5 +++++ contrib/drivers/mssql/mssql.go | 4 ++++ contrib/drivers/oracle/oracle.go | 5 +++++ contrib/drivers/pgsql/pgsql.go | 4 ++++ database/gdb/gdb_driver_mysql.go | 1 + 5 files changed, 19 insertions(+) diff --git a/contrib/drivers/clickhouse/clickhouse.go b/contrib/drivers/clickhouse/clickhouse.go index c35ee8184..cc54a65a0 100644 --- a/contrib/drivers/clickhouse/clickhouse.go +++ b/contrib/drivers/clickhouse/clickhouse.go @@ -66,8 +66,13 @@ func (d *Driver) Open(config *gdb.ConfigNode) (*sql.DB, error) { source string driver = "clickhouse" ) + // clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms&max_execution_time=60 if config.Link != "" { source = config.Link + // Custom changing the schema in runtime. + if config.Name != "" { + source, _ = gregex.ReplaceString(`@(.+?)/([\w\.\-]+)+`, "@$1/"+config.Name, source) + } } else if config.Pass != "" { source = fmt.Sprintf( "clickhouse://%s:%s@%s:%s/%s?charset=%s&debug=%s", diff --git a/contrib/drivers/mssql/mssql.go b/contrib/drivers/mssql/mssql.go index f566870ce..c32c90a4f 100644 --- a/contrib/drivers/mssql/mssql.go +++ b/contrib/drivers/mssql/mssql.go @@ -66,6 +66,10 @@ func (d *Driver) Open(config *gdb.ConfigNode) (db *sql.DB, err error) { ) if config.Link != "" { source = config.Link + // Custom changing the schema in runtime. + if config.Name != "" { + source, _ = gregex.ReplaceString(`database=([\w\.\-]+)+`, "database="+config.Name, source) + } } else { source = fmt.Sprintf( "user id=%s;password=%s;server=%s;port=%s;database=%s;encrypt=disable", diff --git a/contrib/drivers/oracle/oracle.go b/contrib/drivers/oracle/oracle.go index ccae47bd5..3bab5bfc1 100644 --- a/contrib/drivers/oracle/oracle.go +++ b/contrib/drivers/oracle/oracle.go @@ -67,8 +67,13 @@ func (d *Driver) Open(config *gdb.ConfigNode) (db *sql.DB, err error) { source string underlyingDriverName = "oci8" ) + // [username/[password]@]host[:port][/service_name][?param1=value1&...¶mN=valueN] if config.Link != "" { source = config.Link + // Custom changing the schema in runtime. + if config.Name != "" { + source, _ = gregex.ReplaceString(`@(.+?)/([\w\.\-]+)+`, "@$1/"+config.Name, source) + } } else { source = fmt.Sprintf( "%s/%s@%s:%s/%s", diff --git a/contrib/drivers/pgsql/pgsql.go b/contrib/drivers/pgsql/pgsql.go index 31696134e..e9d2ccfbe 100644 --- a/contrib/drivers/pgsql/pgsql.go +++ b/contrib/drivers/pgsql/pgsql.go @@ -65,6 +65,10 @@ func (d *Driver) Open(config *gdb.ConfigNode) (db *sql.DB, err error) { ) if config.Link != "" { source = config.Link + // Custom changing the schema in runtime. + if config.Name != "" { + source, _ = gregex.ReplaceString(`dbname=([\w\.\-]+)+`, "dbname="+config.Name, source) + } } else { source = fmt.Sprintf( "user=%s password=%s host=%s port=%s dbname=%s sslmode=disable", diff --git a/database/gdb/gdb_driver_mysql.go b/database/gdb/gdb_driver_mysql.go index 40b8aa933..cc9fcb247 100644 --- a/database/gdb/gdb_driver_mysql.go +++ b/database/gdb/gdb_driver_mysql.go @@ -42,6 +42,7 @@ func (d *DriverMysql) Open(config *ConfigNode) (db *sql.DB, err error) { source string underlyingDriverName = "mysql" ) + // [username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] if config.Link != "" { source = config.Link // Custom changing the schema in runtime.