From 85f2abef8a09c6df8069afbbfa1c142180816e35 Mon Sep 17 00:00:00 2001 From: vanson <43193589+WeiXinChan@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:31:55 +0800 Subject: [PATCH] add generate column test and current_timestamp test (#115) Co-authored-by: 43193589+WeiXinChan --- test/aggregate/aggregate_test.go | 6 +- test/autoinc/all_test.go | 2 + .../auto_increment_normal_fill_test.go | 306 +++++++++ .../auto_increment_normal_not_fill_test.go | 255 +++---- .../auto_increment_rowkey_fill_zero_test.go | 3 +- .../auto_increment_rowkey_not_fill_test.go | 3 +- test/current_timestamp/all_test.go | 51 ++ .../current_timestamp_test.go | 637 ++++++++++++++++++ test/generate_column/all_test.go | 53 ++ .../stored_generate_column_test.go | 153 +++++ .../virtual_generate_column_test.go | 144 ++++ test/single/int32_table_test.go | 3 +- 12 files changed, 1440 insertions(+), 176 deletions(-) create mode 100644 test/autoinc/auto_increment_normal_fill_test.go create mode 100644 test/current_timestamp/all_test.go create mode 100644 test/current_timestamp/current_timestamp_test.go create mode 100644 test/generate_column/all_test.go create mode 100644 test/generate_column/stored_generate_column_test.go create mode 100644 test/generate_column/virtual_generate_column_test.go diff --git a/test/aggregate/aggregate_test.go b/test/aggregate/aggregate_test.go index 32ebb4e..4a341cf 100644 --- a/test/aggregate/aggregate_test.go +++ b/test/aggregate/aggregate_test.go @@ -20,10 +20,12 @@ package aggregate import ( "context" "fmt" - "github.com/oceanbase/obkv-table-client-go/table" - "github.com/stretchr/testify/assert" "testing" + "github.com/stretchr/testify/assert" + + "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" ) diff --git a/test/autoinc/all_test.go b/test/autoinc/all_test.go index 544fac6..4809b40 100644 --- a/test/autoinc/all_test.go +++ b/test/autoinc/all_test.go @@ -34,6 +34,7 @@ func setup() { test.CreateTable(autoIncRowkeyZeroFillTableCreateStatement) test.CreateTable(autoIncRowkeyNotFillTableCreateStatement) test.CreateTable(autoIncNormalNotFillTableCreateStatement) + test.CreateTable(autoIncNormalFillTableCreateStatement) } func teardown() { @@ -42,6 +43,7 @@ func teardown() { test.DropTable(autoIncRowkeyZeroFillTableTableName) test.DropTable(autoIncRowkeyNotFillTableTableName) test.DropTable(autoIncNormalNotFillTableTableName) + test.DropTable(autoIncNormalFillTableTableName) test.CloseDB() } diff --git a/test/autoinc/auto_increment_normal_fill_test.go b/test/autoinc/auto_increment_normal_fill_test.go new file mode 100644 index 0000000..01a2efd --- /dev/null +++ b/test/autoinc/auto_increment_normal_fill_test.go @@ -0,0 +1,306 @@ +/*- + * #%L + * OBKV Table Client Framework + * %% + * Copyright (C) 2021 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package autoinc + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" +) + +const ( + autoIncNormalFillTableTableName = "autoIncNormalFillTable" + autoIncNormalFillTableCreateStatement = "create table if not exists autoIncNormalFillTable(`c1` bigint(20) not null, c2 bigint(20) auto_increment, c3 varchar(20) default 'hello', c4 bigint(20) default 0, primary key (`c1`)) partition by key(c1) partitions 100;" +) + +func TestAuto_NormalFill(t *testing.T) { + tableName := autoIncNormalFillTableTableName + defer test.DeleteTable(tableName) + + // test insert. + // c1-1 c2-1 c3-default("hello") c4-default(0) + rowKey := []*table.Column{table.NewColumn("c1", int64(1))} + mutationColumns := []*table.Column{table.NewColumn("c2", int64(1))} + affectRows, err := cli.Insert( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + result, err := cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + assert.EqualValues(t, "hello", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test update. + // c1-1 c2-1 c3-"update" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(1))} + mutationColumns = []*table.Column{table.NewColumn("c3", "update")} + affectRows, err = cli.Update( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + assert.EqualValues(t, "update", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test replace not exist, insert + // c1-2 c2-2 c3-"replace" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(2))} + mutationColumns = []*table.Column{ + table.NewColumn("c2", int64(2)), + table.NewColumn("c3", "replace"), + } + affectRows, err = cli.Replace( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 2, result.Value("c2")) + assert.EqualValues(t, "replace", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test replace exist, replace + // c1-2 c2-3 c3-"replace exist" c4-default(0) + mutationColumns = []*table.Column{ + table.NewColumn("c2", int64(3)), + table.NewColumn("c3", "replace exist"), + } + affectRows, err = cli.Replace( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, affectRows) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 3, result.Value("c2")) + assert.EqualValues(t, "replace exist", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test insertup not exist, insert + // c1-3 c2-4 c3-"insertup-insert" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(3))} + mutationColumns = []*table.Column{ + table.NewColumn("c2", int64(4)), + table.NewColumn("c3", "insertup-insert"), + } + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + + assert.Equal(t, nil, err) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 4, result.Value("c2")) + assert.EqualValues(t, "insertup-insert", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test insertup exist, update + // c1-3 c2-4 c3-"insertup-update" c4-default(0) + mutationColumns = []*table.Column{ + table.NewColumn("c2", int64(4)), + table.NewColumn("c3", "insertup-update"), + } + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 4, result.Value("c2")) + assert.EqualValues(t, "insertup-update", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test increment not exist, insert + // c1-4 c2-5 c3-default("hello") c4-1 + rowKey = []*table.Column{table.NewColumn("c1", int64(4))} + mutationColumns = []*table.Column{ + table.NewColumn("c4", int64(1)), + } + resultSet, err := cli.Increment( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, resultSet.AffectedRows()) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 5, result.Value("c2")) + assert.EqualValues(t, "hello", result.Value("c3")) + assert.EqualValues(t, 1, result.Value("c4")) + + // test increment exist, increment + // c1-4 c2-5 c3-default("hello") c4-1+1 + mutationColumns = []*table.Column{ + table.NewColumn("c4", int64(1)), + } + resultSet, err = cli.Increment( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, resultSet.AffectedRows()) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 5, result.Value("c2")) + assert.EqualValues(t, "hello", result.Value("c3")) + assert.EqualValues(t, 2, result.Value("c4")) + + // test append not exist, insert + // c1-5 c2-7 c3-"append" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(5))} + mutationColumns = []*table.Column{ + table.NewColumn("c3", "append"), + } + resultSet, err = cli.Append( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, resultSet.AffectedRows()) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 5, result.Value("c1")) + assert.EqualValues(t, 7, result.Value("c2")) + assert.EqualValues(t, "append", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // test append exist, append + // c1-5 c2-7 c3-"append-exist" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(5))} + mutationColumns = []*table.Column{ + table.NewColumn("c3", "-exist"), + } + resultSet, err = cli.Append( + context.TODO(), + tableName, + rowKey, + mutationColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, resultSet.AffectedRows()) + + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 5, result.Value("c1")) + assert.EqualValues(t, 7, result.Value("c2")) + assert.EqualValues(t, "append-exist", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) +} diff --git a/test/autoinc/auto_increment_normal_not_fill_test.go b/test/autoinc/auto_increment_normal_not_fill_test.go index 5c406d8..fc20888 100644 --- a/test/autoinc/auto_increment_normal_not_fill_test.go +++ b/test/autoinc/auto_increment_normal_not_fill_test.go @@ -23,8 +23,6 @@ import ( "github.com/stretchr/testify/assert" - "github.com/oceanbase/obkv-table-client-go/client/filter" - "github.com/oceanbase/obkv-table-client-go/client/option" "github.com/oceanbase/obkv-table-client-go/table" "github.com/oceanbase/obkv-table-client-go/test" ) @@ -39,287 +37,209 @@ func TestAuto_NormalNotFill(t *testing.T) { defer test.DeleteTable(tableName) // test insert. - // test auto inc value. + // c1-1 c2-auto=1 c3-default("hello") c4-default(0) rowKey := []*table.Column{table.NewColumn("c1", int64(1))} - - res, err := cli.Insert( + affectRows, err := cli.Insert( context.TODO(), tableName, rowKey, nil, ) - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), res) + assert.EqualValues(t, 1, affectRows) - rowKey = []*table.Column{table.NewColumn("c1", int64(1))} - selectColumns := []string{"c1", "c2", "c3", "c4"} result, err := cli.Get( - context.TODO(), - tableName, - rowKey, - selectColumns, - ) - - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(1), result.Value("c1")) - assert.EqualValues(t, int64(1), result.Value("c2")) - assert.EqualValues(t, "hello", result.Value("c3")) - - // test assign value. - rowKey = []*table.Column{table.NewColumn("c1", int64(2))} - mutationColumns := []*table.Column{table.NewColumn("c2", int64(50))} - - res, err = cli.Insert( - context.TODO(), - tableName, - rowKey, - mutationColumns, - ) - - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), res) - - rowKey = []*table.Column{table.NewColumn("c1", int64(2))} - result, err = cli.Get( - context.TODO(), - tableName, - rowKey, - selectColumns, - ) - - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(2), result.Value("c1")) - assert.EqualValues(t, int64(50), result.Value("c2")) - assert.EqualValues(t, "hello", result.Value("c3")) - - // test update auto inc value. - rowKey = []*table.Column{table.NewColumn("c1", int64(3))} - - res, err = cli.Insert( context.TODO(), tableName, rowKey, nil, ) - - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), res) - - rowKey = []*table.Column{table.NewColumn("c1", int64(3))} - result, err = cli.Get( - context.TODO(), - tableName, - rowKey, - selectColumns, - ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(3), result.Value("c1")) - assert.EqualValues(t, int64(51), result.Value("c2")) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) assert.EqualValues(t, "hello", result.Value("c3")) - - // test delete. - rowKey = []*table.Column{table.NewColumn("c1", int64(1))} - res, err = cli.Delete( - context.TODO(), - tableName, - rowKey, - ) - - assert.Equal(t, nil, err) - - rowKey = []*table.Column{table.NewColumn("c1", int64(1))} - result, err = cli.Get( - context.TODO(), - tableName, - rowKey, - selectColumns, - ) - - assert.Equal(t, nil, err) - assert.Equal(t, nil, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c4")) // test update. - rowKey = []*table.Column{table.NewColumn("c1", int64(2))} - mutationColumns = []*table.Column{table.NewColumn("c3", "update")} - res, err = cli.Update( + // c1-1 c2-1 c3-"update" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(1))} + mutationColumns := []*table.Column{table.NewColumn("c3", "update")} + affectRows, err = cli.Update( context.TODO(), tableName, rowKey, mutationColumns, - option.WithFilter(filter.CompareVal(filter.Equal, "c1", int64(2))), ) - assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) - rowKey = []*table.Column{table.NewColumn("c1", int64(2))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(2), result.Value("c1")) - assert.EqualValues(t, int64(50), result.Value("c2")) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) assert.EqualValues(t, "update", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) // test replace not exist, insert - rowKey = []*table.Column{table.NewColumn("c1", int64(4))} + // c1-2 c2-auto-2 c3-"replace" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(2))} mutationColumns = []*table.Column{table.NewColumn("c3", "replace")} - res, err = cli.Replace( + affectRows, err = cli.Replace( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) - rowKey = []*table.Column{table.NewColumn("c1", int64(4))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(4), result.Value("c1")) - assert.EqualValues(t, int64(52), result.Value("c2")) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 2, result.Value("c2")) assert.EqualValues(t, "replace", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) // test replace exist, replace - rowKey = []*table.Column{table.NewColumn("c1", int64(4))} + // c1-2 c2-auto-3 c3-"replace exist" c4-default(0) mutationColumns = []*table.Column{table.NewColumn("c3", "replace exist")} - res, err = cli.Replace( + affectRows, err = cli.Replace( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) + assert.EqualValues(t, 2, affectRows) - rowKey = []*table.Column{table.NewColumn("c1", int64(4))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(4), result.Value("c1")) - assert.EqualValues(t, int64(53), result.Value("c2")) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 3, result.Value("c2")) assert.EqualValues(t, "replace exist", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) // test insertup not exist, insert - rowKey = []*table.Column{table.NewColumn("c1", int64(5))} - mutationColumns = []*table.Column{table.NewColumn("c3", "insertup")} - res, err = cli.InsertOrUpdate( + // c1-3 c2-auto-4 c3-"insertup-insert" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(3))} + mutationColumns = []*table.Column{table.NewColumn("c3", "insertup-insert")} + affectRows, err = cli.InsertOrUpdate( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) - rowKey = []*table.Column{table.NewColumn("c1", int64(5))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) assert.Equal(t, nil, err) - assert.EqualValues(t, int64(5), result.Value("c1")) - assert.EqualValues(t, int64(54), result.Value("c2")) - assert.EqualValues(t, "insertup", result.Value("c3")) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 4, result.Value("c2")) + assert.EqualValues(t, "insertup-insert", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) // test insertup exist, update - rowKey = []*table.Column{table.NewColumn("c1", int64(5))} - mutationColumns = []*table.Column{table.NewColumn("c2", int64(20)), table.NewColumn("c3", "insertup exist")} - res, err = cli.InsertOrUpdate( + // c1-3 c2-auto-4 c3-"insertup-update" c4-default(0) + mutationColumns = []*table.Column{table.NewColumn("c3", "insertup-update")} + affectRows, err = cli.InsertOrUpdate( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) - rowKey = []*table.Column{table.NewColumn("c1", int64(5))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(5), result.Value("c1")) - assert.EqualValues(t, int64(20), result.Value("c2")) - assert.EqualValues(t, "insertup exist", result.Value("c3")) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 4, result.Value("c2")) + assert.EqualValues(t, "insertup-update", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) + + // insert up cause c2 to be 5, global auto value is 5 now // test increment not exist, insert - rowKey = []*table.Column{table.NewColumn("c1", int64(6))} - mutationColumns = []*table.Column{table.NewColumn("c4", int64(10))} + // c1-4 c2-auto-6 c3-default("hello") c4-1 + rowKey = []*table.Column{table.NewColumn("c1", int64(4))} + mutationColumns = []*table.Column{table.NewColumn("c4", int64(1))} resultSet, err := cli.Increment( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), resultSet.AffectedRows()) + assert.EqualValues(t, 1, resultSet.AffectedRows()) - rowKey = []*table.Column{table.NewColumn("c1", int64(6))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(6), result.Value("c1")) - assert.EqualValues(t, int64(55), result.Value("c2")) - assert.EqualValues(t, int64(10), result.Value("c4")) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 6, result.Value("c2")) + assert.EqualValues(t, "hello", result.Value("c3")) + assert.EqualValues(t, 1, result.Value("c4")) // test increment exist, increment - rowKey = []*table.Column{table.NewColumn("c1", int64(6))} - mutationColumns = []*table.Column{table.NewColumn("c4", int64(10))} + // c1-4 c2-auto-6 c3-default("hello") c4-1+1 + mutationColumns = []*table.Column{table.NewColumn("c4", int64(1))} resultSet, err = cli.Increment( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), resultSet.AffectedRows()) + assert.EqualValues(t, 1, resultSet.AffectedRows()) - rowKey = []*table.Column{table.NewColumn("c1", int64(6))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(6), result.Value("c1")) - assert.EqualValues(t, int64(55), result.Value("c2")) - assert.EqualValues(t, int64(20), result.Value("c4")) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 6, result.Value("c2")) + assert.EqualValues(t, "hello", result.Value("c3")) + assert.EqualValues(t, 2, result.Value("c4")) + + // insert up(increment) cause c2 to be 5, global auto value is 7 now // test append not exist, insert - rowKey = []*table.Column{table.NewColumn("c1", int64(7))} + // c1-5 c2-auto-8 c3-"append" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(5))} mutationColumns = []*table.Column{table.NewColumn("c3", "append")} resultSet, err = cli.Append( context.TODO(), @@ -327,46 +247,43 @@ func TestAuto_NormalNotFill(t *testing.T) { rowKey, mutationColumns, ) - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), resultSet.AffectedRows()) + assert.EqualValues(t, 1, resultSet.AffectedRows()) - rowKey = []*table.Column{table.NewColumn("c1", int64(7))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(7), result.Value("c1")) - assert.EqualValues(t, int64(57), result.Value("c2")) + assert.EqualValues(t, 5, result.Value("c1")) + assert.EqualValues(t, 8, result.Value("c2")) assert.EqualValues(t, "append", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) // test append exist, append - rowKey = []*table.Column{table.NewColumn("c1", int64(7))} - mutationColumns = []*table.Column{table.NewColumn("c3", " exist")} + // c1-5 c2-auto-8 c3-"append-exist" c4-default(0) + rowKey = []*table.Column{table.NewColumn("c1", int64(5))} + mutationColumns = []*table.Column{table.NewColumn("c3", "-exist")} resultSet, err = cli.Append( context.TODO(), tableName, rowKey, mutationColumns, ) - assert.Equal(t, nil, err) - assert.Equal(t, int64(1), resultSet.AffectedRows()) + assert.EqualValues(t, 1, resultSet.AffectedRows()) - rowKey = []*table.Column{table.NewColumn("c1", int64(7))} result, err = cli.Get( context.TODO(), tableName, rowKey, - selectColumns, + nil, ) - assert.Equal(t, nil, err) - assert.EqualValues(t, int64(7), result.Value("c1")) - assert.EqualValues(t, int64(57), result.Value("c2")) - assert.EqualValues(t, "append exist", result.Value("c3")) + assert.EqualValues(t, 5, result.Value("c1")) + assert.EqualValues(t, 8, result.Value("c2")) + assert.EqualValues(t, "append-exist", result.Value("c3")) + assert.EqualValues(t, 0, result.Value("c4")) } diff --git a/test/autoinc/auto_increment_rowkey_fill_zero_test.go b/test/autoinc/auto_increment_rowkey_fill_zero_test.go index 831ce61..326e715 100644 --- a/test/autoinc/auto_increment_rowkey_fill_zero_test.go +++ b/test/autoinc/auto_increment_rowkey_fill_zero_test.go @@ -25,9 +25,8 @@ import ( "github.com/oceanbase/obkv-table-client-go/client/filter" "github.com/oceanbase/obkv-table-client-go/client/option" - "github.com/oceanbase/obkv-table-client-go/test" - "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" ) const ( diff --git a/test/autoinc/auto_increment_rowkey_not_fill_test.go b/test/autoinc/auto_increment_rowkey_not_fill_test.go index f09cbd1..b0084d4 100644 --- a/test/autoinc/auto_increment_rowkey_not_fill_test.go +++ b/test/autoinc/auto_increment_rowkey_not_fill_test.go @@ -25,9 +25,8 @@ import ( "github.com/oceanbase/obkv-table-client-go/client/filter" "github.com/oceanbase/obkv-table-client-go/client/option" - "github.com/oceanbase/obkv-table-client-go/test" - "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" ) const ( diff --git a/test/current_timestamp/all_test.go b/test/current_timestamp/all_test.go new file mode 100644 index 0000000..75618a8 --- /dev/null +++ b/test/current_timestamp/all_test.go @@ -0,0 +1,51 @@ +/*- + * #%L + * OBKV Table Client Framework + * %% + * Copyright (C) 2021 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package current_timestamp + +import ( + "os" + "testing" + + "github.com/oceanbase/obkv-table-client-go/client" + "github.com/oceanbase/obkv-table-client-go/test" +) + +var cli client.Client + +func setup() { + cli = test.CreateClient() + + test.CreateDB() + + test.CreateTable(testTimestampCurrentTimeCreateStatement) +} + +func teardown() { + cli.Close() + + test.DropTable(testTimestampCurrentTimeTableName) + + test.CloseDB() +} + +func TestMain(m *testing.M) { + setup() + code := m.Run() + teardown() + os.Exit(code) +} diff --git a/test/current_timestamp/current_timestamp_test.go b/test/current_timestamp/current_timestamp_test.go new file mode 100644 index 0000000..08f4810 --- /dev/null +++ b/test/current_timestamp/current_timestamp_test.go @@ -0,0 +1,637 @@ +/*- + * #%L + * OBKV Table Client Framework + * %% + * Copyright (C) 2021 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package current_timestamp + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/assert" + + "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" +) + +const ( + testTimestampCurrentTimeTableName = "test_timestamp_current_time" + testTimestampCurrentTimeCreateStatement = "create table if not exists `test_timestamp_current_time`(`c1` int(12) not null,`c2` int(12) default 0, `c3` timestamp default current_timestamp, `c4` timestamp default current_timestamp on update current_timestamp, `c5` varchar(20) default 'hello', primary key (`c1`)) partition by key(c1) partitions 16;" +) + +func TestCurrentTimestamp_common(t *testing.T) { + tableName := testTimestampCurrentTimeTableName + defer test.DeleteTable(tableName) + + // insert + fmt.Println("insert") + rowKey := []*table.Column{table.NewColumn("c1", int32(0))} + mutateColumns := []*table.Column{table.NewColumn("c2", int32(0))} + affectRows, err := cli.Insert( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err := cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // update + time.Sleep(1 * time.Second) + fmt.Println("update") + mutateColumns = []*table.Column{table.NewColumn("c2", int32(1))} + affectRows, err = cli.Update( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // insertUp insert + time.Sleep(1 * time.Second) + fmt.Println("insertUp-insert") + rowKey = []*table.Column{table.NewColumn("c1", int32(1))} + mutateColumns = []*table.Column{table.NewColumn("c2", int32(0))} + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // insertUp update + time.Sleep(1 * time.Second) + fmt.Println("insertUp-update") + mutateColumns = []*table.Column{table.NewColumn("c2", int32(1))} + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // replace insert + time.Sleep(1 * time.Second) + fmt.Println("replace-insert") + rowKey = []*table.Column{table.NewColumn("c1", int32(2))} + mutateColumns = []*table.Column{table.NewColumn("c2", int32(0))} + affectRows, err = cli.Replace( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // replace replace + time.Sleep(1 * time.Second) + fmt.Println("replace-replace") + mutateColumns = []*table.Column{table.NewColumn("c2", int32(1))} + affectRows, err = cli.Replace( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // increment insert + time.Sleep(1 * time.Second) + fmt.Println("increment-insert") + rowKey = []*table.Column{table.NewColumn("c1", int32(3))} + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + } + res, err := cli.Increment( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // increment inc + time.Sleep(1 * time.Second) + fmt.Println("increment-inc") + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + } + res, err = cli.Increment( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 3, result.Value("c1")) + //assert.EqualValues(t, 2, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // append insert + time.Sleep(1 * time.Second) + fmt.Println("append-insert") + rowKey = []*table.Column{table.NewColumn("c1", int32(4))} + mutateColumns = []*table.Column{ + table.NewColumn("c5", "abc"), + } + res, err = cli.Append( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + assert.EqualValues(t, "abc", result.Value("c5")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // append append + time.Sleep(1 * time.Second) + fmt.Println("append-append") + mutateColumns = []*table.Column{ + table.NewColumn("c5", "efg"), + } + res, err = cli.Append( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + assert.EqualValues(t, "abcefg", result.Value("c5")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) +} + +func TestCurrentTimestamp_fillValue(t *testing.T) { + tableName := testTimestampCurrentTimeTableName + defer test.DeleteTable(tableName) + + // insert + fmt.Println("insert") + var now = time.Now().Local() + fmt.Println(now) + rowKey := []*table.Column{table.NewColumn("c1", int32(0))} + mutateColumns := []*table.Column{ + table.NewColumn("c2", int32(0)), + table.NewColumn("c3", table.TimeStamp(now)), + table.NewColumn("c4", table.TimeStamp(now)), + } + affectRows, err := cli.Insert( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err := cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // update + time.Sleep(1 * time.Second) + fmt.Println("update") + now = time.Now().Local() + fmt.Println(now) + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + table.NewColumn("c3", table.TimeStamp(now)), + table.NewColumn("c4", table.TimeStamp(now)), + } + affectRows, err = cli.Update( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // insertUp insert + time.Sleep(1 * time.Second) + fmt.Println("insertUp-insert") + now = time.Now().Local() + fmt.Println(now) + rowKey = []*table.Column{table.NewColumn("c1", int32(1))} + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(0)), + table.NewColumn("c3", table.TimeStamp(now)), + table.NewColumn("c4", table.TimeStamp(now)), + } + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // insertUp update + time.Sleep(1 * time.Second) + fmt.Println("insertUp-update") + now = time.Now().Local() + fmt.Println(now) + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + table.NewColumn("c3", table.TimeStamp(now)), + table.NewColumn("c4", table.TimeStamp(now)), + } + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // replace insert + time.Sleep(1 * time.Second) + fmt.Println("replace-insert") + now = time.Now().Local() + fmt.Println(now) + rowKey = []*table.Column{table.NewColumn("c1", int32(2))} + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(0)), + table.NewColumn("c3", table.TimeStamp(now)), + table.NewColumn("c4", table.TimeStamp(now)), + } + affectRows, err = cli.Replace( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // replace replace + time.Sleep(1 * time.Second) + fmt.Println("replace-replace") + now = time.Now().Local() + fmt.Println(now) + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + table.NewColumn("c3", table.TimeStamp(now)), + table.NewColumn("c4", table.TimeStamp(now)), + } + affectRows, err = cli.Replace( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 2, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // increment insert + time.Sleep(1 * time.Second) + fmt.Println("increment-insert") + now = time.Now().Local() + fmt.Println(now) + rowKey = []*table.Column{table.NewColumn("c1", int32(3))} + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + } + res, err := cli.Increment( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 1, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // increment inc + time.Sleep(1 * time.Second) + fmt.Println("increment-inc") + now = time.Now().Local() + fmt.Println(now) + mutateColumns = []*table.Column{ + table.NewColumn("c2", int32(1)), + } + res, err = cli.Increment( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 3, result.Value("c1")) + assert.EqualValues(t, 2, result.Value("c2")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // append insert + time.Sleep(1 * time.Second) + fmt.Println("append-insert") + now = time.Now().Local() + fmt.Println(now) + rowKey = []*table.Column{table.NewColumn("c1", int32(4))} + mutateColumns = []*table.Column{ + table.NewColumn("c5", "abc"), + } + res, err = cli.Append( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + assert.EqualValues(t, "abc", result.Value("c5")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) + + // append append + time.Sleep(1 * time.Second) + fmt.Println("append-append") + now = time.Now().Local() + fmt.Println(now) + mutateColumns = []*table.Column{ + table.NewColumn("c5", "efg"), + } + res, err = cli.Append( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, res.AffectedRows()) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 4, result.Value("c1")) + assert.EqualValues(t, 0, result.Value("c2")) + assert.EqualValues(t, "abcefg", result.Value("c5")) + fmt.Println(result.Value("c3")) + fmt.Println(result.Value("c4")) +} diff --git a/test/generate_column/all_test.go b/test/generate_column/all_test.go new file mode 100644 index 0000000..a14b6f7 --- /dev/null +++ b/test/generate_column/all_test.go @@ -0,0 +1,53 @@ +/*- + * #%L + * OBKV Table Client Framework + * %% + * Copyright (C) 2021 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package current_timestamp + +import ( + "os" + "testing" + + "github.com/oceanbase/obkv-table-client-go/client" + "github.com/oceanbase/obkv-table-client-go/test" +) + +var cli client.Client + +func setup() { + cli = test.CreateClient() + + test.CreateDB() + + test.CreateTable(testStoredGenColumnTableNameCreateStatement) + test.CreateTable(testVirtualGenColumnTableNameCreateStatement) +} + +func teardown() { + cli.Close() + + test.DropTable(testVirtualGenColumnTableName) + test.DropTable(testStoredGenColumnTableName) + + test.CloseDB() +} + +func TestMain(m *testing.M) { + setup() + code := m.Run() + teardown() + os.Exit(code) +} diff --git a/test/generate_column/stored_generate_column_test.go b/test/generate_column/stored_generate_column_test.go new file mode 100644 index 0000000..996debe --- /dev/null +++ b/test/generate_column/stored_generate_column_test.go @@ -0,0 +1,153 @@ +/*- + * #%L + * OBKV Table Client Framework + * %% + * Copyright (C) 2021 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package current_timestamp + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" +) + +const ( + testStoredGenColumnTableName = "test_stored_gen_column" + testStoredGenColumnTableNameCreateStatement = "create table if not exists `test_stored_gen_column`(`c1` int(12) not null, `c2` varchar(20), `c3` varchar(20), `g` varchar(30) generated always as (concat(`c2`,`c3`)) stored, primary key (`c1`)) partition by key(c1) partitions 16;" +) + +func TestGenerateColumn_stored(t *testing.T) { + tableName := testStoredGenColumnTableName + defer test.DeleteTable(tableName) + + // insert + rowKey := []*table.Column{table.NewColumn("c1", int32(0))} + mutateColumns := []*table.Column{ + table.NewColumn("c2", "1"), + table.NewColumn("c3", "1"), + } + affectRows, err := cli.Insert( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err := cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "1", result.Value("c3")) + assert.EqualValues(t, "11", result.Value("g")) + + // update + mutateColumns = []*table.Column{ + table.NewColumn("c3", "2"), + } + affectRows, err = cli.Update( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "2", result.Value("c3")) + assert.EqualValues(t, "12", result.Value("g")) + + // insertUp insert + rowKey = []*table.Column{table.NewColumn("c1", int32(1))} + mutateColumns = []*table.Column{ + table.NewColumn("c2", "1"), + table.NewColumn("c3", "1"), + } + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "1", result.Value("c3")) + assert.EqualValues(t, "11", result.Value("g")) + + // insertUp update + mutateColumns = []*table.Column{table.NewColumn("c3", "2")} + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "2", result.Value("c3")) + assert.EqualValues(t, "12", result.Value("g")) + + // delete + affectRows, err = cli.Delete( + context.TODO(), + tableName, + rowKey, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) +} diff --git a/test/generate_column/virtual_generate_column_test.go b/test/generate_column/virtual_generate_column_test.go new file mode 100644 index 0000000..6e81fd1 --- /dev/null +++ b/test/generate_column/virtual_generate_column_test.go @@ -0,0 +1,144 @@ +/*- + * #%L + * OBKV Table Client Framework + * %% + * Copyright (C) 2021 OceanBase + * %% + * OBKV Table Client Framework is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + * #L% + */ + +package current_timestamp + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/oceanbase/obkv-table-client-go/table" + "github.com/oceanbase/obkv-table-client-go/test" +) + +const ( + testVirtualGenColumnTableName = "test_virtual_gen_column" + testVirtualGenColumnTableNameCreateStatement = "create table if not exists `test_virtual_gen_column`(`c1` int(12) not null, `c2` varchar(20), `c3` varchar(20), `g` varchar(30) generated always as (concat(`c2`,`c3`)), primary key (`c1`)) partition by key(c1) partitions 16;" +) + +func TestGenerateColumn_virtual(t *testing.T) { + tableName := testVirtualGenColumnTableName + defer test.DeleteTable(tableName) + + // insert + rowKey := []*table.Column{table.NewColumn("c1", int32(0))} + mutateColumns := []*table.Column{ + table.NewColumn("c2", "1"), + table.NewColumn("c3", "1"), + } + affectRows, err := cli.Insert( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err := cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "1", result.Value("c3")) + assert.EqualValues(t, "11", result.Value("g")) + + // update + mutateColumns = []*table.Column{ + table.NewColumn("c3", "2"), + } + affectRows, err = cli.Update( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 0, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "2", result.Value("c3")) + assert.EqualValues(t, "12", result.Value("g")) + + // insertUp insert + rowKey = []*table.Column{table.NewColumn("c1", int32(1))} + mutateColumns = []*table.Column{ + table.NewColumn("c2", "1"), + table.NewColumn("c3", "1"), + } + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "1", result.Value("c3")) + assert.EqualValues(t, "11", result.Value("g")) + + // insertUp update + mutateColumns = []*table.Column{table.NewColumn("c3", "2")} + affectRows, err = cli.InsertOrUpdate( + context.TODO(), + tableName, + rowKey, + mutateColumns, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, affectRows) + + // get + result, err = cli.Get( + context.TODO(), + tableName, + rowKey, + nil, + ) + assert.Equal(t, nil, err) + assert.EqualValues(t, 1, result.Value("c1")) + assert.EqualValues(t, "1", result.Value("c2")) + assert.EqualValues(t, "2", result.Value("c3")) + assert.EqualValues(t, "12", result.Value("g")) +} diff --git a/test/single/int32_table_test.go b/test/single/int32_table_test.go index 9d8b19b..13206af 100644 --- a/test/single/int32_table_test.go +++ b/test/single/int32_table_test.go @@ -19,9 +19,10 @@ package single import ( "context" - "github.com/oceanbase/obkv-table-client-go/client/option" "testing" + "github.com/oceanbase/obkv-table-client-go/client/option" + "github.com/stretchr/testify/assert" "github.com/oceanbase/obkv-table-client-go/table"