Skip to content

Commit b9c7a92

Browse files
committed
init databend cloud go driver🚀
1 parent 39abed7 commit b9c7a92

35 files changed

+3819
-0
lines changed

‎.idea/.gitignore

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎.idea/godatabend.iml

+9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎.idea/modules.xml

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎cmd/select_query.go

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package main
2+
3+
import (
4+
"database/sql"
5+
"fmt"
6+
"os"
7+
"reflect"
8+
9+
log "github.com/sirupsen/logrus"
10+
11+
dc "github.com/databendcloud/godatabend"
12+
)
13+
14+
// getDSN constructs a DSN based on the test connection parameters
15+
func getDSN() (string, *dc.Config, error) {
16+
env := func(k string, failOnMissing bool) string {
17+
if value := os.Getenv(k); value != "" {
18+
return value
19+
}
20+
if failOnMissing {
21+
log.Fatalf("%v environment variable is not set.", k)
22+
}
23+
return ""
24+
}
25+
26+
org := env("DATABEND_TEST_ORG", true)
27+
user := env("DATABEND_TEST_USER", true)
28+
password := env("DATABEND_TEST_PASSWORD", true)
29+
warehouse := env("DATABEND_TEST_WAREHOUSE", true)
30+
host := env("DATABEND_TEST_HOST", false)
31+
var err error
32+
cfg := dc.NewConfig()
33+
cfg.Org = org
34+
cfg.Warehouse = warehouse
35+
cfg.User = user
36+
cfg.Password = password
37+
cfg.Host = host
38+
cfg.Database = "books"
39+
40+
dsn := cfg.FormatDSN()
41+
return dsn, cfg, err
42+
}
43+
44+
func main() {
45+
dsn, cfg, err := getDSN()
46+
if err != nil {
47+
log.Fatalf("failed to create DSN from Config: %v, err: %v", cfg, err)
48+
}
49+
50+
db, err := sql.Open("databend", dsn)
51+
if err != nil {
52+
log.Fatalf("failed to connect. %v, err: %v", dsn, err)
53+
}
54+
defer db.Close()
55+
query := "SELECT * from books limit ?"
56+
rows, err := db.Query(query, []interface{}{int64(10)}...) // no cancel is allowed
57+
if err != nil {
58+
log.Fatalf("failed to run a query. %v, err: %v", query, err)
59+
}
60+
res, err := scanValues(rows, []interface{}{string(""), string(""), string("")})
61+
if err != nil {
62+
fmt.Printf("scan err %v", err)
63+
}
64+
fmt.Println(res)
65+
66+
fmt.Printf("Congrats! You have successfully run %v with databend DB!\n", query)
67+
68+
err = selectExec(dsn)
69+
if err != nil {
70+
fmt.Printf("exec failed, err:%v", err)
71+
}
72+
}
73+
74+
func scanValues(rows *sql.Rows, template []interface{}) (interface{}, error) {
75+
var result [][]interface{}
76+
types := make([]reflect.Type, len(template))
77+
for i, v := range template {
78+
types[i] = reflect.TypeOf(v)
79+
}
80+
ptrs := make([]interface{}, len(types))
81+
var err error
82+
for rows.Next() {
83+
if err = rows.Err(); err != nil {
84+
return nil, err
85+
}
86+
for i, t := range types {
87+
ptrs[i] = reflect.New(t).Interface()
88+
}
89+
err = rows.Scan(ptrs...)
90+
if err != nil {
91+
return nil, err
92+
}
93+
values := make([]interface{}, len(types))
94+
for i, p := range ptrs {
95+
values[i] = reflect.ValueOf(p).Elem().Interface()
96+
}
97+
result = append(result, values)
98+
}
99+
return result, nil
100+
}
101+
102+
func selectExec(dsn string) error {
103+
db, err := sql.Open("databend", dsn)
104+
if err != nil {
105+
return fmt.Errorf("failed to connect. %v, err: %v", dsn, err)
106+
}
107+
defer db.Close()
108+
query := "SELECT ?"
109+
110+
rows, err := db.Exec(query, []interface{}{1}...) // no cancel is allowed
111+
if err != nil {
112+
return fmt.Errorf("failed to run a query. %v, err: %v", query, err)
113+
}
114+
fmt.Println(rows.RowsAffected())
115+
fmt.Printf("Congrats! You have successfully run %v with databend DB!\n", query)
116+
return nil
117+
}

0 commit comments

Comments
 (0)