mirror of
https://github.com/uptrace/go-clickhouse.git
synced 2025-06-08 23:26:11 +02:00
100 lines
2.5 KiB
Go
100 lines
2.5 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")
|
||
|
},
|
||
|
}
|
||
|
|
||
|
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))
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|