OLD | NEW |
(Empty) | |
| 1 # 2015 September 05 |
| 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 |
| 13 source [file join [file dirname [info script]] fts5_common.tcl] |
| 14 set testprefix fts5simple2 |
| 15 |
| 16 # If SQLITE_ENABLE_FTS5 is defined, omit this file. |
| 17 ifcapable !fts5 { |
| 18 finish_test |
| 19 return |
| 20 } |
| 21 |
| 22 do_execsql_test 1.0 { |
| 23 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 24 INSERT INTO t1 VALUES('a b c'); |
| 25 } |
| 26 do_execsql_test 1.1 { |
| 27 SELECT rowid FROM t1('c a b') |
| 28 } {1} |
| 29 |
| 30 #------------------------------------------------------------------------- |
| 31 # |
| 32 reset_db |
| 33 do_execsql_test 2.0 { |
| 34 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 35 BEGIN; |
| 36 INSERT INTO t1 VALUES('b c d'); |
| 37 INSERT INTO t1 VALUES('b c d'); |
| 38 COMMIT; |
| 39 } |
| 40 do_execsql_test 2.1 { |
| 41 SELECT rowid FROM t1('b c d') |
| 42 } {1 2} |
| 43 |
| 44 #------------------------------------------------------------------------- |
| 45 # |
| 46 reset_db |
| 47 do_execsql_test 3.0 { |
| 48 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 49 BEGIN; |
| 50 INSERT INTO t1 VALUES('b c d'); |
| 51 INSERT INTO t1 VALUES('b c d'); |
| 52 } |
| 53 do_execsql_test 3.1 { |
| 54 SELECT rowid FROM t1('b c d'); COMMIT; |
| 55 } {1 2} |
| 56 |
| 57 #------------------------------------------------------------------------- |
| 58 # |
| 59 reset_db |
| 60 do_execsql_test 4.0 { |
| 61 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 62 BEGIN; |
| 63 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 64 INSERT INTO t1 VALUES('a2 b2 c2'); |
| 65 INSERT INTO t1 VALUES('a3 b3 c3'); |
| 66 COMMIT; |
| 67 } |
| 68 do_execsql_test 4.1 { |
| 69 SELECT rowid FROM t1('b*'); |
| 70 } {1 2 3} |
| 71 |
| 72 |
| 73 #------------------------------------------------------------------------- |
| 74 # |
| 75 reset_db |
| 76 do_execsql_test 5.0 { |
| 77 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 78 BEGIN; |
| 79 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 80 INSERT INTO t1 VALUES('a2 b2 c2'); |
| 81 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 82 COMMIT; |
| 83 } |
| 84 do_execsql_test 5.1 { SELECT rowid FROM t1('b*') } {1 2 3} |
| 85 |
| 86 #------------------------------------------------------------------------- |
| 87 # |
| 88 reset_db |
| 89 do_execsql_test 6.0 { |
| 90 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=full); |
| 91 BEGIN; |
| 92 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 93 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 94 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 95 COMMIT; |
| 96 } |
| 97 |
| 98 do_execsql_test 6.1 { SELECT rowid FROM t1('a1') ORDER BY rowid DESC } {3 2 1} |
| 99 do_execsql_test 6.2 { SELECT rowid FROM t1('b1') ORDER BY rowid DESC } {3 2 1} |
| 100 do_execsql_test 6.3 { SELECT rowid FROM t1('c1') ORDER BY rowid DESC } {3 2 1} |
| 101 |
| 102 #------------------------------------------------------------------------- |
| 103 # |
| 104 reset_db |
| 105 do_execsql_test 7.0 { |
| 106 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 107 BEGIN; |
| 108 INSERT INTO t1 VALUES('a1 b1'); |
| 109 INSERT INTO t1 VALUES('a1 b2'); |
| 110 COMMIT; |
| 111 } |
| 112 do_execsql_test 7.1 { SELECT rowid FROM t1('b*') ORDER BY rowid DESC } {2 1} |
| 113 do_execsql_test 7.2 { SELECT rowid FROM t1('a1') ORDER BY rowid DESC } {2 1} |
| 114 |
| 115 #------------------------------------------------------------------------- |
| 116 # |
| 117 reset_db |
| 118 do_execsql_test 8.0 { |
| 119 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 120 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 121 INSERT INTO t1 VALUES('a2 b2 c2'); |
| 122 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 123 } |
| 124 do_execsql_test 8.0.1 { SELECT rowid FROM t1('b*') } {1 2 3} |
| 125 do_execsql_test 8.0.2 { SELECT rowid FROM t1('a1') } {1 3} |
| 126 do_execsql_test 8.0.3 { SELECT rowid FROM t1('c2') } {2} |
| 127 |
| 128 do_execsql_test 8.0.4 { SELECT rowid FROM t1('b*') ORDER BY rowid DESC } {3 2 1} |
| 129 do_execsql_test 8.0.5 { SELECT rowid FROM t1('a1') ORDER BY rowid DESC } {3 1} |
| 130 do_execsql_test 8.0.8 { SELECT rowid FROM t1('c2') ORDER BY rowid DESC } {2} |
| 131 |
| 132 do_execsql_test 8.1.0 { INSERT INTO t1(t1) VALUES('optimize') } |
| 133 |
| 134 do_execsql_test 8.1.1 { SELECT rowid FROM t1('b*') } {1 2 3} |
| 135 do_execsql_test 8.1.2 { SELECT rowid FROM t1('a1') } {1 3} |
| 136 do_execsql_test 8.1.3 { SELECT rowid FROM t1('c2') } {2} |
| 137 |
| 138 do_execsql_test 8.2.1 { SELECT rowid FROM t1('b*') ORDER BY rowid DESC} {3 2 1} |
| 139 do_execsql_test 8.2.2 { SELECT rowid FROM t1('a1') ORDER BY rowid DESC} {3 1} |
| 140 do_execsql_test 8.2.3 { SELECT rowid FROM t1('c2') ORDER BY rowid DESC} {2} |
| 141 |
| 142 #-------------------------------------------------------------------------- |
| 143 # |
| 144 reset_db |
| 145 do_execsql_test 9.0.0 { |
| 146 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 147 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 148 INSERT INTO t1 VALUES('a2 b2 c2'); |
| 149 INSERT INTO t1 VALUES('a1 b1 c1'); |
| 150 } |
| 151 do_execsql_test 9.0.1 { |
| 152 INSERT INTO t1(t1) VALUES('integrity-check'); |
| 153 } {} |
| 154 |
| 155 reset_db |
| 156 do_execsql_test 9.1.0 { |
| 157 CREATE VIRTUAL TABLE t1 USING fts5(a, b, detail=none); |
| 158 INSERT INTO t1 VALUES('a1 b1 c1', 'x y z'); |
| 159 INSERT INTO t1 VALUES('a2 b2 c2', '1 2 3'); |
| 160 INSERT INTO t1 VALUES('a1 b1 c1', 'x 2 z'); |
| 161 } |
| 162 do_execsql_test 9.2.1 { |
| 163 INSERT INTO t1(t1) VALUES('integrity-check'); |
| 164 } {} |
| 165 |
| 166 #-------------------------------------------------------------------------- |
| 167 # |
| 168 reset_db |
| 169 do_execsql_test 10.0 { |
| 170 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 171 INSERT INTO t1 VALUES('b1'); |
| 172 INSERT INTO t1 VALUES('b1'); |
| 173 DELETE FROM t1 WHERE rowid=1; |
| 174 } |
| 175 |
| 176 do_execsql_test 10.1 { |
| 177 SELECT rowid FROM t1('b1'); |
| 178 } {2} |
| 179 |
| 180 do_execsql_test 10.2 { |
| 181 SELECT rowid FROM t1('b1') ORDER BY rowid DESC; |
| 182 } {2} |
| 183 |
| 184 do_execsql_test 10.3 { |
| 185 INSERT INTO t1(t1) VALUES('integrity-check'); |
| 186 } {} |
| 187 |
| 188 #-------------------------------------------------------------------------- |
| 189 # |
| 190 reset_db |
| 191 do_execsql_test 11.1 { |
| 192 CREATE VIRTUAL TABLE t1 USING fts5(x, y, detail=none); |
| 193 INSERT INTO t1(t1, rank) VALUES('pgsz', 32); |
| 194 WITH d(x,y) AS ( |
| 195 SELECT NULL, 'xyz' UNION ALL SELECT NULL, 'xyz' FROM d |
| 196 ) |
| 197 INSERT INTO t1 SELECT * FROM d LIMIT 23; |
| 198 } |
| 199 |
| 200 #db eval { SELECT rowid AS r, quote(block) AS b FROM t1_data } { puts "$r: $b" } |
| 201 do_execsql_test 11.2 { |
| 202 SELECT rowid FROM t1; |
| 203 } {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} |
| 204 |
| 205 do_execsql_test 11.3 { |
| 206 SELECT rowid FROM t1('xyz'); |
| 207 } {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23} |
| 208 |
| 209 do_execsql_test 11.4 { |
| 210 INSERT INTO t1(t1) VALUES('integrity-check'); |
| 211 } |
| 212 |
| 213 #------------------------------------------------------------------------- |
| 214 # |
| 215 reset_db |
| 216 do_execsql_test 12.0 { |
| 217 CREATE VIRTUAL TABLE yy USING fts5(x, detail=none); |
| 218 INSERT INTO yy VALUES('in if'); |
| 219 INSERT INTO yy VALUES('if'); |
| 220 } {} |
| 221 |
| 222 do_execsql_test 12.1 { |
| 223 SELECT rowid FROM yy('i*'); |
| 224 } {1 2} |
| 225 |
| 226 #------------------------------------------------------------------------- |
| 227 # |
| 228 reset_db |
| 229 do_execsql_test 13.0 { |
| 230 CREATE VIRTUAL TABLE t1 USING fts5(a, prefix=1, detail=none); |
| 231 } {} |
| 232 foreach {rowid a} { |
| 233 0 {f} |
| 234 1 {u} |
| 235 2 {k} |
| 236 3 {a} |
| 237 4 {a} |
| 238 5 {u} |
| 239 6 {u} |
| 240 7 {u} |
| 241 8 {f} |
| 242 9 {f} |
| 243 10 {a} |
| 244 11 {p} |
| 245 12 {f} |
| 246 13 {u} |
| 247 14 {a} |
| 248 15 {a} |
| 249 } { |
| 250 do_execsql_test 13.1.$rowid { |
| 251 INSERT INTO t1(rowid, a) VALUES($rowid, $a); |
| 252 } |
| 253 } |
| 254 |
| 255 #------------------------------------------------------------------------- |
| 256 # |
| 257 reset_db |
| 258 fts5_aux_test_functions db |
| 259 do_execsql_test 14.0 { |
| 260 CREATE VIRTUAL TABLE t1 USING fts5(a, detail=none); |
| 261 INSERT INTO t1 VALUES('a b c d'); |
| 262 } {} |
| 263 |
| 264 do_execsql_test 14.1 { |
| 265 SELECT fts5_test_poslist(t1) FROM t1('b') ORDER BY rank; |
| 266 } {0.0.1} |
| 267 |
| 268 #------------------------------------------------------------------------- |
| 269 # |
| 270 reset_db |
| 271 do_execsql_test 15.1 { |
| 272 CREATE VIRTUAL TABLE t1 USING fts5(x, detail=none); |
| 273 BEGIN; |
| 274 INSERT INTO t1(rowid, x) VALUES(1, 'sqlite'); |
| 275 INSERT INTO t1(rowid, x) VALUES(2, 'sqlite'); |
| 276 COMMIT; |
| 277 } {} |
| 278 |
| 279 do_test 15.1 { |
| 280 execsql { INSERT INTO t1(t1) VALUES('integrity-check') } |
| 281 } {} |
| 282 |
| 283 do_test 15.2 { |
| 284 execsql { DELETE FROM t1 } |
| 285 } {} |
| 286 |
| 287 do_execsql_test 15.3.1 { |
| 288 SELECT rowid FROM t1('sqlite'); |
| 289 } {} |
| 290 |
| 291 do_execsql_test 15.3.2 { |
| 292 SELECT rowid FROM t1('sqlite') ORDER BY rowid DESC; |
| 293 } {} |
| 294 |
| 295 do_test 15.4 { |
| 296 execsql { INSERT INTO t1(t1) VALUES('integrity-check') } |
| 297 } {} |
| 298 |
| 299 #------------------------------------------------------------------------- |
| 300 # |
| 301 reset_db |
| 302 do_execsql_test 16.0 { |
| 303 CREATE VIRTUAL TABLE t2 USING fts5(x, detail=none); |
| 304 BEGIN; |
| 305 INSERT INTO t2(rowid, x) VALUES(1, 'a b c'); |
| 306 INSERT INTO t2(rowid, x) VALUES(456, 'a b c'); |
| 307 INSERT INTO t2(rowid, x) VALUES(1000, 'a b c'); |
| 308 COMMIT; |
| 309 UPDATE t2 SET x=x; |
| 310 } |
| 311 |
| 312 do_execsql_test 16.1 { |
| 313 INSERT INTO t2(t2) VALUES('integrity-check'); |
| 314 } {} |
| 315 |
| 316 do_execsql_test 16.2 { |
| 317 SELECT rowid FROM t2('b') ORDER BY rowid DESC |
| 318 } {1000 456 1} |
| 319 |
| 320 |
| 321 #------------------------------------------------------------------------- |
| 322 # |
| 323 reset_db |
| 324 do_execsql_test 16.0 { |
| 325 CREATE VIRTUAL TABLE t2 USING fts5(x, detail=none); |
| 326 BEGIN; |
| 327 INSERT INTO t2(rowid, x) VALUES(1, 'a b c'); |
| 328 INSERT INTO t2(rowid, x) VALUES(456, 'a b c'); |
| 329 INSERT INTO t2(rowid, x) VALUES(1000, 'a b c'); |
| 330 COMMIT; |
| 331 UPDATE t2 SET x=x; |
| 332 DELETE FROM t2; |
| 333 } |
| 334 |
| 335 #------------------------------------------------------------------------- |
| 336 # |
| 337 reset_db |
| 338 do_execsql_test 17.0 { |
| 339 CREATE VIRTUAL TABLE t2 USING fts5(x, y); |
| 340 BEGIN; |
| 341 INSERT INTO t2 VALUES('a aa aaa', 'b bb bbb'); |
| 342 INSERT INTO t2 VALUES('a aa aaa', 'b bb bbb'); |
| 343 INSERT INTO t2 VALUES('a aa aaa', 'b bb bbb'); |
| 344 COMMIT; |
| 345 } |
| 346 do_execsql_test 17.1 { SELECT * FROM t2('y:a*') WHERE rowid BETWEEN 10 AND 20 } |
| 347 do_execsql_test 17.2 { |
| 348 BEGIN; |
| 349 INSERT INTO t2 VALUES('a aa aaa', 'b bb bbb'); |
| 350 SELECT * FROM t2('y:a*') WHERE rowid BETWEEN 10 AND 20 ; |
| 351 } |
| 352 do_execsql_test 17.3 { |
| 353 COMMIT |
| 354 } |
| 355 |
| 356 reset_db |
| 357 do_execsql_test 17.4 { |
| 358 CREATE VIRTUAL TABLE t2 USING fts5(x, y); |
| 359 BEGIN; |
| 360 INSERT INTO t2 VALUES('a aa aaa', 'b bb bbb'); |
| 361 INSERT INTO t2 VALUES('a aa aaa', 'b bb bbb'); |
| 362 SELECT * FROM t2('y:a*') WHERE rowid>66; |
| 363 } |
| 364 do_execsql_test 17.5 { SELECT * FROM t2('x:b* OR y:a*') } |
| 365 do_execsql_test 17.5 { COMMIT ; SELECT * FROM t2('x:b* OR y:a*') } |
| 366 do_execsql_test 17.6 { |
| 367 SELECT * FROM t2('x:b* OR y:a*') WHERE rowid>55 |
| 368 } |
| 369 |
| 370 #db eval {SELECT rowid, fts5_decode_none(rowid, block) aS r FROM t2_data} {puts
$r} |
| 371 |
| 372 finish_test |
| 373 |
OLD | NEW |