package bucket import ( "fmt" "strconv" "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 BucketTSDBTests struct { Test *testing.T g *Gutil } func BucketTSDBTest(t *testing.T) { g := test.TestG() t.Run("InitG", func(t *testing.T) { test := &BucketTSDBTests{Test: t, g: g} test.InitG() }) t.Run("Class", func(t *testing.T) { test := &BucketTSDBTests{Test: t, g: g} test.Class() }) t.Run("Data", func(t *testing.T) { test := &BucketTSDBTests{Test: t, g: g} test.Data() }) t.Run("Data64", func(t *testing.T) { test := &BucketTSDBTests{Test: t, g: g} test.Data64() }) time.Sleep(time.Duration(1) * time.Second) t.Run("Valid", func(t *testing.T) { test := &BucketTSDBTests{Test: t, g: g} test.Valid() }) } func (t *BucketTSDBTests) InitG() { require.NotNil(t.Test, t.g) } func (t *BucketTSDBTests) Class() { t.g.Query(` create class if not exists /test(); `) _, _, err := t.g.Query(` create class if not exists /test/buckettsdb ( host varchar, bk2 bucket { "type" : "tsdb", "param" : ["iparam1","iparam2","fparam1","fparam2","sparam1","vparam1"], "ptype" : ["i","i","f","f","s","s"], "unit" : ["%","m","ms","ns","",""], "precision":[0,0,3,4,0,0], "ttl" : 365, "crc" : ["iparam1", "sparam1"] } 'full', keys(host), indexes(host) ) with key=manu, nickname='buckettsdb' `) if err != nil { logger.Errorf("%v", err) } _, _, err = t.g.Query(` create class if not exists /test/buckettsdb64 ( host varchar, bk64 bucket { "type" : "tsdb", "crc64" : true, "param" : ["iparam1","iparam2","fparam1","fparam2","sparam1","vparam1"], "ptype" : ["i","i","f","f","s","s"], "unit" : ["%","m","ms","ns","",""], "precision":[0,0,3,4,0,0], "ttl" : 365, "crc" : ["iparam1", "sparam1"] } 'full', keys(host), indexes(host) ) with key=manu, nickname='buckettsdb64' `) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) } func (t *BucketTSDBTests) Data() { var err error /*_, _, err = t.g.Query(` insert into /test/buckettsdb (id) values ("buckettsdb:wecise") `) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) */ for i := 1234567890; i < 1234567890+10; i++ { if i%2 == 0 { _, _, err := t.g.Query(fmt.Sprintf(`insert into /test/buckettsdb (id, bk2[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values ('buckettsdb:wecise', [1, nil, 3.3, 6.5, '%d', 'abcdefghhhhh'] ) at '2022-07-24 10:24:17'`, i)) if err != nil { logger.Errorf("%v", err) } } else { _, _, err := t.g.Query(fmt.Sprintf(`insert into /test/buckettsdb (id, bk2[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values ('buckettsdb:wecise', [nil, nil, 3.3, 6.5, '%d', 'abcdefghhhhh'] ) at '2022-07-24 10:24:17'`, i)) if err != nil { logger.Errorf("%v", err) } } } stat, errr := t.g.Prepare(`insert into /test/buckettsdb (id, bk2[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values (?, ? ) at ? `) require.Nil(t.Test, errr) for i := 1234567890; i < 1234567890+10; i++ { _, _, err := stat.Exec("buckettsdb:wecise", []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(i), "abcdefghhhhh"}, "2022-07-29 10:24:17") if err != nil { logger.Errorf("%v", err) } } _, _, err = stat.Exec("buckettsdb:wecise", [][]interface{}{[]interface{}{1, nil, 3.3, 6.5, strconv.Itoa(66666), " abcdefghhhhh"}, []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(77777), " abcdefghhhhh"}, []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(88888), " abcdefghhhhh"}}, []string{"2022-08-01 10:24:17", "2022-08-02 10:24:17", "2022-08-03 10:24:17"}) if err != nil { logger.Errorf("%v", err) } _, _, err = t.g.Query(`insert into /test/buckettsdb (id, bk2[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values ('buckettsdb:wecise', [[1, nil, 3.3, 6.5, '2234567890', 'abcdefghhhhh'], [1, nil, 3.3, 6.5, '3234567890', 'abcdefghhhhh'], [1, nil, 3.3, 6.5, '4234567890', 'abcdefghhhhh'] ] ) at ['2022-07-25 10:24:17', '2022-07-26 10:24:17', '2022-07-27 10:24:17'] `) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) } func (t *BucketTSDBTests) Data64() { var err error /*_, _, err = t.g.Query(` insert into /test/buckettsdb (id) values ("buckettsdb:wecise") `) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) */ for i := 1234567890; i < 1234567890+10; i++ { if i%2 == 0 { _, _, err := t.g.Query(fmt.Sprintf(`insert into /test/buckettsdb64 (id, bk64[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values ('buckettsdb64:wecise', [1, nil, 3.3, 6.5, '%d', 'abcdefghhhhh'] ) at '2022-07-24 10:24:17'`, i)) if err != nil { logger.Errorf("%v", err) } } else { _, _, err := t.g.Query(fmt.Sprintf(`insert into /test/buckettsdb64 (id, bk64[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values ('buckettsdb64:wecise', [nil, nil, 3.3, 6.5, '%d', 'abcdefghhhhh'] ) at '2022-07-24 10:24:17'`, i)) if err != nil { logger.Errorf("%v", err) } } } stat, errr := t.g.Prepare(`insert into /test/buckettsdb64 (id, bk64[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values (?, ? ) at ? `) require.Nil(t.Test, errr) for i := 1234567890; i < 1234567890+10; i++ { _, _, err := stat.Exec("buckettsdb64:wecise", []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(i), "abcdefghhhhh"}, "2022-07-29 10:24:17") if err != nil { logger.Errorf("%v", err) } } _, _, err = stat.Exec("buckettsdb64:wecise", [][]interface{}{[]interface{}{1, nil, 3.3, 6.5, strconv.Itoa(66666), " abcdefghhhhh"}, []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(77777), " abcdefghhhhh"}, []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(88888), " abcdefghhhhh"}}, []string{"2022-08-01 10:24:17", "2022-08-02 10:24:17", "2022-08-03 10:24:17"}) if err != nil { logger.Errorf("%v", err) } _, _, err = t.g.Query(`insert into /test/buckettsdb64 (id, bk64[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values ('buckettsdb64:wecise', [[1, nil, 3.3, 6.5, '2234567890', 'abcdefghhhhh'], [1, nil, 3.3, 6.5, '3234567890', 'abcdefghhhhh'], [1, nil, 3.3, 6.5, '4234567890', 'abcdefghhhhh'] ] ) at ['2022-07-25 10:24:17', '2022-07-26 10:24:17', '2022-07-27 10:24:17'] `) if err != nil { logger.Errorf("%v", err) } require.Nil(t.Test, err, fmt.Sprint(err)) } func (t *BucketTSDBTests) Valid() { var err error _, _, err = t.g.Query(`SELECT bk2 FROM /test/buckettsdb`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[-1 - 1] FROM /test/buckettsdb`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[1 - -1] FROM /test/buckettsdb`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[ 4-3] FROM /test/buckettsdb`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[ 'iparam1', 3-1, 4] FROM /test/buckettsdb`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[ 'iparam1', 1-3, 4] FROM /test/buckettsdb`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[ 'iparam1', 'iparam2', 2-3, 4 ].time('2022-04-22 08:10', '').(iparam1=1).count() as iparam1 FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[ 3-4, 5 ].time('2022-05-23 22:24:15', '').([1]=1).title() FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2[ 'iparam1', 1-3, 4 ].time('2022-04-22', '').find(fparam1 >= 0.992315).find(iparam1 = 56).find(fparam2 != 0.418309) as iparam1 FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2.time('2022-04-22', '').find(fparam1 >= 0.992315).find(iparam1 = 56).find(fparam2 <> 0.418309) as iparam1 FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk2.time('2022-04-22', '').(fparam1 >= 0.992315).(iparam1 in [56,99]) FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT bk2[-1 - 1].time("2022-07-24", '').find(fparam1 >= 0.992315).count() as iparm1 FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT id, bk2 FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT bk2[-1 - 1].date('2022-07-24').find(fparam1=3.3) FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT bk2.date("2022-07-24") FROM /test/buckettsdb `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT id FROM /test/buckettsdb where bk2.date("2022-07-24").assert(iparam1=1)`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64 FROM /test/buckettsdb64`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[-1 - 1] FROM /test/buckettsdb64`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[1 - -1] FROM /test/buckettsdb64`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[ 4-3] FROM /test/buckettsdb64`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[ 'iparam1', 3-1, 4] FROM /test/buckettsdb64`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[ 'iparam1', 1-3, 4] FROM /test/buckettsdb64`) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[ 'iparam1', 'iparam2', 2-3, 4 ].time('2022-04-22 08:10', '').(iparam1=1).count() as iparam1 FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[ 3-4, 5 ].time('2022-05-23 22:24:15', '').([1]=1).title() FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64[ 'iparam1', 1-3, 4 ].time('2022-04-22', '').find(fparam1 >= 0.992315).find(iparam1 = 56).find(fparam2 != 0.418309) as iparam1 FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64.time('2022-04-22', '').find(fparam1 >= 0.992315).find(iparam1 = 56).find(fparam2 <> 0.418309) as iparam1 FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(`SELECT bk64.time('2022-04-22', '').(fparam1 >= 0.992315).(iparam1 in [56,99]) FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT bk64[-1 - 1].time("2022-07-24", '').find(fparam1 >= 0.992315).count() as iparm1 FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT id, bk64 FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT bk64[-1 - 1].date('2022-07-24').find(fparam1=3.3) FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT bk64.date("2022-07-24") FROM /test/buckettsdb64 `) assert.Nil(t.Test, err) _, _, err = t.g.Query(` SELECT id FROM /test/buckettsdb64 where bk64.date("2022-07-24").assert(iparam1=1)`) assert.Nil(t.Test, err) }