fox/db/clickhouse_test.go

98 lines
1.9 KiB
Go
Raw Normal View History

2025-05-25 20:02:15 +08:00
package db
import (
"fmt"
"strings"
"testing"
)
func testCreateClickHouse(_ *testing.T) *ClickHouseRepo {
host := "192.168.2.224"
port := "9000"
// port = 8123
username := "default"
password := "123456"
database := "samba"
return NewClickHouseRepo(host, port, username, password, database)
}
func testSelect(t *testing.T) {
ch := testCreateClickHouse(t)
err := ch.Open()
if err != nil {
t.Fatal(err)
}
defer ch.Close()
rows, err := ch.Select("select user_id, coins from coins_flow limit 1")
if err != nil {
t.Fatal(err)
}
defer func() { _ = rows.Close() }()
cols, err := rows.Columns()
if err != nil {
t.Fatal(err)
}
fmt.Println(strings.Join(cols, ","))
// 一行数据使用any避开数据类型问题
var vRows = make([]any, len(cols))
// 存实际的值byte数组长度以列的数量为准
var values = make([][]byte, len(cols))
for i := 0; i < len(cols); i++ {
vRows[i] = &values[i]
}
for rows.Next() {
err = rows.Scan(vRows...)
if err != nil {
fmt.Println(err.Error())
break
}
var vString []string
for _, v := range values {
vString = append(vString, string(v))
}
fmt.Println(vString, ",")
}
}
func testInsert(t *testing.T) {
ch := testCreateClickHouse(t)
err := ch.Open()
if err != nil {
t.Fatal(err)
}
defer ch.Close()
_, err = ch.Exec("INSERT INTO coins_flow(user_id, coins) VALUES (11,11)", 11, 11)
if err != nil {
t.Fatal(err)
}
// last, err := result.LastInsertId()
// if err != nil {
// t.Fatal(err)
// }
// fmt.Println(last)
}
func testDelete(t *testing.T) {
ch := testCreateClickHouse(t)
err := ch.Open()
if err != nil {
t.Fatal(err)
}
defer ch.Close()
_, err = ch.Exec("DELETE FROM coins_flow WHERE user_id = 11 AND coins = 11")
if err != nil {
t.Fatal(err)
}
// last, err := result.LastInsertId()
// if err != nil {
// t.Fatal(err)
// }
// fmt.Println(last)
}
func TestClickHouse(t *testing.T) {
testSelect(t)
// testInsert(t)
testDelete(t)
}