fts5auxdata.test 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # 2014 Dec 20
  2. #
  3. # The author disclaims copyright to this source code. In place of
  4. # a legal notice, here is a blessing:
  5. #
  6. # May you do good and not evil.
  7. # May you find forgiveness for yourself and forgive others.
  8. # May you share freely, never taking more than you give.
  9. #
  10. #***********************************************************************
  11. #
  12. # Tests focusing on the fts5 xSetAuxdata() and xGetAuxdata() APIs.
  13. #
  14. source [file join [file dirname [info script]] fts5_common.tcl]
  15. set testprefix fts5auxdata
  16. # If SQLITE_ENABLE_FTS5 is not defined, omit this file.
  17. ifcapable !fts5 {
  18. finish_test
  19. return
  20. }
  21. do_execsql_test 1.0 {
  22. CREATE VIRTUAL TABLE f1 USING fts5(a, b);
  23. INSERT INTO f1(rowid, a, b) VALUES(1, 'a', 'b1');
  24. INSERT INTO f1(rowid, a, b) VALUES(2, 'a', 'b2');
  25. INSERT INTO f1(rowid, a, b) VALUES(3, 'a', 'b3');
  26. INSERT INTO f1(rowid, a, b) VALUES(4, 'a', 'b4');
  27. INSERT INTO f1(rowid, a, b) VALUES(5, 'a', 'b5');
  28. }
  29. proc aux_function_1 {cmd tn} {
  30. switch [$cmd xRowid] {
  31. 1 {
  32. do_test $tn.1 [list $cmd xGetAuxdata 0 ] {}
  33. $cmd xSetAuxdata "one"
  34. }
  35. 2 {
  36. do_test $tn.2 [list $cmd xGetAuxdata 0 ] {one}
  37. $cmd xSetAuxdata "two"
  38. }
  39. 3 {
  40. do_test $tn.3 [list $cmd xGetAuxdata 0 ] {two}
  41. }
  42. 4 {
  43. do_test $tn.4 [list $cmd xGetAuxdata 1 ] {two}
  44. }
  45. 5 {
  46. do_test $tn.5 [list $cmd xGetAuxdata 0 ] {}
  47. }
  48. }
  49. }
  50. sqlite3_fts5_create_function db aux_function_1 aux_function_1
  51. db eval {
  52. SELECT aux_function_1(f1, 1) FROM f1 WHERE f1 MATCH 'a'
  53. ORDER BY rowid ASC
  54. }
  55. proc aux_function_2 {cmd tn inst} {
  56. if {$inst == "A"} {
  57. switch [$cmd xRowid] {
  58. 1 {
  59. do_test $tn.1.$inst [list $cmd xGetAuxdata 0 ] {}
  60. $cmd xSetAuxdata "one $inst"
  61. }
  62. 2 {
  63. do_test $tn.2.$inst [list $cmd xGetAuxdata 0 ] "one $inst"
  64. $cmd xSetAuxdata "two $inst"
  65. }
  66. 3 {
  67. do_test $tn.3.$inst [list $cmd xGetAuxdata 0 ] "two $inst"
  68. }
  69. 4 {
  70. do_test $tn.4.$inst [list $cmd xGetAuxdata 1 ] "two $inst"
  71. }
  72. 5 {
  73. do_test $tn.5.$inst [list $cmd xGetAuxdata 0 ] {}
  74. }
  75. }
  76. } else {
  77. switch [$cmd xRowid] {
  78. 1 {
  79. do_test $tn.1.$inst [list $cmd xGetAuxdata 0 ] "one A"
  80. }
  81. 2 {
  82. do_test $tn.2.$inst [list $cmd xGetAuxdata 0 ] "two A"
  83. }
  84. 3 {
  85. do_test $tn.3.$inst [list $cmd xGetAuxdata 0 ] "two A"
  86. }
  87. 4 {
  88. do_test $tn.4.$inst [list $cmd xGetAuxdata 0 ] {}
  89. }
  90. 5 {
  91. do_test $tn.5.$inst [list $cmd xGetAuxdata 0 ] {}
  92. }
  93. }
  94. }
  95. }
  96. sqlite3_fts5_create_function db aux_function_2 aux_function_2
  97. db eval {
  98. SELECT aux_function_2(f1, 2, 'A'), aux_function_2(f1, 2, 'B')
  99. FROM f1 WHERE f1 MATCH 'a'
  100. ORDER BY rowid ASC
  101. }
  102. finish_test