From e3b04303deb6db986e9ac806b05758994ef52087 Mon Sep 17 00:00:00 2001 From: tserakhau Date: Mon, 17 Mar 2025 21:51:51 +0100 Subject: [PATCH 1/2] generate clikchouse fqdn in discovery --- connectors/clickhouse/connector.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/connectors/clickhouse/connector.go b/connectors/clickhouse/connector.go index ee1a21a..7bc00de 100644 --- a/connectors/clickhouse/connector.go +++ b/connectors/clickhouse/connector.go @@ -4,6 +4,7 @@ import ( "context" _ "embed" "fmt" + "github.com/ClickHouse/clickhouse-go/v2" "strings" "github.com/centralmind/gateway/connectors" @@ -20,14 +21,14 @@ import ( var docString string func init() { - connectors.Register(func(cfg Config) (connectors.Connector, error) { + connectors.Register(func(cfg *Config) (connectors.Connector, error) { dsn := cfg.MakeDSN() db, err := sqlx.Open("clickhouse", dsn) if err != nil { return nil, xerrors.Errorf("unable to open ClickHouse db: %w", err) } return &Connector{ - config: cfg, + config: *cfg, db: db, base: &connectors.BaseConnector{DB: db}, }, nil @@ -66,13 +67,18 @@ func (c *Config) UnmarshalYAML(value *yaml.Node) error { return nil } -func (c Config) ExtraPrompt() []string { +func (c *Config) ExtraPrompt() []string { return []string{} } -func (c Config) MakeDSN() string { +func (c *Config) MakeDSN() string { // If connection string is provided, use it directly if c.ConnString != "" { + cfg, err := clickhouse.ParseDSN(c.ConnString) + if err != nil { + panic(err) + } + c.Database = cfg.Auth.Database return c.ConnString } @@ -91,11 +97,11 @@ func (c Config) MakeDSN() string { return fmt.Sprintf("%s://%s:%s@%s:%d/%s", protocol, c.User, c.Password, host, c.Port, c.Database) } -func (c Config) Type() string { +func (c *Config) Type() string { return "clickhouse" } -func (c Config) Doc() string { +func (c *Config) Doc() string { return docString } @@ -106,7 +112,7 @@ type Connector struct { } func (c Connector) Config() connectors.Config { - return c.config + return &c.config } func (c Connector) Sample(ctx context.Context, table model.Table) ([]map[string]any, error) { @@ -213,7 +219,7 @@ func (c Connector) LoadsColumns(ctx context.Context, tableName string) ([]model. return nil, err } columns = append(columns, model.ColumnSchema{ - Name: name, + Name: fmt.Sprintf(`"%s"."%s"`, c.config.Database, name), Type: c.GuessColumnType(dataType), PrimaryKey: isPrimaryKey, }) From 26ea7bdc93e96d3ab4909e0217b2091ad64dbf23 Mon Sep 17 00:00:00 2001 From: tserakhau Date: Mon, 17 Mar 2025 21:57:18 +0100 Subject: [PATCH 2/2] fix --- connectors/clickhouse/connector.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/connectors/clickhouse/connector.go b/connectors/clickhouse/connector.go index 7bc00de..74fdcdd 100644 --- a/connectors/clickhouse/connector.go +++ b/connectors/clickhouse/connector.go @@ -160,7 +160,7 @@ func (c Connector) Discovery(ctx context.Context) ([]model.Table, error) { } table := model.Table{ - Name: tableName, + Name: fmt.Sprintf(`"%s"."%s"`, c.config.Database, tableName), Columns: columns, RowCount: rowCount, } @@ -219,7 +219,7 @@ func (c Connector) LoadsColumns(ctx context.Context, tableName string) ([]model. return nil, err } columns = append(columns, model.ColumnSchema{ - Name: fmt.Sprintf(`"%s"."%s"`, c.config.Database, name), + Name: name, Type: c.GuessColumnType(dataType), PrimaryKey: isPrimaryKey, })