OLD | NEW |
(Empty) | |
| 1 # 2014 June 17 |
| 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 FTS5 module. |
| 13 # |
| 14 # More specifically, the focus is on testing prefix queries, both with and |
| 15 # without prefix indexes. |
| 16 # |
| 17 |
| 18 source [file join [file dirname [info script]] fts5_common.tcl] |
| 19 set testprefix fts5ad |
| 20 |
| 21 # If SQLITE_ENABLE_FTS5 is defined, omit this file. |
| 22 ifcapable !fts5 { |
| 23 finish_test |
| 24 return |
| 25 } |
| 26 |
| 27 foreach_detail_mode $testprefix { |
| 28 |
| 29 do_execsql_test 1.0 { |
| 30 CREATE VIRTUAL TABLE yy USING fts5(x, y, detail=%DETAIL%); |
| 31 INSERT INTO yy VALUES('Changes the result to be', 'the list of all matching'); |
| 32 INSERT INTO yy VALUES('indices (or all matching', 'values if -inline is'); |
| 33 INSERT INTO yy VALUES('specified as well.) If', 'indices are returned, the'); |
| 34 } {} |
| 35 |
| 36 foreach {tn match res} { |
| 37 1 {c*} {1} |
| 38 2 {i*} {3 2} |
| 39 3 {t*} {3 1} |
| 40 4 {r*} {3 1} |
| 41 } { |
| 42 do_execsql_test 1.$tn { |
| 43 SELECT rowid FROM yy WHERE yy MATCH $match ORDER BY rowid DESC |
| 44 } $res |
| 45 } |
| 46 |
| 47 foreach {tn match res} { |
| 48 5 {c*} {1} |
| 49 6 {i*} {2 3} |
| 50 7 {t*} {1 3} |
| 51 8 {r*} {1 3} |
| 52 } { |
| 53 do_execsql_test 1.$tn { |
| 54 SELECT rowid FROM yy WHERE yy MATCH $match |
| 55 } $res |
| 56 } |
| 57 |
| 58 foreach {T create} { |
| 59 2 { |
| 60 CREATE VIRTUAL TABLE t1 USING fts5(a, b, detail=%DETAIL%); |
| 61 INSERT INTO t1(t1, rank) VALUES('pgsz', 32); |
| 62 } |
| 63 |
| 64 3 { |
| 65 CREATE VIRTUAL TABLE t1 USING fts5(a, b, prefix="1,2,3,4", detail=%DETAIL%); |
| 66 INSERT INTO t1(t1, rank) VALUES('pgsz', 32); |
| 67 } |
| 68 |
| 69 4 { |
| 70 CREATE VIRTUAL TABLE t1 USING fts5(a, b, detail=%DETAIL%); |
| 71 INSERT INTO t1(t1, rank) VALUES('pgsz', 32); |
| 72 BEGIN; |
| 73 } |
| 74 |
| 75 5 { |
| 76 CREATE VIRTUAL TABLE t1 USING fts5(a, b, prefix="1,2,3,4", detail=%DETAIL%); |
| 77 INSERT INTO t1(t1, rank) VALUES('pgsz', 32); |
| 78 BEGIN; |
| 79 } |
| 80 |
| 81 } { |
| 82 |
| 83 do_test $T.1 { |
| 84 execsql { DROP TABLE IF EXISTS t1 } |
| 85 execsql $create |
| 86 } {} |
| 87 |
| 88 do_test $T.1 { |
| 89 foreach {rowid a b} { |
| 90 0 {fghij uvwxyz klmn pq uvwx} {klmn f fgh uv fghij klmno} |
| 91 1 {uv f abcd abcd fghi} {pq klm uv uv fgh uv a} |
| 92 2 {klmn klm pqrs fghij uv} {f k uvw ab abcd pqr uv} |
| 93 3 {ab pqrst a fghi ab pqr fg} {k klmno a fg abcd} |
| 94 4 {abcd pqrst uvwx a fgh} {f klmno fghij kl pqrst} |
| 95 5 {uvwxyz k abcde u a} {uv k k kl klmn} |
| 96 6 {uvwxyz k klmn pqrst uv} {fghi pqrs abcde u k} |
| 97 7 {uvwxy klmn u p pqrst fgh} {p f fghi abcd uvw kl uv} |
| 98 8 {f klmno pqrst uvwxy pqrst} {uv abcde klm pq pqr} |
| 99 9 {f abcde a uvwxyz pqrst} {fghij abc k uvwx pqr fghij uvwxy} |
| 100 10 {ab uv f fg pqrst uvwxy} {fgh p uv k abc klm uvw} |
| 101 11 {pq klmno a uvw abcde uvwxyz} {fghij pq uvwxyz pqr fghi} |
| 102 12 {fgh u pq fgh uvw} {uvw pqr f uvwxy uvwx} |
| 103 13 {uvwx klmn f fgh abcd pqr} {uvw k fg uv klm abcd} |
| 104 14 {ab uvwx pqrst pqr uvwxyz pqrs} {uvwxyz abcde ab ab uvw abcde} |
| 105 15 {abc abcde uvwxyz abc kl k pqr} {klm k k klmno u fgh} |
| 106 16 {fghi abcd fghij uv uvwxyz ab uv} {klmn pqr a uvw fghi} |
| 107 17 {abc pqrst fghi uvwx uvw klmn fghi} {ab fg pqr pqrs p} |
| 108 18 {pqr kl a fghij fgh fg kl} {pqr uvwxyz uvw abcd uvwxyz} |
| 109 19 {fghi fghi pqr kl fghi f} {klmn u u klmno klmno} |
| 110 20 {abc pqrst klmno kl pq uvwxy} {abc k fghi pqrs klm} |
| 111 21 {a pqr uvwxyz uv fghi a fgh} {abc pqrs pqrst pq klm} |
| 112 22 {klm abc uvwxyz klm pqrst} {fghij k pq pqr u klm fghij} |
| 113 23 {p klm uv p a a} {uvwxy klmn uvw abcde pq} |
| 114 24 {uv fgh fg pq uvwxy u uvwxy} {pqrs a uvw p uvwx uvwxyz fg} |
| 115 25 {fghij fghi klmn abcd pq kl} {fghi abcde pqrs abcd fgh uvwxy} |
| 116 26 {pq fgh a abc klmno klmn} {fgh p k p fg fghij} |
| 117 27 {fg pq kl uvwx fghij pqrst klmn} {abcd uvw abcd fghij f fghij} |
| 118 28 {uvw fghi p fghij pq fgh uvwx} {k fghij abcd uvwx pqr fghi} |
| 119 29 {klm pq abcd pq f uvwxy} {pqrst p fghij pqr p} |
| 120 30 {ab uvwx fg uvwx klmn klm} {klmn klmno fghij klmn klm} |
| 121 31 {pq k pqr abcd a pqrs} {abcd abcd uvw a abcd klmno ab} |
| 122 32 {pqrst u abc pq klm} {abc kl uvwxyz fghij u fghi p} |
| 123 33 {f uvwxy u k f uvw uvwx} {pqrs uvw fghi fg pqrst klm} |
| 124 34 {pqrs pq fghij uvwxyz pqr} {ab abc abc uvw f pq f} |
| 125 35 {uvwxy ab uvwxy klmno kl pqrs} {abcde uvw pqrs uvwx k k} |
| 126 36 {uvwxyz k ab abcde abc uvw} {uvw abcde uvw klmn uv klmn} |
| 127 37 {k kl uv abcde uvwx fg u} {u abc uvwxy k fg abcd} |
| 128 38 {fghi pqrst fghi pqr pqrst uvwx} {u uv uvwx fghi abcde} |
| 129 39 {k pqrst k uvw fg pqrst fghij} {uvwxy ab kl klmn uvwxyz abcde} |
| 130 40 {fg uvwxy pqrs klmn uvwxyz klm p} {k uv ab fghij fgh k pqrs} |
| 131 41 {uvwx abc f pq uvwxy k} {ab uvwxyz abc f fghij} |
| 132 42 {uvwxy klmno uvwxyz uvwxyz pqrst} {uv kl kl klmno k f abcde} |
| 133 43 {abcde ab pqrs fg f fgh} {abc fghij fghi k k} |
| 134 44 {uvw abcd a ab pqrst klmn fg} {pqrst u uvwx pqrst fghij f pqrst} |
| 135 45 {uvwxy p kl uvwxyz ab pqrst fghi} {abc f pqr fg a k} |
| 136 46 {u p f a fgh} {a kl pq uv f} |
| 137 47 {pqrs abc fghij fg abcde ab a} {p ab uv pqrs kl fghi abcd} |
| 138 48 {abcde uvwxy pqrst uv abc pqr uvwx} {uvwxy klm uvwxy uvwx k} |
| 139 49 {fgh klm abcde klmno u} {a f fghij f uvwxyz abc u} |
| 140 50 {uv uvw uvwxyz uvwxyz uv ab} {uvwx pq fg u k uvwxy} |
| 141 51 {uvwxy pq p kl fghi} {pqrs fghi pqrs abcde uvwxyz ab} |
| 142 52 {pqr p uvwxy kl pqrs klmno fghij} {ab abcde abc pqrst pqrs uv} |
| 143 53 {fgh pqrst p a klmno} {ab ab pqrst pqr kl pqrst} |
| 144 54 {abcd klm ab uvw a fg u} {f pqr f abcd uv} |
| 145 55 {u fg uvwxyz k uvw} {abc pqrs f fghij fg pqrs uvwxy} |
| 146 56 {klm fg p fghi fg a} {uv a fghi uvwxyz a fghi} |
| 147 57 {uvwxy k abcde fgh f fghi} {f kl klmn f fghi klm} |
| 148 58 {klm k fgh uvw fgh fghi} {klmno uvwx u pqrst u} |
| 149 59 {fghi pqr pqrst p uvw fghij} {uv pqrst pqrs pq fghij klm} |
| 150 60 {uvwx klm uvwxy uv klmn} {p a a abc klmn ab k} |
| 151 61 {uvwxy uvwx klm uvwx klm} {pqrs ab ab uvwxyz fg} |
| 152 62 {kl uv uv uvw fg kl k} {abcde uvw fgh uvwxy klm} |
| 153 63 {a abc fgh u klm abcd} {fgh pqr uv klmn fghij} |
| 154 64 {klmn k klmn klmno pqrs pqr} {fg kl abcde klmno uvwxy kl pq} |
| 155 65 {uvwxyz klm fghi abc abcde kl} {uvwxy uvw uvwxyz uvwxyz pq pqrst} |
| 156 66 {pq klm abc pqrst fgh f} {u abcde pqrst abcde fg} |
| 157 67 {u pqrst kl u uvw klmno} {u pqr pqrs fgh u p} |
| 158 68 {abc fghi uvwxy fgh k pq} {uv p uvwx uvwxyz ab} |
| 159 69 {klmno f uvwxyz uvwxy klmn fg ab} {fgh kl a pqr abcd pqr} |
| 160 70 {fghi pqrst pqrst uv a} {uvwxy k p uvw uvwx a} |
| 161 71 {a fghij f p uvw} {klm fg abcd abcde klmno pqrs} |
| 162 72 {uv uvwx uvwx uvw klm} {uv fghi klmno uvwxy uvw} |
| 163 73 {kl uvwxy ab f pq klm u} {uvwxy klmn klm abcd pq fg k} |
| 164 74 {uvw pqrst abcd uvwxyz ab} {fgh fgh klmn abc pq} |
| 165 75 {uvwxyz klm pq abcd klmno pqr uvwxyz} {kl f a fg pqr klmn} |
| 166 76 {uvw uvwxy pqr k pqrst kl} {uvwxy abc uvw uvw u} |
| 167 77 {fgh klm u uvwxyz f uvwxy abcde} {uv abcde klmno u u ab} |
| 168 78 {klmno abc pq pqr fgh} {p uv abcd fgh abc u k} |
| 169 79 {fg pqr uvw pq uvwx} {uv uvw fghij pqrs fg p} |
| 170 80 {abcd pqrs uvwx uvwxy uvwx} {u uvw pqrst pqr abcde pqrs kl} |
| 171 81 {uvwxyz klm pq uvwxy fghij} {p pq klm fghij u a a} |
| 172 82 {uvwx k uvwxyz klmno pqrst kl} {abcde p f pqrst abcd uvwxyz p} |
| 173 83 {abcd abcde klm pqrst uvwxyz} {uvw pqrst u p uvwxyz a pqrs} |
| 174 84 {k klm abc uv uvwxy klm klmn} {k abc pqr a abc p kl} |
| 175 85 {klmn abcd pqrs p pq klm a} {klmn kl ab uvw pq} |
| 176 86 {klmn a pqrs abc uvw pqrst} {a pqr kl klm a k f} |
| 177 87 {pqrs ab uvwx uvwxy a pqr f} {fg klm uvwx pqr pqr} |
| 178 88 {klmno ab k kl u uvwxyz} {uv kl uvw fghi uv uvw} |
| 179 89 {pq fghi pqrst klmn uvwxy abc pqrs} {fg f f fg abc abcde klm} |
| 180 90 {kl a k fghi uvwx fghi u} {ab uvw pqr fg a p abc} |
| 181 91 {uvwx pqrs klmno ab fgh uvwx} {pqr uvwx abc kl f klmno kl} |
| 182 92 {fghij pq pqrs fghij f pqrst} {u abcde fg pq pqr fgh k} |
| 183 93 {fgh u pqrs abcde klmno abc} {abc fg pqrst pqr abcde} |
| 184 94 {uvwx p abc f pqr p} {k pqrs kl klm abc fghi klm} |
| 185 95 {kl p klmno uvwxyz klmn} {fghi ab a fghi pqrs kl} |
| 186 96 {pqr fgh pq uvwx a} {uvw klm klmno fg uvwxy uvwx} |
| 187 97 {fg abc uvwxyz fghi pqrst pq} {abc k a ab abcde f} |
| 188 98 {uvwxy fghi uvwxy u abcde abcde uvw} {klmn uvwx pqrs uvw uvwxy abcde} |
| 189 99 {pq fg fghi uvwx uvwx fghij uvwxy} {klmn klmn f abc fg a} |
| 190 } { |
| 191 execsql { |
| 192 INSERT INTO t1(rowid, a, b) VALUES($rowid, $a, $b); |
| 193 } |
| 194 } |
| 195 } {} |
| 196 |
| 197 proc prefix_query {prefixlist} { |
| 198 set ret [list] |
| 199 db eval {SELECT rowid, a, b FROM t1 ORDER BY rowid DESC} { |
| 200 set bMatch 1 |
| 201 foreach pref $prefixlist { |
| 202 if { [lsearch -glob $a $pref]<0 && [lsearch -glob $b $pref]<0 } { |
| 203 set bMatch 0 |
| 204 break |
| 205 } |
| 206 } |
| 207 if {$bMatch} { lappend ret $rowid } |
| 208 } |
| 209 return $ret |
| 210 } |
| 211 |
| 212 do_execsql_test $T.integrity { |
| 213 INSERT INTO t1(t1) VALUES('integrity-check'); |
| 214 } |
| 215 |
| 216 foreach {bAsc sql} { |
| 217 1 {SELECT rowid FROM t1 WHERE t1 MATCH $prefix} |
| 218 0 {SELECT rowid FROM t1 WHERE t1 MATCH $prefix ORDER BY rowid DESC} |
| 219 } { |
| 220 foreach {tn prefix} { |
| 221 1 {a*} 2 {ab*} 3 {abc*} 4 {abcd*} 5 {abcde*} |
| 222 6 {f*} 7 {fg*} 8 {fgh*} 9 {fghi*} 10 {fghij*} |
| 223 11 {k*} 12 {kl*} 13 {klm*} 14 {klmn*} 15 {klmno*} |
| 224 16 {p*} 17 {pq*} 18 {pqr*} 19 {pqrs*} 20 {pqrst*} |
| 225 21 {u*} 22 {uv*} 23 {uvw*} 24 {uvwx*} 25 {uvwxy*} 26 {uvwxyz*} |
| 226 27 {x*} |
| 227 28 {a f*} 29 {a* f*} 30 {a* fghij*} |
| 228 } { |
| 229 set res [prefix_query $prefix] |
| 230 if {$bAsc} { |
| 231 set res [lsort -integer -increasing $res] |
| 232 } |
| 233 set n [llength $res] |
| 234 if {$T==5} breakpoint |
| 235 do_execsql_test $T.$bAsc.$tn.$n $sql $res |
| 236 } |
| 237 } |
| 238 |
| 239 catchsql COMMIT |
| 240 } |
| 241 |
| 242 } |
| 243 |
| 244 finish_test |
| 245 |
OLD | NEW |