17beforerun.mql 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. -- ============================================================
  2. -- beforerun 函数链:set / add / mod / case
  3. -- 注意:beforerun 设置的变量作用范围为「当前 mql 请求」(同一条语句),
  4. -- 因此 beforerun 动作必须与使用变量的语句写在同一条语句内。
  5. -- 校验前需 sleep 等待 Cassandra 索引可见(index.delay 默认 10s,实测约 2s)。
  6. -- ============================================================
  7. -- 1. beforerun set 设置变量(字符串需加引号)
  8. insert into /test/aaa/test_ext (e_name, e_value, e_text) values ('beforerun_set', 1, '{%s,myvar}')
  9. /**
  10. beforerun(set(myvar, 'hello_mql'))
  11. **/
  12. ;
  13. /** sleep(2s) **/
  14. ;
  15. select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_set'
  16. /**
  17. output()
  18. match("e_text","hello_mql")
  19. **/
  20. ;
  21. -- 2. beforerun add 累加
  22. insert into /test/aaa/test_ext (e_name, e_value, e_text) values ('beforerun_add', {%d,counter}, 'add test')
  23. /**
  24. beforerun(set(counter, 10), add(counter, 5))
  25. **/
  26. ;
  27. /** sleep(2s) **/
  28. ;
  29. select e_name, e_value from /test/aaa/test_ext where e_name='beforerun_add'
  30. /**
  31. output()
  32. match("e_value",15)
  33. **/
  34. ;
  35. -- 3. beforerun add 带单位(时间累加)
  36. insert into /test/aaa/test_ext (e_name, e_text) values ('beforerun_time', '{%t,ct}')
  37. /**
  38. beforerun(set(ct, '2024-01-01 00:00:00'), add(ct, 30, second))
  39. **/
  40. ;
  41. /** sleep(2s) **/
  42. ;
  43. select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_time'
  44. /**
  45. output()
  46. match("e_text","2024-01-01 00:00:30")
  47. **/
  48. ;
  49. -- 4. beforerun mod 取模
  50. insert into /test/aaa/test_ext (e_name, e_value, e_text) values ('beforerun_mod', {%d,mod_val}, 'mod test 17%5')
  51. /**
  52. beforerun(set(mod_val, 17), mod(mod_val, 5))
  53. **/
  54. ;
  55. /** sleep(2s) **/
  56. ;
  57. select e_name, e_value from /test/aaa/test_ext where e_name='beforerun_mod'
  58. /**
  59. output()
  60. match("e_value",2)
  61. **/
  62. ;
  63. -- 5. beforerun case 条件判断(条件匹配)
  64. insert into /test/aaa/test_ext (e_name, e_text) values ('beforerun_case_yes', '{%s,case_result}')
  65. /**
  66. beforerun(set(case_val, 'yes'), set(case_result, 'default'), case(case_val=='yes', set(case_result, 'matched')))
  67. **/
  68. ;
  69. /** sleep(2s) **/
  70. ;
  71. select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_case_yes'
  72. /**
  73. output()
  74. match("e_text","matched")
  75. **/
  76. ;
  77. -- 6. beforerun case 条件不匹配
  78. insert into /test/aaa/test_ext (e_name, e_text) values ('beforerun_case_no', '{%s,case_result}')
  79. /**
  80. beforerun(set(case_val, 'no'), set(case_result, 'default'), case(case_val=='yes', set(case_result, 'matched')))
  81. **/
  82. ;
  83. /** sleep(2s) **/
  84. ;
  85. select e_name, e_text from /test/aaa/test_ext where e_name='beforerun_case_no'
  86. /**
  87. output()
  88. match("e_text","default")
  89. **/
  90. ;