gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/fts4aa.test (about) 1 # 2010 February 02 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 # This file implements regression tests for SQLite library. The 12 # focus of this script is testing the FTS4 module. 13 # 14 # 15 16 set testdir [file dirname $argv0] 17 source $testdir/tester.tcl 18 19 # If SQLITE_ENABLE_FTS3 is defined, omit this file. 20 ifcapable !fts3 { 21 finish_test 22 return 23 } 24 25 # Create the fts_kjv_genesis procedure which fills and FTS3/4 table with 26 # the complete text of the Book of Genesis. 27 # 28 source $testdir/genesis.tcl 29 30 # The following is a list of queries to perform against the above 31 # FTS3/FTS4 database. We will be trying these queries in various 32 # configurations to ensure that they always return the same answers. 33 # 34 set fts4aa_queries { 35 {abraham} 36 {the king} 37 {"the king"} 38 {abraham OR joseph} 39 {ab* OR jos*} 40 {lived t*} 41 {spake hebrew} 42 {melchizedek} 43 {t* melchizedek} 44 {melchizedek t*} 45 } 46 unset -nocomplain fts4aa_res 47 48 # Set up the baseline results 49 # 50 do_test fts4aa-1.0 { 51 db eval { 52 CREATE VIRTUAL TABLE t1 USING fts4(words, tokenize porter); 53 } 54 fts_kjv_genesis 55 foreach q $::fts4aa_queries { 56 set r [db eval {SELECT docid FROM t1 WHERE words MATCH $q ORDER BY docid}] 57 set ::fts4aa_res($q) $r 58 } 59 } {} 60 61 # Legacy test cases 62 # 63 do_test fts4aa-1.1 { 64 db eval { 65 SELECT docid FROM t1 EXCEPT SELECT docid FROM t1_docsize 66 } 67 } {} 68 do_test fts4aa-1.2 { 69 db eval { 70 SELECT docid FROM t1_docsize EXCEPT SELECT docid FROM t1 71 } 72 } {} 73 74 proc mit {blob} { 75 set scan(littleEndian) i* 76 set scan(bigEndian) I* 77 binary scan $blob $scan($::tcl_platform(byteOrder)) r 78 return $r 79 } 80 db func mit mit 81 82 do_test fts4aa-1.3 { 83 db eval { 84 SELECT docid, mit(matchinfo(t1, 'pcxnal')) FROM t1 WHERE t1 MATCH 'melchizedek'; 85 } 86 } {1014018 {1 1 1 1 1 1533 25 20}} 87 do_test fts4aa-1.4 { 88 db eval { 89 SELECT docid, mit(matchinfo(t1, 'pcxnal')) FROM t1 90 WHERE t1 MATCH 'spake hebrew' 91 ORDER BY docid; 92 } 93 } {1039014 {2 1 1 40 40 1 6 6 1533 25 42} 1039017 {2 1 1 40 40 1 6 6 1533 25 26}} 94 do_test fts4aa-1.5 { 95 db eval { 96 SELECT docid, mit(matchinfo(t1, 'pcxnal')) FROM t1 97 WHERE t1 MATCH 'laban overtook jacob' 98 ORDER BY docid; 99 } 100 } {1031025 {3 1 2 54 46 1 3 3 2 181 160 1533 25 24}} 101 102 do_test fts4aa-1.6 { 103 db eval { 104 DELETE FROM t1 WHERE docid!=1050026; 105 SELECT hex(size) FROM t1_docsize; 106 SELECT hex(value) FROM t1_stat; 107 } 108 } {17 01176F} 109 110 do_test fts4aa-1.7 { 111 db eval { 112 SELECT docid FROM t1 EXCEPT SELECT docid FROM t1_docsize 113 } 114 } {} 115 do_test fts4aa-1.8 { 116 db eval { 117 SELECT docid FROM t1_docsize EXCEPT SELECT docid FROM t1 118 } 119 } {} 120 ifcapable fts4_deferred { 121 do_test fts4aa-1.9 { 122 # Note: Token 'in' is being deferred in the following query. 123 db eval { 124 SELECT docid, mit(matchinfo(t1, 'pcxnal')) FROM t1 125 WHERE t1 MATCH 'joseph died in egypt' 126 ORDER BY docid; 127 } 128 } {1050026 {4 1 1 1 1 1 1 1 2 1 1 1 1 1 1 23 23}} 129 } 130 131 # Should get the same search results from FTS3 132 # 133 do_test fts4aa-2.0 { 134 db eval { 135 DROP TABLE t1; 136 CREATE VIRTUAL TABLE t1 USING fts3(words, tokenize porter); 137 } 138 fts_kjv_genesis 139 } {} 140 unset -nocomplain ii 141 set ii 0 142 foreach {q r} [array get fts4aa_res] { 143 incr ii 144 do_test fts4aa-2.$ii { 145 db eval {SELECT docid FROM t1 WHERE words MATCH $::q ORDER BY docid} 146 } $r 147 } 148 149 # Should get the same search results when the page size is very large 150 # 151 do_test fts4aa-3.0 { 152 db close 153 forcedelete test.db 154 sqlite3 db test.db 155 db eval { 156 PRAGMA page_size=65536; 157 CREATE VIRTUAL TABLE t1 USING fts4(words, tokenize porter); 158 } 159 fts_kjv_genesis 160 } {} 161 unset -nocomplain ii 162 set ii 0 163 foreach {q r} [array get fts4aa_res] { 164 incr ii 165 do_test fts4aa-3.$ii { 166 db eval {SELECT docid FROM t1 WHERE words MATCH $::q ORDER BY docid} 167 } $r 168 } 169 170 # Should get the same search results when an authorizer prevents 171 # all PRAGMA statements. 172 # 173 proc no_pragma_auth {code arg1 arg2 arg3 arg4 args} { 174 if {$code=="SQLITE_PRAGMA"} {return SQLITE_DENY} 175 return SQLITE_OK; 176 } 177 do_test fts4aa-4.0 { 178 db auth ::no_pragma_auth 179 db eval { 180 DROP TABLE t1; 181 CREATE VIRTUAL TABLE t1 USING fts4(words, tokenize porter); 182 } 183 fts_kjv_genesis 184 } {} 185 unset -nocomplain ii 186 set ii 0 187 foreach {q r} [array get fts4aa_res] { 188 incr ii 189 do_test fts4aa-4.$ii { 190 db eval {SELECT docid FROM t1 WHERE words MATCH $::q ORDER BY docid} 191 } $r 192 } 193 194 # 2019-11-16 https://bugs.chromium.org/p/chromium/issues/detail?id=1025472 195 # 196 db close 197 sqlite3 db :memory: 198 do_execsql_test fts4aa-5.10 { 199 CREATE VIRTUAL TABLE t1 USING fts4(a, b, c, d, e,f,g,h,i,j,k,l,m,n,o,p,q,r); 200 INSERT INTO t1 VALUES('X Y', '2', '3', '4', '5', '6', '7', '8', '9', '0', 201 'a','b','c','d','e','f','g','h'); 202 UPDATE t1_docsize SET size=x'88' WHERE docid=1; 203 } {} 204 do_catchsql_test fts4aa-5.20 { 205 SELECT quote(matchinfo(t1, 'l')) FROM t1 WHERE t1 MATCH 'X Y'; 206 } {1 {database disk image is malformed}} 207 do_execsql_test fts4aa-5.30 { 208 DROP TABLE t1; 209 CREATE VIRTUAL TABLE t1 USING fts4(a,b,c,d); 210 INSERT INTO t1 VALUES('one two','three four','five six','seven eight'); 211 } {} 212 do_catchsql_test fts4aa-5.40 { 213 UPDATE t1_stat SET value=x'01010101' WHERE id=0; 214 SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; 215 } {1 {database disk image is malformed}} 216 do_catchsql_test fts4aa-5.50 { 217 UPDATE t1_stat SET value=x'010101' WHERE id=0; 218 SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; 219 } {1 {database disk image is malformed}} 220 do_catchsql_test fts4aa-5.60 { 221 UPDATE t1_stat SET value=x'01' WHERE id=0; 222 SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; 223 } {1 {database disk image is malformed}} 224 do_catchsql_test fts4aa-5.70 { 225 UPDATE t1_stat SET value=x'' WHERE id=0; 226 SELECT quote(matchinfo(t1,'a')) FROM t1 WHERE t1 MATCH 'one two'; 227 } {1 {database disk image is malformed}} 228 229 # 2019-11-18 https://bugs.chromium.org/p/chromium/issues/detail?id=1025467 230 db close 231 sqlite3 db :memory: 232 if {$tcl_platform(byteOrder)=="littleEndian"} { 233 set res {X'0200000000000000000000000E0000000E00000001000000010000000100000001000000'} 234 } else { 235 set res {X'0000000200000000000000000000000E0000000E00000001000000010000000100000001'} 236 } 237 do_catchsql_test fts4aa-6.10 { 238 CREATE VIRTUAL TABLE f USING fts4(); 239 INSERT INTO f_segdir VALUES (77,91,0,0,'255 77',x'0001308000004d5c4ddddddd4d4d7b4d4d4d614d8019ff4d05000001204d4d2e4d6e4d4d4d4b4d6c4d004d4d4d4d4d4d3d000000004d5d4d4d645d4d004d4d4d4d4d4d4d4d4d454d6910004d05ffff054d646c4d004d5d4d4d4d4d3d000000004d4d4d4d4d4d4d4d4d4d4d69624d4d4d04004d4d4d4d4d604d4ce1404d554d45'); 240 INSERT INTO f_segdir VALUES (77,108,0,0,'255 77',x'0001310000fa64004d4d4d3c5d4d654d4d4d614d8000ff4d05000001204d4d2e4d6e4d4d4dff4d4d4d4d4d4d00104d4d4d4d000000004d4d4d0400311d4d4d4d4d4d4d4d4d4d684d6910004d05ffff054d4d6c4d004d4d4d4d4d4d3d000000004d4d4d4d644d4d4d4d4d4d69624d4d4d03ed4d4d4d4d4d604d4ce1404d550080'); 241 INSERT INTO f_stat VALUES (0,x'80808080100000000064004d4d4d3c4d4d654d4d4d614d8000ff4df6ff1a00204d4d2e4d6e4d4d4d104d4d4d4d4d4d00104d4d4d4d4d4d69574d4d4d000031044d4d4d3e4d4d4c4d05004d6910'); 242 SELECT quote(matchinfo(f,'pnax')) from f where f match '0 1'; 243 } {1 {database disk image is malformed}} 244 245 # 2019-11-18 Detect infinite loop in fts3SelectLeaf() 246 db close 247 sqlite3 db :memory: 248 do_catchsql_test fts4aa-7.10 { 249 CREATE VIRTUAL TABLE f USING fts4(); 250 INSERT INTO f_segdir VALUES (63,60,60,60,'60 60',x'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c483c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c20003c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c283c3c3c3c3c3c3c3c3c3c3c223c3c3c3c3c3c3c3c3c'); 251 INSERT INTO f_segments VALUES (60,x'3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5e3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c803c3c3c3c3c3c233c3c3c3c1c3c3c3c3c3c3c3c3c3c3c3c1b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c273c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1a3c3c3c3c3c3c000200003c3c3c3c3c3c3c3c3c3c3c3c3c383c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d898d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d3c3c3c3c3c3c3c3c3c3cba3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c00023c3c3c3c3c3c383c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cbc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2c3c3c3c403c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c16161616161616163c3c3c3c3c3c3c3c3c3c3c3c3c583c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1c013c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c20003c3c3c3c3c3c3c3c3c3c3c800000003c3c3c3c3c3c3c2c3c3c3c3c3c3c353c08080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808f4080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808083c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c323c3c3c3c3c3c3c3c3c3c3c4f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cfcfcfcfcfcfcfcfcfcfcfc10fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfd02fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc03e8fcfcfcfc3c3c3c3c3c3c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c553c3c3c3c3c3c3c3c3c3c3c3c3c573c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c000000803c3c4dd5d5a6d52cf3d5d5d5d5d5d5d5d5d5d5d5d5d5d53c3c3c3c3f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c013c3c3c3c00643c3c3c3ce93c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c263c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c363c3c3c3c3c3c3c3c3c3c3c3c3c3c543c3c3c3c3c3c3c3c3c3c273c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c330000003c3c3c3c3c3c3c3c3c3c3c3c3c3c4d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c000010003c3c3c3c3c3c413c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c403c3c3c3c3c3c3c3c3c3c3c3cec0000fa3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c5e3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c1b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c593c3c3c3c3c3c243c3c373c3c3c3c3cff3c3c3c3c3c3c3c3c3c3c3c3c3c000080003c3c3c3c3c3c3c3c3c3c353c3c3c3c3c3d3c3c3c3c3c3c3c3c3c3c3c3c4d3c3c3c3c3c3c3c3c3c3c3c3c3c40003c3c3c3c3c293c3c3c3c3c3c3c3c3c3d3c3c3c3c3c3c3c3c353c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cff7f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c2d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3ca43c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3cbf3c3c3c3c3c3c3c3c3c008000003c3c3c3c3c3c3c3c343c3c373c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c593c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c'); 252 SELECT * from f where f match '0'; 253 } {1 {database disk image is malformed}} 254 255 256 finish_test