1
0
mirror of https://github.com/uptrace/go-clickhouse.git synced 2025-06-08 23:26:11 +02:00
go-clickhouse/ch/query_test.go
2022-11-03 11:58:19 +02:00

120 lines
3.0 KiB
Go

package ch_test
import (
"fmt"
"path/filepath"
"testing"
"time"
"github.com/bradleyjkemp/cupaloy"
"github.com/uptrace/go-clickhouse/ch"
"github.com/uptrace/go-clickhouse/ch/chschema"
)
func TestQuery(t *testing.T) {
type Model struct {
ID uint64
String string
Bytes []byte
}
queries := []func(db *ch.DB) chschema.QueryAppender{
func(db *ch.DB) chschema.QueryAppender {
return db.NewCreateTable().Model((*Model)(nil))
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewDropTable().Model((*Model)(nil))
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewSelect().Model((*Model)(nil))
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewSelect().Model((*Model)(nil)).ExcludeColumn("bytes")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewInsert().Model(new(Model))
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewTruncateTable().Model(new(Model))
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewSelect().
Model((*Model)(nil)).
Setting("max_rows_to_read = 100")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewSelect().
Model((*Model)(nil)).
Setting("max_rows_to_read = 100").
Setting("read_overflow_mode = 'break'")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewInsert().
TableExpr("dest").
TableExpr("src").
Where("_part = ?", "part_name").
Setting("max_threads = 1").
Setting("max_insert_threads = 1").
Setting("max_execution_time = 0")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewSelect().
Model((*Model)(nil)).
Sample("?", 1000)
},
func(db *ch.DB) chschema.QueryAppender {
type Model struct {
ch.CHModel `ch:"table:spans,partition:toYYYYMM(time)"`
ID uint64
Text string `ch:",lc"` // low cardinality column
Time time.Time `ch:",pk"` // ClickHouse primary key for order by
}
return db.NewCreateTable().Model((*Model)(nil)).
TTL("time + INTERVAL 30 DAY DELETE").
Partition("toDate(time)").
Order("id").
Setting("ttl_only_drop_parts = 1")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewDropView().View("view_name")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewDropView().IfExists().ViewExpr("view_name")
},
func(db *ch.DB) chschema.QueryAppender {
return db.NewCreateView().
Materialized().
IfNotExists().
View("view_name").
To("dest_table").
Column("col1").
ColumnExpr("col1 AS alias").
TableExpr("src_table AS alias").
Where("foo = bar").
Group("group1").
GroupExpr("group2, group3").
OrderExpr("order2, order3")
},
}
db := chDB()
defer db.Close()
snapshotsDir := filepath.Join("testdata", "snapshots")
snapshot := cupaloy.New(cupaloy.SnapshotSubdirectory(snapshotsDir))
for i, fn := range queries {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
q := fn(db)
query, err := q.AppendQuery(db.Formatter(), nil)
if err != nil {
snapshot.SnapshotT(t, err.Error())
} else {
snapshot.SnapshotT(t, string(query))
}
})
}
}