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