fts3ai.test 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # 2007 January 17
  2. #
  3. # The author disclaims copyright to this source code.
  4. #
  5. #*************************************************************************
  6. # This file implements regression tests for SQLite fts3 library. The
  7. # focus here is testing handling of UPDATE when using UTF-16-encoded
  8. # databases.
  9. #
  10. # $Id: fts3ai.test,v 1.1 2007/08/20 17:38:42 shess Exp $
  11. #
  12. set testdir [file dirname $argv0]
  13. source $testdir/tester.tcl
  14. # If SQLITE_ENABLE_FTS3 is defined, omit this file.
  15. ifcapable !fts3 {
  16. finish_test
  17. return
  18. }
  19. ifcapable !utf16 {
  20. finish_test
  21. return
  22. }
  23. # Return the UTF-16 representation of the supplied UTF-8 string $str.
  24. # If $nt is true, append two 0x00 bytes as a nul terminator.
  25. # NOTE(shess) Copied from capi3.test.
  26. proc utf16 {str {nt 1}} {
  27. set r [encoding convertto unicode $str]
  28. if {$nt} {
  29. append r "\x00\x00"
  30. }
  31. return $r
  32. }
  33. db eval {
  34. PRAGMA encoding = "UTF-16le";
  35. CREATE VIRTUAL TABLE t1 USING fts3(content);
  36. }
  37. do_test fts3ai-1.0 {
  38. execsql {PRAGMA encoding}
  39. } {UTF-16le}
  40. do_test fts3ai-1.1 {
  41. execsql {INSERT INTO t1 (rowid, content) VALUES(1, 'one')}
  42. execsql {SELECT content FROM t1 WHERE rowid = 1}
  43. } {one}
  44. do_test fts3ai-1.2 {
  45. set sql "INSERT INTO t1 (rowid, content) VALUES(2, 'two')"
  46. set STMT [sqlite3_prepare $DB $sql -1 TAIL]
  47. sqlite3_step $STMT
  48. sqlite3_finalize $STMT
  49. execsql {SELECT content FROM t1 WHERE rowid = 2}
  50. } {two}
  51. do_test fts3ai-1.3 {
  52. set sql "INSERT INTO t1 (rowid, content) VALUES(3, 'three')"
  53. set STMT [sqlite3_prepare $DB $sql -1 TAIL]
  54. sqlite3_step $STMT
  55. sqlite3_finalize $STMT
  56. set sql "UPDATE t1 SET content = 'trois' WHERE rowid = 3"
  57. set STMT [sqlite3_prepare $DB $sql -1 TAIL]
  58. sqlite3_step $STMT
  59. sqlite3_finalize $STMT
  60. execsql {SELECT content FROM t1 WHERE rowid = 3}
  61. } {trois}
  62. do_test fts3ai-1.4 {
  63. set sql16 [utf16 {INSERT INTO t1 (rowid, content) VALUES(4, 'four')}]
  64. set STMT [sqlite3_prepare16 $DB $sql16 -1 TAIL]
  65. sqlite3_step $STMT
  66. sqlite3_finalize $STMT
  67. execsql {SELECT content FROM t1 WHERE rowid = 4}
  68. } {four}
  69. do_test fts3ai-1.5 {
  70. set sql16 [utf16 {INSERT INTO t1 (rowid, content) VALUES(5, 'five')}]
  71. set STMT [sqlite3_prepare16 $DB $sql16 -1 TAIL]
  72. sqlite3_step $STMT
  73. sqlite3_finalize $STMT
  74. set sql "UPDATE t1 SET content = 'cinq' WHERE rowid = 5"
  75. set STMT [sqlite3_prepare $DB $sql -1 TAIL]
  76. sqlite3_step $STMT
  77. sqlite3_finalize $STMT
  78. execsql {SELECT content FROM t1 WHERE rowid = 5}
  79. } {cinq}
  80. finish_test