bucket_tsdb.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. package bucket
  2. import (
  3. "fmt"
  4. "strconv"
  5. "testing"
  6. "time"
  7. . "git.wecise.com/wecise/odbserver/odb"
  8. "git.wecise.com/wecise/odbserver/odb/test"
  9. "gitee.com/wecisecode/util/logger"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/stretchr/testify/require"
  12. )
  13. type BucketTSDBTests struct {
  14. Test *testing.T
  15. g *Gutil
  16. }
  17. func BucketTSDBTest(t *testing.T) {
  18. g := test.TestG()
  19. t.Run("InitG", func(t *testing.T) {
  20. test := &BucketTSDBTests{Test: t, g: g}
  21. test.InitG()
  22. })
  23. t.Run("Class", func(t *testing.T) {
  24. test := &BucketTSDBTests{Test: t, g: g}
  25. test.Class()
  26. })
  27. t.Run("Data", func(t *testing.T) {
  28. test := &BucketTSDBTests{Test: t, g: g}
  29. test.Data()
  30. })
  31. t.Run("Data64", func(t *testing.T) {
  32. test := &BucketTSDBTests{Test: t, g: g}
  33. test.Data64()
  34. })
  35. time.Sleep(time.Duration(1) * time.Second)
  36. t.Run("Valid", func(t *testing.T) {
  37. test := &BucketTSDBTests{Test: t, g: g}
  38. test.Valid()
  39. })
  40. }
  41. func (t *BucketTSDBTests) InitG() {
  42. require.NotNil(t.Test, t.g)
  43. }
  44. func (t *BucketTSDBTests) Class() {
  45. t.g.Query(`
  46. create class if not exists /test();
  47. `)
  48. _, _, err := t.g.Query(`
  49. create class if not exists /test/buckettsdb (
  50. host varchar,
  51. bk2 bucket {
  52. "type" : "tsdb",
  53. "param" : ["iparam1","iparam2","fparam1","fparam2","sparam1","vparam1"],
  54. "ptype" : ["i","i","f","f","s","s"],
  55. "unit" : ["%","m","ms","ns","",""],
  56. "precision":[0,0,3,4,0,0],
  57. "ttl" : 365,
  58. "crc" : ["iparam1", "sparam1"]
  59. } 'full',
  60. keys(host),
  61. indexes(host)
  62. ) with key=manu, nickname='buckettsdb'
  63. `)
  64. if err != nil {
  65. logger.Errorf("%v", err)
  66. }
  67. _, _, err = t.g.Query(`
  68. create class if not exists /test/buckettsdb64 (
  69. host varchar,
  70. bk64 bucket {
  71. "type" : "tsdb",
  72. "crc64" : true,
  73. "param" : ["iparam1","iparam2","fparam1","fparam2","sparam1","vparam1"],
  74. "ptype" : ["i","i","f","f","s","s"],
  75. "unit" : ["%","m","ms","ns","",""],
  76. "precision":[0,0,3,4,0,0],
  77. "ttl" : 365,
  78. "crc" : ["iparam1", "sparam1"]
  79. } 'full',
  80. keys(host),
  81. indexes(host)
  82. ) with key=manu, nickname='buckettsdb64'
  83. `)
  84. if err != nil {
  85. logger.Errorf("%v", err)
  86. }
  87. require.Nil(t.Test, err, fmt.Sprint(err))
  88. }
  89. func (t *BucketTSDBTests) Data() {
  90. var err error
  91. /*_, _, err = t.g.Query(` insert into /test/buckettsdb (id) values ("buckettsdb:wecise") `)
  92. if err != nil {
  93. logger.Errorf("%v", err)
  94. }
  95. require.Nil(t.Test, err, fmt.Sprint(err))
  96. */
  97. for i := 1234567890; i < 1234567890+10; i++ {
  98. if i%2 == 0 {
  99. _, _, 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))
  100. if err != nil {
  101. logger.Errorf("%v", err)
  102. }
  103. } else {
  104. _, _, 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))
  105. if err != nil {
  106. logger.Errorf("%v", err)
  107. }
  108. }
  109. }
  110. stat, errr := t.g.Prepare(`insert into /test/buckettsdb (id, bk2[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values (?, ? ) at ? `)
  111. require.Nil(t.Test, errr)
  112. for i := 1234567890; i < 1234567890+10; i++ {
  113. _, _, err := stat.Exec("buckettsdb:wecise", []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(i), "abcdefghhhhh"}, "2022-07-29 10:24:17")
  114. if err != nil {
  115. logger.Errorf("%v", err)
  116. }
  117. }
  118. _, _, 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"})
  119. if err != nil {
  120. logger.Errorf("%v", err)
  121. }
  122. _, _, 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'] `)
  123. if err != nil {
  124. logger.Errorf("%v", err)
  125. }
  126. require.Nil(t.Test, err, fmt.Sprint(err))
  127. }
  128. func (t *BucketTSDBTests) Data64() {
  129. var err error
  130. /*_, _, err = t.g.Query(` insert into /test/buckettsdb (id) values ("buckettsdb:wecise") `)
  131. if err != nil {
  132. logger.Errorf("%v", err)
  133. }
  134. require.Nil(t.Test, err, fmt.Sprint(err))
  135. */
  136. for i := 1234567890; i < 1234567890+10; i++ {
  137. if i%2 == 0 {
  138. _, _, 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))
  139. if err != nil {
  140. logger.Errorf("%v", err)
  141. }
  142. } else {
  143. _, _, 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))
  144. if err != nil {
  145. logger.Errorf("%v", err)
  146. }
  147. }
  148. }
  149. stat, errr := t.g.Prepare(`insert into /test/buckettsdb64 (id, bk64[ 'iparam1', 'iparam2', 'fparam1', 'fparam2', 'sparam1', 'vparam1']) values (?, ? ) at ? `)
  150. require.Nil(t.Test, errr)
  151. for i := 1234567890; i < 1234567890+10; i++ {
  152. _, _, err := stat.Exec("buckettsdb64:wecise", []interface{}{1, nil, 3.3, 6.5, strconv.Itoa(i), "abcdefghhhhh"}, "2022-07-29 10:24:17")
  153. if err != nil {
  154. logger.Errorf("%v", err)
  155. }
  156. }
  157. _, _, 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"})
  158. if err != nil {
  159. logger.Errorf("%v", err)
  160. }
  161. _, _, 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'] `)
  162. if err != nil {
  163. logger.Errorf("%v", err)
  164. }
  165. require.Nil(t.Test, err, fmt.Sprint(err))
  166. }
  167. func (t *BucketTSDBTests) Valid() {
  168. var err error
  169. _, _, err = t.g.Query(`SELECT bk2 FROM /test/buckettsdb`)
  170. assert.Nil(t.Test, err)
  171. _, _, err = t.g.Query(`SELECT bk2[-1 - 1] FROM /test/buckettsdb`)
  172. assert.Nil(t.Test, err)
  173. _, _, err = t.g.Query(`SELECT bk2[1 - -1] FROM /test/buckettsdb`)
  174. assert.Nil(t.Test, err)
  175. _, _, err = t.g.Query(`SELECT bk2[ 4-3] FROM /test/buckettsdb`)
  176. assert.Nil(t.Test, err)
  177. _, _, err = t.g.Query(`SELECT bk2[ 'iparam1', 3-1, 4] FROM /test/buckettsdb`)
  178. assert.Nil(t.Test, err)
  179. _, _, err = t.g.Query(`SELECT bk2[ 'iparam1', 1-3, 4] FROM /test/buckettsdb`)
  180. assert.Nil(t.Test, err)
  181. _, _, 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 `)
  182. assert.Nil(t.Test, err)
  183. _, _, err = t.g.Query(`SELECT bk2[ 3-4, 5 ].time('2022-05-23 22:24:15', '').([1]=1).title() FROM /test/buckettsdb `)
  184. assert.Nil(t.Test, err)
  185. _, _, 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 `)
  186. assert.Nil(t.Test, err)
  187. _, _, 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 `)
  188. assert.Nil(t.Test, err)
  189. _, _, err = t.g.Query(`SELECT bk2.time('2022-04-22', '').(fparam1 >= 0.992315).(iparam1 in [56,99]) FROM /test/buckettsdb `)
  190. assert.Nil(t.Test, err)
  191. _, _, err = t.g.Query(` SELECT bk2[-1 - 1].time("2022-07-24", '').find(fparam1 >= 0.992315).count() as iparm1 FROM /test/buckettsdb `)
  192. assert.Nil(t.Test, err)
  193. _, _, err = t.g.Query(` SELECT id, bk2 FROM /test/buckettsdb `)
  194. assert.Nil(t.Test, err)
  195. _, _, err = t.g.Query(` SELECT bk2[-1 - 1].date('2022-07-24').find(fparam1=3.3) FROM /test/buckettsdb `)
  196. assert.Nil(t.Test, err)
  197. _, _, err = t.g.Query(` SELECT bk2.date("2022-07-24") FROM /test/buckettsdb `)
  198. assert.Nil(t.Test, err)
  199. _, _, err = t.g.Query(` SELECT id FROM /test/buckettsdb where bk2.date("2022-07-24").assert(iparam1=1)`)
  200. assert.Nil(t.Test, err)
  201. _, _, err = t.g.Query(`SELECT bk64 FROM /test/buckettsdb64`)
  202. assert.Nil(t.Test, err)
  203. _, _, err = t.g.Query(`SELECT bk64[-1 - 1] FROM /test/buckettsdb64`)
  204. assert.Nil(t.Test, err)
  205. _, _, err = t.g.Query(`SELECT bk64[1 - -1] FROM /test/buckettsdb64`)
  206. assert.Nil(t.Test, err)
  207. _, _, err = t.g.Query(`SELECT bk64[ 4-3] FROM /test/buckettsdb64`)
  208. assert.Nil(t.Test, err)
  209. _, _, err = t.g.Query(`SELECT bk64[ 'iparam1', 3-1, 4] FROM /test/buckettsdb64`)
  210. assert.Nil(t.Test, err)
  211. _, _, err = t.g.Query(`SELECT bk64[ 'iparam1', 1-3, 4] FROM /test/buckettsdb64`)
  212. assert.Nil(t.Test, err)
  213. _, _, 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 `)
  214. assert.Nil(t.Test, err)
  215. _, _, err = t.g.Query(`SELECT bk64[ 3-4, 5 ].time('2022-05-23 22:24:15', '').([1]=1).title() FROM /test/buckettsdb64 `)
  216. assert.Nil(t.Test, err)
  217. _, _, 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 `)
  218. assert.Nil(t.Test, err)
  219. _, _, 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 `)
  220. assert.Nil(t.Test, err)
  221. _, _, err = t.g.Query(`SELECT bk64.time('2022-04-22', '').(fparam1 >= 0.992315).(iparam1 in [56,99]) FROM /test/buckettsdb64 `)
  222. assert.Nil(t.Test, err)
  223. _, _, err = t.g.Query(` SELECT bk64[-1 - 1].time("2022-07-24", '').find(fparam1 >= 0.992315).count() as iparm1 FROM /test/buckettsdb64 `)
  224. assert.Nil(t.Test, err)
  225. _, _, err = t.g.Query(` SELECT id, bk64 FROM /test/buckettsdb64 `)
  226. assert.Nil(t.Test, err)
  227. _, _, err = t.g.Query(` SELECT bk64[-1 - 1].date('2022-07-24').find(fparam1=3.3) FROM /test/buckettsdb64 `)
  228. assert.Nil(t.Test, err)
  229. _, _, err = t.g.Query(` SELECT bk64.date("2022-07-24") FROM /test/buckettsdb64 `)
  230. assert.Nil(t.Test, err)
  231. _, _, err = t.g.Query(` SELECT id FROM /test/buckettsdb64 where bk64.date("2022-07-24").assert(iparam1=1)`)
  232. assert.Nil(t.Test, err)
  233. }