Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a few compiler warnings and test failures. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | matchinfo |
Files: | files | file ages | folders |
SHA1: |
201233ee64400be431fde24daaee8a20 |
User & Date: | dan 2013-01-09 18:09:07.703 |
Context
2013-01-09
| ||
18:15 | Merge matchinfo branch with trunk. check-in: dbbce4e438 user: dan tags: trunk | |
18:09 | Fix a few compiler warnings and test failures. Leaf check-in: 201233ee64 user: dan tags: matchinfo | |
17:16 | Fixes for snippet function and tests. Add API to determine the number of tokens in an FTS query phrase. check-in: 0d5a640f1f user: dan tags: matchinfo | |
Changes
Changes to src/fts5.c.
︙ | ︙ | |||
1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 | ExprListItem *pItem = &pArgs->a[j]; if( pItem->zName ) break; nByte += sqlite4Strlen30(pItem->pExpr->u.zToken) + 1; } nByte += sizeof(char *) * (j-i); pFts->azTokenizer = (char **)sqlite4DbMallocZero(pParse->db, nByte); if( pFts->azTokenizer==0 ) return; pSpace = (char *)&pFts->azTokenizer[j-i]; for(j=i; j<pArgs->nExpr; j++){ ExprListItem *pItem = &pArgs->a[j]; if( pItem->zName && j>i ){ break; }else{ | > | 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 | ExprListItem *pItem = &pArgs->a[j]; if( pItem->zName ) break; nByte += sqlite4Strlen30(pItem->pExpr->u.zToken) + 1; } nByte += sizeof(char *) * (j-i); pFts->azTokenizer = (char **)sqlite4DbMallocZero(pParse->db, nByte); if( pFts->azTokenizer==0 ) return; pFts->nTokenizer = (j-i); pSpace = (char *)&pFts->azTokenizer[j-i]; for(j=i; j<pArgs->nExpr; j++){ ExprListItem *pItem = &pArgs->a[j]; if( pItem->zName && j>i ){ break; }else{ |
︙ | ︙ | |||
2252 2253 2254 2255 2256 2257 2258 | /* ** Open a cursor for each token in the expression. */ static int fts5OpenCursors(sqlite4 *db, Fts5Info *pInfo, Fts5Cursor *pCsr){ return fts5OpenExprCursors(db, pInfo, pCsr->pExpr->pRoot); } | | > | 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 | /* ** Open a cursor for each token in the expression. */ static int fts5OpenCursors(sqlite4 *db, Fts5Info *pInfo, Fts5Cursor *pCsr){ return fts5OpenExprCursors(db, pInfo, pCsr->pExpr->pRoot); } void sqlite4Fts5Close(Fts5Cursor *pCsr){ if( pCsr ){ sqlite4 *db = pCsr->db; if( pCsr->aMem ){ int i; for(i=0; i<pCsr->pInfo->nCol; i++){ sqlite4DbFree(db, pCsr->aMem[i].zMalloc); } sqlite4DbFree(db, pCsr->aMem); } |
︙ | ︙ | |||
2619 2620 2621 2622 2623 2624 2625 | if( rc==SQLITE4_OK ){ /* Open a KV cursor for each term in the expression. Set each cursor ** to point to the first entry in the range it will scan. */ rc = fts5OpenCursors(db, pInfo, pCsr); } if( rc!=SQLITE4_OK ){ | | | 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 | if( rc==SQLITE4_OK ){ /* Open a KV cursor for each term in the expression. Set each cursor ** to point to the first entry in the range it will scan. */ rc = fts5OpenCursors(db, pInfo, pCsr); } if( rc!=SQLITE4_OK ){ sqlite4Fts5Close(pCsr); pCsr = 0; }else{ rc = fts5ExprAdvance(db, pCsr->pExpr->pRoot, 1); } *ppCsr = pCsr; return rc; } |
︙ | ︙ |
Changes to src/sqliteInt.h.
︙ | ︙ | |||
3277 3278 3279 3280 3281 3282 3283 3284 3285 | void sqlite4Fts5FreeInfo(sqlite4 *db, Fts5Info *); void sqlite4Fts5CodeUpdate(Parse *, Index *pIdx, int iRegPk, int iRegData, int); void sqlite4Fts5CodeCksum(Parse *, Index *, int, int, int); void sqlite4Fts5CodeQuery(Parse *, Index *, int, int, int); int sqlite4Fts5Pk(Fts5Cursor *, int, KVByteArray **, KVSize *); int sqlite4Fts5Next(Fts5Cursor *pCsr); #endif /* _SQLITEINT_H_ */ | > > > > > > | 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 | void sqlite4Fts5FreeInfo(sqlite4 *db, Fts5Info *); void sqlite4Fts5CodeUpdate(Parse *, Index *pIdx, int iRegPk, int iRegData, int); void sqlite4Fts5CodeCksum(Parse *, Index *, int, int, int); void sqlite4Fts5CodeQuery(Parse *, Index *, int, int, int); int sqlite4Fts5Pk(Fts5Cursor *, int, KVByteArray **, KVSize *); int sqlite4Fts5Next(Fts5Cursor *pCsr); int sqlite4Fts5EntryCksum(sqlite4 *, Fts5Info *, Mem *, Mem *, i64 *); int sqlite4Fts5RowCksum(sqlite4 *, Fts5Info *, Mem *, Mem *, i64 *); int sqlite4Fts5Open(sqlite4*, Fts5Info*, const char*, int, Fts5Cursor**,char**); int sqlite4Fts5Valid(Fts5Cursor *); void sqlite4Fts5Close(Fts5Cursor *); #endif /* _SQLITEINT_H_ */ |
Changes to src/vdbeaux.c.
︙ | ︙ | |||
1496 1497 1498 1499 1500 1501 1502 | ** Close a VDBE cursor and release all the resources that cursor ** happens to hold. */ void sqlite4VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ if( pCx==0 ){ return; } | | | 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 | ** Close a VDBE cursor and release all the resources that cursor ** happens to hold. */ void sqlite4VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ if( pCx==0 ){ return; } sqlite4Fts5Close(pCx->pFts); if( pCx->pKVCur ){ sqlite4KVCursorClose(pCx->pKVCur); } if( pCx->pTmpKV ){ sqlite4KVStoreClose(pCx->pTmpKV); } #ifndef SQLITE4_OMIT_VIRTUALTABLE |
︙ | ︙ |
Changes to test/csr1.test.
︙ | ︙ | |||
73 74 75 76 77 78 79 | # tree to be flushed to disk, # populate_db_2 do_execsql_test 3.1 { BEGIN; INSERT INTO t1 VALUES(10, randstr(910, 910)); } | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | # tree to be flushed to disk, # populate_db_2 do_execsql_test 3.1 { BEGIN; INSERT INTO t1 VALUES(10, randstr(910, 910)); } do_test 3.2 { sqlite4_lsm_config db main autoflush } [expr 1*1024*1024] do_test 3.3 { sqlite4_lsm_config db main autoflush 4096 } 4096 do_test 3.4 { set res [list] db eval { SELECT a, length(b) AS l FROM t1 } { lappend res $a $l # The following commit will flush the in-memory tree to disk. |
︙ | ︙ |
Changes to test/fts5create.test.
︙ | ︙ | |||
70 71 72 73 74 75 76 77 78 79 80 81 | CREATE INDEX ft ON t2 USING fts5(tukenizer=simple); } {1 {unrecognized argument: "tukenizer"}} do_catchsql_test 2.3 { CREATE INDEX ft ON t2 USING fts5("a b c"); } {1 {unrecognized argument: "a b c"}} do_catchsql_test 2.4 { CREATE INDEX ft ON t2 USING fts5(tokenizer="nosuch"); } {1 {no such tokenizer: "nosuch"}} finish_test | > < | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | CREATE INDEX ft ON t2 USING fts5(tukenizer=simple); } {1 {unrecognized argument: "tukenizer"}} do_catchsql_test 2.3 { CREATE INDEX ft ON t2 USING fts5("a b c"); } {1 {unrecognized argument: "a b c"}} breakpoint do_catchsql_test 2.4 { CREATE INDEX ft ON t2 USING fts5(tokenizer="nosuch"); } {1 {no such tokenizer: "nosuch"}} finish_test |
Changes to test/fts5query1.test.
︙ | ︙ | |||
168 169 170 171 172 173 174 | do_execsql_test 10.2 { INSERT INTO ft VALUES('a b c d e'); INSERT INTO ft VALUES('f g h i j'); } do_execsql_test 10.3 { SELECT rowid FROM ft WHERE ft MATCH 'c' } {1} do_execsql_test 10.4 { SELECT rowid FROM ft WHERE ft MATCH 'f' } {2} | < | | 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | do_execsql_test 10.2 { INSERT INTO ft VALUES('a b c d e'); INSERT INTO ft VALUES('f g h i j'); } do_execsql_test 10.3 { SELECT rowid FROM ft WHERE ft MATCH 'c' } {1} do_execsql_test 10.4 { SELECT rowid FROM ft WHERE ft MATCH 'f' } {2} do_execsql_test 10.5 { DELETE FROM ft; CREATE TABLE ft2(a, b, c); CREATE INDEX fti2 ON ft2 USING fts5(); INSERT INTO ft2 VALUES('1 2 3 4 5', '6 7 8 9 10', '11 12 13 14 15'); SELECT snippet(ft2, '[', ']', '...', -1, 3) FROM ft2 WHERE ft2 MATCH '5'; } {{...3 4 [5]}} finish_test |
Changes to test/fts5snippet.test.
|
| | | < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # 2013 January 10 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #************************************************************************* # # The tests in this file test the FTS5 snippet() function. # set testdir [file dirname $argv0] source $testdir/tester.tcl # If SQLITE4_ENABLE_FTS3 is not defined, omit this file. source $testdir/fts3_common.tcl set DO_MALLOC_TEST 0 # Transform the list $L to its "normal" form. So that it can be compared to # another list with the same set of elements using [string compare]. # proc normalize {L} { set ret [list] |
︙ | ︙ | |||
124 125 126 127 128 129 130 | forcedelete test.db sqlite4 db test.db sqlite4_db_config_lookaside db 0 0 0 db eval "PRAGMA encoding = \"$enc\"" # Set variable $T to the test name prefix for this iteration of the loop. # | | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | forcedelete test.db sqlite4 db test.db sqlite4_db_config_lookaside db 0 0 0 db eval "PRAGMA encoding = \"$enc\"" # Set variable $T to the test name prefix for this iteration of the loop. # set T "fts5snippet-$enc" ########################################################################## # Test the snippet function. # proc do_snippet_test {name expr iCol nTok args} { set res [list] foreach a $args { lappend res [string trim $a] } |
︙ | ︙ | |||
288 289 290 291 292 293 294 | } execsql COMMIT } {} eval [list do_snippet_test $T.7.2 {one two} -1 3] $testresults } | < | 285 286 287 288 289 290 291 292 | } execsql COMMIT } {} eval [list do_snippet_test $T.7.2 {one two} -1 3] $testresults } finish_test |
Changes to test/permutations.test.
︙ | ︙ | |||
136 137 138 139 140 141 142 143 144 145 146 147 148 149 | simple.test simple2.test log3.test lsm1.test lsm2.test csr1.test ckpt1.test mc1.test fts5expr1.test fts5query1.test fts5rnd1.test fts5create.test aggerror.test attach.test autoindex1.test badutf.test between.test bigrow.test | > | 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | simple.test simple2.test log3.test lsm1.test lsm2.test csr1.test ckpt1.test mc1.test fts5expr1.test fts5query1.test fts5rnd1.test fts5create.test fts5snippet.test aggerror.test attach.test autoindex1.test badutf.test between.test bigrow.test |
︙ | ︙ |