diff --git a/contrib/drivers/clickhouse/clickhouse.go b/contrib/drivers/clickhouse/clickhouse.go index fa3c56120..f23fedfcf 100644 --- a/contrib/drivers/clickhouse/clickhouse.go +++ b/contrib/drivers/clickhouse/clickhouse.go @@ -65,19 +65,17 @@ func (d *Driver) Open(config *gdb.ConfigNode) (*sql.DB, error) { source string driver = "clickhouse" ) - if config.Pass != "" { + if config.Link != "" { + source = config.Link + } else if config.Pass != "" { source = fmt.Sprintf( - "clickhouse://%s:%s@%s:%s/%s", - config.User, config.Pass, config.Host, config.Port, config.Name) + "clickhouse://%s:%s@%s:%s/%s?charset=%s&debug=%s", + config.User, config.Pass, config.Host, config.Port, config.Name, config.Charset, gconv.String(config.Debug)) } else { source = fmt.Sprintf( - "clickhouse://%s@%s:%s/%s", - config.User, config.Host, config.Port, config.Name) + "clickhouse://%s@%s:%s/%s?charset=%s&debug=%s", + config.User, config.Host, config.Port, config.Name, config.Charset, gconv.String(config.Debug)) } - source += fmt.Sprintf( - "?charset=%s&debug=%s", - config.Charset, gconv.String(config.Debug), - ) db, err := sql.Open(driver, source) if err != nil { return nil, err diff --git a/contrib/drivers/clickhouse/clickhouse_test.go b/contrib/drivers/clickhouse/clickhouse_test.go index 064f5aa6c..28b84ce4f 100644 --- a/contrib/drivers/clickhouse/clickhouse_test.go +++ b/contrib/drivers/clickhouse/clickhouse_test.go @@ -242,3 +242,13 @@ func TestDriver_TableFields(t *testing.T) { gtest.AssertEQ(len(field), 4) gtest.AssertNQ(field, nil) } + +func TestDriver_OpenLink(t *testing.T) { + connect, err := gdb.New(gdb.ConfigNode{ + Link: "clickhouse://default@127.0.0.1:9000/default?dial_timeout=200ms&max_execution_time=60&skip_verify=true&secure=false&compress=true", + Type: "clickhouse", + }) + gtest.AssertNil(err) + gtest.AssertNE(connect, nil) + gtest.AssertNil(connect.PingMaster()) +}