package alter import ( "fmt" "testing" "time" . "git.wecise.com/wecise/odbserver/odb" "git.wecise.com/wecise/odbserver/odb/test" "gitee.com/wecisecode/util/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) type AlterTests struct { Test *testing.T g *Gutil } func AlterTest(t *testing.T) { g := test.TestG() t.Run("InitG", func(t *testing.T) { test := &AlterTests{Test: t, g: g} test.InitG() }) t.Run("Class", func(t *testing.T) { test := &AlterTests{Test: t, g: g} test.Class() }) t.Run("Data", func(t *testing.T) { test := &AlterTests{Test: t, g: g} test.Data() }) time.Sleep(time.Duration(1) * time.Second) t.Run("Valid", func(t *testing.T) { test := &AlterTests{Test: t, g: g} test.Valid() }) t.Run("Search", func(t *testing.T) { test := &AlterTests{Test: t, g: g} test.Search() }) /*t.Run("Update", func(t *testing.T) { test := &AlterTests{Test: t, g: g} test.Update() })*/ } func (t *AlterTests) InitG() { require.NotNil(t.Test, t.g) } func (t *AlterTests) Class() { _, _, err := t.g.Query(` create class if not exists /test/alter ( v_varchar varchar, v_map map, v_list list, v_set set, v_type enum { "0":["command", "命令"], "1":["shell", "shell脚本"], "2":["lua", "lua脚本"], "3":["task", "任务"], "4":["js", "js脚本"] }, indexes(v_varchar, v_map, v_list, v_set, v_type), keys(v_varchar) ); create class if not exists /test/movefield ( mv_varchar varchar, mv_map map, mv_list list, mv_set set, mv_type enum { "0":["command", "命令"], "1":["shell", "shell脚本"], "2":["lua", "lua脚本"], "3":["task", "任务"], "4":["js", "js脚本"] }, indexes(mv_varchar, mv_map, mv_list, mv_set, mv_type), keys(mv_varchar) ); create class if not exists /test/alter01 ( v_varchar varchar, v_map map, v_list list, v_text01 text, v_text02 text, v_text03 text, v_text04 text, v_text05 text, v_text06 text, v_text07 text, v_text08 text, v_text09 text, v_text10 text, v_text11 text, v_text12 text, v_text13 text, v_text14 text, v_text15 text, v_text16 text, v_text17 text, v_text18 text, v_text19 text, v_text20 text, keys(v_varchar) ); create class if not exists /test/alter02 ( v_varchar varchar, v_map map, v_list list, v_text01 text, v_text02 text, v_text03 text, v_text04 text, v_text05 text, v_text06 text, v_text07 text, v_text08 text, v_text09 text, v_text10 text, v_text11 text, v_text12 text, v_text13 text, v_text14 text, v_text15 text, v_text16 text, v_text17 text, v_text18 text, v_text19 text, v_text20 text, v_text21 text, v_text22 text, v_text23 text, v_text24 text, v_text25 text, keys(v_varchar) ); drop class /test/alter02 ; create class if not exists /test/alter03 ( v_varchar varchar, v_map map, v_list list, v_text01 text, v_text02 text, v_text03 text, v_text04 text, v_text05 text, v_text06 text, v_text07 text, v_text08 text, v_text09 text, v_text10 text, v_text11 text, v_text12 text, v_text13 text, v_text14 text, v_text15 text, v_text16 text, v_text17 text, v_text18 text, v_text19 text, v_text20 text, v_text26 text, v_text27 text, v_text28 text, v_text29 text, v_text30 text, keys(v_varchar) ); `) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) err = t.g.GetSession().Exec("update field set colname=? where namespace=? and name=?", "varchar_0", "test", "mv_varchar") if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) err = t.g.GetSession().Exec("update field set colname=? where namespace=? and name=?", "map_varchar_varchar_0", "test", "mv_map") if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) err = t.g.GetSession().Exec("update field set colname=? where namespace=? and name=?", "list_varchar_0", "test", "mv_list") if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) } func (t *AlterTests) Data() { var err error _, _, err = t.g.Query(`insert into /test/alter (v_varchar, v_map, v_list, v_set, v_type ) values ('1', {"map1": "val1", "map2":"2"}, ["list1", "list2"], ["set1", "set2"], "4" )`) _, _, err = t.g.Query(`insert into /test/alter (v_varchar, v_map, v_list, v_set, v_type ) values ('2', {"map1": "val2", "map2":"2"}, ["list1", "list2"], ["set1", "set2"], "shell脚本" )`) _, _, err = t.g.Query(`insert into /test/alter (v_varchar, v_map, v_list, v_set, v_type ) values ('3', {"map1": "val3", "map2":"2"}, ["list1", "list2"], ["set1", "set2"], "2" )`) _, _, err = t.g.Query(`insert into /test/alter (v_varchar, v_map, v_list, v_set, v_type ) values ('4', {"map1": "val3", "map2":"2"}, [], ["set1", "set2"], "3" )`) _, _, err = t.g.Query(`insert into /test/movefield (mv_varchar, mv_map, mv_list, mv_set, mv_type ) values ('m1', {"map1": "mval1", "map2":"m2"}, ["list1", "mlist2"], ["set1", "mset2"], "4" )`) _, _, err = t.g.Query(`insert into /test/movefield (mv_varchar, mv_map, mv_list, mv_set, mv_type ) values ('m2', {"map1": "mval2", "map2":"m2"}, ["list1", "mlist2"], ["set1", "mset2"], "shell脚本" )`) _, _, err = t.g.Query(`insert into /test/movefield (mv_varchar, mv_map, mv_list, mv_set, mv_type ) values ('m3', {"map1": "mval3", "map2":"m2"}, ["list1", "mlist2"], ["set1", "mset2"], "2" )`) _, _, err = t.g.Query(`insert into /test/movefield (mv_varchar, mv_map, mv_list, mv_set, mv_type ) values ('m4', {"map1": "mval3", "map2":"m2"}, [], ["set1", "mset2"], "3" )`) _, _, err = t.g.Query(`alter class /test/alter modify v_type merge enum { "5": [ "测试", "测试" ] }`) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) _, _, err = t.g.Query(`alter class /test/alter modify v_type merge enum { "0": [] }`) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) _, _, err = t.g.Query(`alter class /test/alter add index column v_text text`) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) } func (t *AlterTests) Valid() { rtn, _, err := t.g.Query(`select * from /test/alter`) if err != nil { logger.Errorf("%v", err) } if assert.Nil(t.Test, err) { if assert.NotNil(t.Test, rtn) { assert.Equal(t.Test, 4, len(rtn), "they should be equal") } } } func (t *AlterTests) Search() { var err error var rtn []map[string]interface{} rtn, _, err = t.g.Query(`select * from /test/alter where v_map[key] = 'map1'`) if err != nil { logger.Errorf("%v", err) } if assert.Nil(t.Test, err) { assert.Equal(t.Test, 4, len(rtn), fmt.Sprintf("not find v_map = %v", "val2")) } rtn, _, err = t.g.Query(`select * from /test/alter where v_map = 'val2'`) if err != nil { logger.Errorf("%v", err) } if assert.Nil(t.Test, err) { assert.Equal(t.Test, 1, len(rtn), fmt.Sprintf("not find v_map = %v", "val2")) } rtn, _, err = t.g.Query(`select * from /test/alter where v_map['map1'] = 'val2'`) if err != nil { logger.Errorf("%v", err) } if assert.Nil(t.Test, err) { assert.Equal(t.Test, 1, len(rtn), fmt.Sprintf("not find v_map['map1'] = %v", "val2")) } rtn, _, err = t.g.Query(`select * from /test/alter where v_list = 'list1'`) if err != nil { logger.Errorf("%v", err) } if assert.Nil(t.Test, err) { assert.Equal(t.Test, 3, len(rtn), fmt.Sprintf("not find v_list = %v", "list1")) } rtn, _, err = t.g.Query(`select * from /test/alter where v_set = 'set1'`) if err != nil { logger.Errorf("%v", err) } if assert.Nil(t.Test, err) { assert.Equal(t.Test, 4, len(rtn), fmt.Sprintf("not find v_set = %v", "set1")) } _, _, err = t.g.Query(`select rebuild('field', 'test', 'mv_list', 'mv_map', 'mv_varchar' ) from /`) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) }