From c8a5764b94079f56a5ed7e58a5aeff70d2340d02 Mon Sep 17 00:00:00 2001 From: hantmac Date: Sat, 7 Oct 2023 09:16:40 +0800 Subject: [PATCH 1/4] feat:support db Ping --- connection.go | 11 ++++++++++- driver.go | 2 +- stmt.go | 6 +----- tests/main_test.go | 17 ++++++++++++++--- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/connection.go b/connection.go index db1e1c9..2b1c250 100644 --- a/connection.go +++ b/connection.go @@ -130,7 +130,7 @@ func (dc *DatabendConn) PrepareContext(ctx context.Context, query string) (drive return dc.prepare(query) } -func buildDatabendConn(ctx context.Context, config Config) (*DatabendConn, error) { +func BuildDatabendConn(ctx context.Context, config Config) (*DatabendConn, error) { dc := &DatabendConn{ ctx: ctx, cfg: &config, @@ -206,3 +206,12 @@ func (dc *DatabendConn) Rollback() error { dc.Close() return nil } + +func (dc *DatabendConn) Ping() error { + r, err := dc.Query("SELECT VERSION()", []driver.Value{}) + if err != nil { + return err + } + fmt.Println(r) + return nil +} diff --git a/driver.go b/driver.go index ac7f960..a8d5e31 100644 --- a/driver.go +++ b/driver.go @@ -28,7 +28,7 @@ func (d DatabendDriver) OpenWithConfig( config Config) ( driver.Conn, error) { logger.Info("OpenWithConfig") - dc, err := buildDatabendConn(ctx, config) + dc, err := BuildDatabendConn(ctx, config) if err != nil { return nil, err } diff --git a/stmt.go b/stmt.go index f8db564..79d4ddf 100644 --- a/stmt.go +++ b/stmt.go @@ -3,14 +3,10 @@ package godatabend import ( "context" "database/sql/driver" - "regexp" - ldriver "github.com/databendcloud/databend-go/lib/driver" "github.com/pkg/errors" -) -var ( - splitInsertRe = regexp.MustCompile(`(?si)(.+\s*VALUES)\s*(\(.+\))`) + ldriver "github.com/databendcloud/databend-go/lib/driver" ) type databendStmt struct { diff --git a/tests/main_test.go b/tests/main_test.go index 6b0f538..9603e9d 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -1,6 +1,7 @@ package tests import ( + "context" "database/sql" "fmt" "os" @@ -33,9 +34,10 @@ func TestDatabendSuite(t *testing.T) { type DatabendTestSuite struct { suite.Suite - db *sql.DB - table string - r *require.Assertions + db *sql.DB + databendConn *dc.DatabendConn + table string + r *require.Assertions } func (s *DatabendTestSuite) SetupSuite() { @@ -46,6 +48,10 @@ func (s *DatabendTestSuite) SetupSuite() { s.db, err = sql.Open("databend", dsn) s.Nil(err) + cfg, err := dc.ParseDSN(dsn) + s.Nil(err) + s.databendConn, err = dc.BuildDatabendConn(context.TODO(), *cfg) + s.Nil(err) err = s.db.Ping() s.Nil(err) @@ -80,6 +86,11 @@ func (s *DatabendTestSuite) TearDownTest() { s.r.Nil(err) } +func (s *DatabendTestSuite) TestPing() { + err := s.databendConn.Ping() + s.r.Nil(err) +} + func (s *DatabendTestSuite) TestDesc() { rows, err := s.db.Query("DESC " + s.table) s.r.Nil(err) From 1571910fe01c3299c2cb0678fd47e2c0cab72815 Mon Sep 17 00:00:00 2001 From: hantmac Date: Sat, 7 Oct 2023 09:18:22 +0800 Subject: [PATCH 2/4] fix --- connection.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/connection.go b/connection.go index 2b1c250..2261881 100644 --- a/connection.go +++ b/connection.go @@ -208,10 +208,9 @@ func (dc *DatabendConn) Rollback() error { } func (dc *DatabendConn) Ping() error { - r, err := dc.Query("SELECT VERSION()", []driver.Value{}) + _, err := dc.Query("SELECT VERSION()", []driver.Value{}) if err != nil { return err } - fmt.Println(r) return nil } From 82baa64434029bc1dd0be8bae191c4a11b60b5c6 Mon Sep 17 00:00:00 2001 From: hantmac Date: Sat, 7 Oct 2023 09:24:46 +0800 Subject: [PATCH 3/4] fix test --- tests/main_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/main_test.go b/tests/main_test.go index 9603e9d..f75d3cd 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -4,7 +4,6 @@ import ( "context" "database/sql" "fmt" - "os" "reflect" "testing" "time" @@ -43,7 +42,8 @@ type DatabendTestSuite struct { func (s *DatabendTestSuite) SetupSuite() { var err error - dsn := os.Getenv("TEST_DATABEND_DSN") + //dsn := os.Getenv("TEST_DATABEND_DSN") + dsn := "http://databend:databend@localhost:8000/default?sslmode=disable" s.NotEmpty(dsn) s.db, err = sql.Open("databend", dsn) @@ -97,7 +97,7 @@ func (s *DatabendTestSuite) TestDesc() { result, err := scanValues(rows) s.r.Nil(err) - s.r.Equal([][]interface{}{[]interface{}{"i64", "BIGINT", "NO", "0", ""}, []interface{}{"u64", "BIGINT UNSIGNED", "NO", "0", ""}, []interface{}{"f64", "DOUBLE", "NO", "0", ""}, []interface{}{"s", "VARCHAR", "NO", "", ""}, []interface{}{"s2", "VARCHAR", "NO", "", ""}, []interface{}{"a16", "ARRAY(INT16)", "NO", "[]", ""}, []interface{}{"a8", "ARRAY(UINT8)", "NO", "[]", ""}, []interface{}{"d", "DATE", "NO", "", ""}, []interface{}{"t", "TIMESTAMP", "NO", "", ""}}, result) + s.r.Equal([][]interface{}{[]interface{}{"i64", "BIGINT", "YES", "NULL", ""}, []interface{}{"u64", "BIGINT UNSIGNED", "YES", "NULL", ""}, []interface{}{"f64", "DOUBLE", "YES", "NULL", ""}, []interface{}{"s", "VARCHAR", "YES", "NULL", ""}, []interface{}{"s2", "VARCHAR", "YES", "NULL", ""}, []interface{}{"a16", "ARRAY(INT16)", "YES", "NULL", ""}, []interface{}{"a8", "ARRAY(UINT8)", "YES", "NULL", ""}, []interface{}{"d", "DATE", "YES", "NULL", ""}, []interface{}{"t", "TIMESTAMP", "YES", "NULL", ""}}, result) rows.Close() } From b4fef5ec359645569b985005186a11fb3e89995e Mon Sep 17 00:00:00 2001 From: hantmac Date: Sat, 7 Oct 2023 10:01:49 +0800 Subject: [PATCH 4/4] fix --- tests/main_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/main_test.go b/tests/main_test.go index f75d3cd..bdabb12 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -174,12 +174,12 @@ func (s *DatabendTestSuite) TestExec() { }{ { fmt.Sprintf("INSERT INTO %s (i64) VALUES (?)", s.table), - fmt.Sprintf("SELECT i64 FROM %s WHERE i64=?", s.table), + "", []interface{}{int64(1)}, }, { fmt.Sprintf("INSERT INTO %s (i64, u64) VALUES (?, ?)", s.table), - fmt.Sprintf("SELECT i64, u64 FROM %s WHERE i64=? AND u64=?", s.table), + "", []interface{}{int64(2), uint64(12)}, }, {