Because of recent changes there is a need for a new major release. Changes are switching to scylladb/gocql and replacing Unsafe with Strict mechanism.
123 lines
3.0 KiB
Go
123 lines
3.0 KiB
Go
// Copyright (C) 2017 ScyllaDB
|
|
// Use of this source code is governed by a ALv2-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
//go:build all || integration
|
|
// +build all integration
|
|
|
|
package dbutil_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/scylladb/gocqlx/v3/dbutil"
|
|
"github.com/scylladb/gocqlx/v3/gocqlxtest"
|
|
"github.com/scylladb/gocqlx/v3/qb"
|
|
"github.com/scylladb/gocqlx/v3/table"
|
|
)
|
|
|
|
func TestRewriteTableTTL(t *testing.T) {
|
|
session := gocqlxtest.CreateSession(t)
|
|
defer session.Close()
|
|
|
|
if err := session.ExecStmt(`CREATE TABLE gocqlx_test.rewrite_table (testtext text PRIMARY KEY)`); err != nil {
|
|
t.Fatal("create table:", err)
|
|
}
|
|
|
|
tbl := table.New(table.Metadata{
|
|
Name: "gocqlx_test.rewrite_table",
|
|
Columns: []string{"testtext"},
|
|
PartKey: []string{"testtext"},
|
|
})
|
|
|
|
// Insert data with 500ms TTL
|
|
q := tbl.InsertBuilder().TTL(500 * time.Millisecond).Query(session)
|
|
if err := q.Bind("a").Exec(); err != nil {
|
|
t.Fatal("insert:", err)
|
|
}
|
|
if err := q.Bind("b").Exec(); err != nil {
|
|
t.Fatal("insert:", err)
|
|
}
|
|
if err := q.Bind("c").Exec(); err != nil {
|
|
t.Fatal("insert:", err)
|
|
}
|
|
|
|
// Rewrite data without TTL
|
|
if err := dbutil.RewriteTable(session, tbl, tbl, nil); err != nil {
|
|
t.Fatal("rewrite:", err)
|
|
}
|
|
|
|
// Wait and check if data persisted
|
|
time.Sleep(time.Second)
|
|
|
|
var n int
|
|
if err := qb.Select(tbl.Name()).CountAll().Query(session).Scan(&n); err != nil {
|
|
t.Fatal("scan:", err)
|
|
}
|
|
if n != 3 {
|
|
t.Fatal("expected 3 entries")
|
|
}
|
|
}
|
|
|
|
func TestRewriteTableClone(t *testing.T) {
|
|
session := gocqlxtest.CreateSession(t)
|
|
defer session.Close()
|
|
|
|
if err := session.ExecStmt(`CREATE TABLE gocqlx_test.rewrite_table_clone_src (testtext text PRIMARY KEY, testint int)`); err != nil {
|
|
t.Fatal("create table:", err)
|
|
}
|
|
|
|
src := table.New(table.Metadata{
|
|
Name: "gocqlx_test.rewrite_table_clone_src",
|
|
Columns: []string{"testtext", "testint"},
|
|
PartKey: []string{"testtext"},
|
|
})
|
|
|
|
if err := session.ExecStmt(`CREATE TABLE gocqlx_test.rewrite_table_clone_dst (testtext text PRIMARY KEY, testfloat float)`); err != nil {
|
|
t.Fatal("create table:", err)
|
|
}
|
|
|
|
dst := table.New(table.Metadata{
|
|
Name: "gocqlx_test.rewrite_table_clone_dst",
|
|
Columns: []string{"testtext", "testfloat"},
|
|
PartKey: []string{"testtext"},
|
|
})
|
|
|
|
// Insert data
|
|
q := src.InsertBuilder().Query(session)
|
|
if err := q.Bind("a", 1).Exec(); err != nil {
|
|
t.Fatal("insert:", err)
|
|
}
|
|
if err := q.Bind("b", 2).Exec(); err != nil {
|
|
t.Fatal("insert:", err)
|
|
}
|
|
if err := q.Bind("c", 3).Exec(); err != nil {
|
|
t.Fatal("insert:", err)
|
|
}
|
|
|
|
transformer := func(m map[string]interface{}) {
|
|
m["testfloat"] = float32(m["testint"].(int))
|
|
}
|
|
|
|
// Rewrite data
|
|
if err := dbutil.RewriteTable(session, dst, src, transformer); err != nil {
|
|
t.Fatal("rewrite:", err)
|
|
}
|
|
|
|
var n int
|
|
if err := qb.Select(dst.Name()).CountAll().Query(session).Scan(&n); err != nil {
|
|
t.Fatal("scan:", err)
|
|
}
|
|
if n != 3 {
|
|
t.Fatal("expected 3 entries")
|
|
}
|
|
var f float32
|
|
if err := dst.GetQuery(session, "testfloat").Bind("a").Scan(&f); err != nil {
|
|
t.Fatal("scan:", err)
|
|
}
|
|
if f != 1 {
|
|
t.Fatal("expected 1")
|
|
}
|
|
}
|