Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Further tests to raise coverage of fts5 synonym code to 100%. Fix a dropped error code in the same. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | fts5-incompatible |
Files: | files | file ages | folders |
SHA1: |
bdedd838bb3028c586bcc9f643852ce1 |
User & Date: | dan 2015-09-02 19:48:55.424 |
Context
2015-09-03
| ||
10:27 | Fix a memory leak in fts5_expr.c. (check-in: 399932a181 user: dan tags: fts5-incompatible) | |
2015-09-02
| ||
19:48 | Further tests to raise coverage of fts5 synonym code to 100%. Fix a dropped error code in the same. (check-in: bdedd838bb user: dan tags: fts5-incompatible) | |
18:56 | Fix an issue with fts5 synonyms and NEAR(...) queries. (check-in: f2e590700d user: dan tags: fts5-incompatible) | |
Changes
Changes to ext/fts5/fts5_expr.c.
︙ | ︙ | |||
658 659 660 661 662 663 664 | int bEof = 1; Fts5ExprTerm *p; /* Find the firstest rowid any synonym points to. */ i64 iRowid = fts5ExprSynonymRowid(pTerm, pExpr->bDesc, 0); /* Advance each iterator that currently points to iRowid. Or, if iFrom | | | 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 | int bEof = 1; Fts5ExprTerm *p; /* Find the firstest rowid any synonym points to. */ i64 iRowid = fts5ExprSynonymRowid(pTerm, pExpr->bDesc, 0); /* Advance each iterator that currently points to iRowid. Or, if iFrom ** is valid - each iterator that points to a rowid before iFrom. */ for(p=pTerm; p; p=p->pSynonym){ if( sqlite3Fts5IterEof(p->pIter)==0 ){ i64 ii = sqlite3Fts5IterRowid(p->pIter); if( ii==iRowid || (bFromValid && ii!=iFrom && (ii>iFrom)==pExpr->bDesc) ){ if( bFromValid ){ |
︙ | ︙ |
Changes to ext/fts5/fts5_tokenize.c.
︙ | ︙ | |||
1225 1226 1227 1228 1229 1230 1231 | aBuiltin[i].zName, (void*)pApi, &aBuiltin[i].x, 0 ); } | | | 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 | aBuiltin[i].zName, (void*)pApi, &aBuiltin[i].x, 0 ); } return rc; } |
Changes to ext/fts5/test/fts5aa.test.
︙ | ︙ | |||
502 503 504 505 506 507 508 509 510 511 | do_execsql_test 18.2 { SELECT t1.rowid, t2.rowid FROM t1, t2 WHERE t2 MATCH t1.a AND t1.rowid = t2.c } {1 1} do_execsql_test 18.3 { SELECT t1.rowid, t2.rowid FROM t2, t1 WHERE t2 MATCH t1.a AND t1.rowid = t2.c } {1 1} finish_test | > > > > > > > > > > | 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 | do_execsql_test 18.2 { SELECT t1.rowid, t2.rowid FROM t1, t2 WHERE t2 MATCH t1.a AND t1.rowid = t2.c } {1 1} do_execsql_test 18.3 { SELECT t1.rowid, t2.rowid FROM t2, t1 WHERE t2 MATCH t1.a AND t1.rowid = t2.c } {1 1} #-------------------------------------------------------------------- # fts5 table in the temp schema. # reset_db do_execsql_test 19.0 { CREATE VIRTUAL TABLE temp.t1 USING fts5(x); INSERT INTO t1 VALUES('x y z'); INSERT INTO t1 VALUES('w x 1'); SELECT rowid FROM t1 WHERE t1 MATCH 'x'; } {1 2} finish_test |
Changes to ext/fts5/test/fts5fault6.test.
︙ | ︙ | |||
18 19 20 21 22 23 24 | # If SQLITE_ENABLE_FTS5 is defined, omit this file. ifcapable !fts5 { finish_test return } | < | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # If SQLITE_ENABLE_FTS5 is defined, omit this file. ifcapable !fts5 { finish_test return } #------------------------------------------------------------------------- # OOM while rebuilding an FTS5 table. # do_execsql_test 1.0 { CREATE VIRTUAL TABLE tt USING fts5(a, b); INSERT INTO tt VALUES('c d c g g f', 'a a a d g a'); |
︙ | ︙ | |||
146 147 148 149 150 151 152 | db eval { CREATE VIRTUAL TABLE yu USING fts5(x, tokenize="unicode61 separators abc"); } } -test { faultsim_test_result {0 {}} } | < < | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | db eval { CREATE VIRTUAL TABLE yu USING fts5(x, tokenize="unicode61 separators abc"); } } -test { faultsim_test_result {0 {}} } #------------------------------------------------------------------------- # # 5.2.* OOM while running a query that includes synonyms and matchinfo(). # # 5.3.* OOM while running a query that returns a row containing instances # of more than 4 synonyms for a single term. # |
︙ | ︙ | |||
220 221 222 223 224 225 226 227 228 229 230 231 232 233 | 43 {d dd fff fffff d f fff e dddd ee ee} 44 {ff ffff eee ddd d dd ffff dddd d eeee d eeeeee} 45 {eeee f eeeee ee e ffff f ddd e fff} 46 {ffff d ffff eeee ffff eeeee f ffff ddddd eee} 47 {dd dd dddddd ddddd fffff dddddd ddd ddddd eeeeee ffff eeee eee ee} 48 {ffff ffff e dddd ffffff dd dd dddd f fffff} 49 {ffffff d dddddd ffff eeeee f ffff ffff d dd fffff eeeee} } { execsql { INSERT INTO t1(rowid, a) VALUES($rowid, $text) } } } {} set res [list {*}{ 1 {3 24 8 2 12 6} | > > | 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | 43 {d dd fff fffff d f fff e dddd ee ee} 44 {ff ffff eee ddd d dd ffff dddd d eeee d eeeeee} 45 {eeee f eeeee ee e ffff f ddd e fff} 46 {ffff d ffff eeee ffff eeeee f ffff ddddd eee} 47 {dd dd dddddd ddddd fffff dddddd ddd ddddd eeeeee ffff eeee eee ee} 48 {ffff ffff e dddd ffffff dd dd dddd f fffff} 49 {ffffff d dddddd ffff eeeee f ffff ffff d dd fffff eeeee} 50 {x e} } { execsql { INSERT INTO t1(rowid, a) VALUES($rowid, $text) } } } {} set res [list {*}{ 1 {3 24 8 2 12 6} |
︙ | ︙ | |||
264 265 266 267 268 269 270 271 272 | db eval { SELECT count(*) FROM t1 WHERE t1 MATCH 'd AND e AND f' } } -test { faultsim_test_result {0 29} } finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > | 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | db eval { SELECT count(*) FROM t1 WHERE t1 MATCH 'd AND e AND f' } } -test { faultsim_test_result {0 29} } do_faultsim_test 5.4 -faults oom* -prep { faultsim_restore_and_reopen sqlite3_fts5_create_tokenizer db tcl tcl_create } -body { db eval { SELECT count(*) FROM t1 WHERE t1 MATCH 'x + e' } } -test { faultsim_test_result {0 1} } #------------------------------------------------------------------------- catch { db close } breakpoint do_faultsim_test 6 -faults oom* -prep { sqlite_orig db test.db sqlite3_db_config_lookaside db 0 0 0 } -body { load_static_extension db fts5 } -test { faultsim_test_result {0 {}} {1 {initialization of fts5 failed: }} if {$testrc==0} { db eval { CREATE VIRTUAL TABLE temp.t1 USING fts5(x) } } db close } finish_test |
Changes to ext/fts5/test/fts5synonym.test.
︙ | ︙ | |||
383 384 385 386 387 388 389 | } 4 {NEAR(q y, 20)} { 1 {[yyyy] vvvvv [qq] oo [yyyyyy] vvvv eee} {ffff uu r qq aaaa} 2 {ww oooooo bbbbb ssssss mm} {ffffff [yy] iiii rr s ccc [qqqqq]} } } { | | > > > > > > > > > > | 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 | } 4 {NEAR(q y, 20)} { 1 {[yyyy] vvvvv [qq] oo [yyyyyy] vvvv eee} {ffff uu r qq aaaa} 2 {ww oooooo bbbbb ssssss mm} {ffffff [yy] iiii rr s ccc [qqqqq]} } } { do_execsql_test 6.1.$tn.asc { SELECT rowid, highlight(t2, 0, '[', ']'), highlight(t2, 1, '[', ']') FROM t2 WHERE t2 MATCH $q } $res set res2 [list] foreach {rowid a b} $res { set res2 [concat [list $rowid $a $b] $res2] } do_execsql_test 6.1.$tn.desc { SELECT rowid, highlight(t2, 0, '[', ']'), highlight(t2, 1, '[', ']') FROM t2 WHERE t2 MATCH $q ORDER BY rowid DESC } $res2 } do_execsql_test 6.2.1 { INSERT INTO t2(rowid, a, b) VALUES(13, 'x xx xxx xxxx xxxxx xxxxxx xxxxxxx', 'y yy yyy yyyy yyyyy yyyyyy yyyyyyy' ); SELECT rowid, highlight(t2, 0, '<', '>'), highlight(t2, 1, '(', ')') |
︙ | ︙ |