Improve test coverage of fts3.c.
FossilOrigin-Name: 0f439944ab49a5691615bc170fdcf652055573df
This commit is contained in:
parent
cc5b81464a
commit
49fc336438
@ -1151,7 +1151,7 @@ static int fts3InitVtab(
|
||||
|
||||
case 4: /* ORDER */
|
||||
if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3))
|
||||
&& (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 3))
|
||||
&& (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4))
|
||||
){
|
||||
*pzErr = sqlite3_mprintf("unrecognized order: %s", zVal);
|
||||
rc = SQLITE_ERROR;
|
||||
@ -1159,7 +1159,8 @@ static int fts3InitVtab(
|
||||
bDescIdx = (zVal[0]=='d' || zVal[0]=='D');
|
||||
break;
|
||||
|
||||
case 5: /* CONTENT */
|
||||
default: /* CONTENT */
|
||||
assert( iOpt==5 );
|
||||
sqlite3_free(zUncompress);
|
||||
zContent = zVal;
|
||||
zVal = 0;
|
||||
@ -1928,7 +1929,7 @@ static int fts3PoslistPhraseMerge(
|
||||
char **pp1, /* IN/OUT: Left input list */
|
||||
char **pp2 /* IN/OUT: Right input list */
|
||||
){
|
||||
char *p = (pp ? *pp : 0);
|
||||
char *p = *pp;
|
||||
char *p1 = *pp1;
|
||||
char *p2 = *pp2;
|
||||
int iCol1 = 0;
|
||||
@ -1954,7 +1955,7 @@ static int fts3PoslistPhraseMerge(
|
||||
sqlite3_int64 iPos1 = 0;
|
||||
sqlite3_int64 iPos2 = 0;
|
||||
|
||||
if( pp && iCol1 ){
|
||||
if( iCol1 ){
|
||||
*p++ = POS_COLUMN;
|
||||
p += sqlite3Fts3PutVarint(p, iCol1);
|
||||
}
|
||||
@ -1969,13 +1970,6 @@ static int fts3PoslistPhraseMerge(
|
||||
|| (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken)
|
||||
){
|
||||
sqlite3_int64 iSave;
|
||||
if( !pp ){
|
||||
fts3PoslistCopy(0, &p2);
|
||||
fts3PoslistCopy(0, &p1);
|
||||
*pp1 = p1;
|
||||
*pp2 = p2;
|
||||
return 1;
|
||||
}
|
||||
iSave = isSaveLeft ? iPos1 : iPos2;
|
||||
fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2;
|
||||
pSave = 0;
|
||||
@ -2027,7 +2021,7 @@ static int fts3PoslistPhraseMerge(
|
||||
fts3PoslistCopy(0, &p1);
|
||||
*pp1 = p1;
|
||||
*pp2 = p2;
|
||||
if( !pp || *pp==p ){
|
||||
if( *pp==p ){
|
||||
return 0;
|
||||
}
|
||||
*p++ = 0x00;
|
||||
@ -3216,10 +3210,14 @@ static int fts3RenameMethod(
|
||||
sqlite3 *db = p->db; /* Database connection */
|
||||
int rc; /* Return Code */
|
||||
|
||||
/* As it happens, the pending terms table is always empty here. This is
|
||||
** because an "ALTER TABLE RENAME TABLE" statement inside a transaction
|
||||
** always opens a savepoint transaction. And the xSavepoint() method
|
||||
** flushes the pending terms table. But leave the (no-op) call to
|
||||
** PendingTermsFlush() in in case that changes.
|
||||
*/
|
||||
assert( p->nPendingData==0 );
|
||||
rc = sqlite3Fts3PendingTermsFlush(p);
|
||||
if( rc!=SQLITE_OK ){
|
||||
return rc;
|
||||
}
|
||||
|
||||
if( p->zContentTbl==0 ){
|
||||
fts3DbExec(&rc, db,
|
||||
@ -3586,21 +3584,20 @@ static int fts3EvalPhraseLoad(
|
||||
*/
|
||||
static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
|
||||
int iToken; /* Used to iterate through phrase tokens */
|
||||
int rc = SQLITE_OK; /* Return code */
|
||||
char *aPoslist = 0; /* Position list for deferred tokens */
|
||||
int nPoslist = 0; /* Number of bytes in aPoslist */
|
||||
int iPrev = -1; /* Token number of previous deferred token */
|
||||
|
||||
assert( pPhrase->doclist.bFreeList==0 );
|
||||
|
||||
for(iToken=0; rc==SQLITE_OK && iToken<pPhrase->nToken; iToken++){
|
||||
for(iToken=0; iToken<pPhrase->nToken; iToken++){
|
||||
Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
|
||||
Fts3DeferredToken *pDeferred = pToken->pDeferred;
|
||||
|
||||
if( pDeferred ){
|
||||
char *pList;
|
||||
int nList;
|
||||
rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
|
||||
int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
|
||||
if( rc!=SQLITE_OK ) return rc;
|
||||
|
||||
if( pList==0 ){
|
||||
@ -3930,7 +3927,7 @@ static void fts3EvalTokenCosts(
|
||||
Fts3Expr ***ppOr, /* Write new OR root to *(*ppOr)++ */
|
||||
int *pRc /* IN/OUT: Error code */
|
||||
){
|
||||
if( *pRc==SQLITE_OK && pExpr ){
|
||||
if( *pRc==SQLITE_OK ){
|
||||
if( pExpr->eType==FTSQUERY_PHRASE ){
|
||||
Fts3Phrase *pPhrase = pExpr->pPhrase;
|
||||
int i;
|
||||
@ -3944,6 +3941,11 @@ static void fts3EvalTokenCosts(
|
||||
*pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl);
|
||||
}
|
||||
}else if( pExpr->eType!=FTSQUERY_NOT ){
|
||||
assert( pExpr->eType==FTSQUERY_OR
|
||||
|| pExpr->eType==FTSQUERY_AND
|
||||
|| pExpr->eType==FTSQUERY_NEAR
|
||||
);
|
||||
assert( pExpr->pLeft && pExpr->pRight );
|
||||
if( pExpr->eType==FTSQUERY_OR ){
|
||||
pRoot = pExpr->pLeft;
|
||||
**ppOr = pRoot;
|
||||
|
24
manifest
24
manifest
@ -1,5 +1,5 @@
|
||||
C Add\stests\sto\scheck\sthat\smodifying\sthe\sschema\sof\san\sFTS\scontent\stable\sdoes\snot\scause\sa\scrash\sin\sthe\sFTS\smodule.\sAlso\sdisable\sthe\sdeferred\stoken\soptimization\sfor\scontent=xxx\sFTS\stables.
|
||||
D 2011-10-04T16:37:35.422
|
||||
C Improve\stest\scoverage\sof\sfts3.c.
|
||||
D 2011-10-04T19:41:50.550
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in a162fe39e249b8ed4a65ee947c30152786cfe897
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
@ -62,7 +62,7 @@ F ext/fts2/mkfts2amal.tcl 974d5d438cb3f7c4a652639262f82418c1e4cff0
|
||||
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
|
||||
F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9
|
||||
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
|
||||
F ext/fts3/fts3.c df149056426597b32b2b8488eefbc755258f55d7
|
||||
F ext/fts3/fts3.c 6d6f3d331ed785d2e68608443eff66448ea95354
|
||||
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
|
||||
F ext/fts3/fts3Int.h 06f442ce096e6254432a6b16a56b6fe7b24bd372
|
||||
F ext/fts3/fts3_aux.c 0ebfa7b86cf8ff6a0861605fcc63b83ec1b70691
|
||||
@ -457,7 +457,7 @@ F test/fts3ak.test bd14deafe9d1586e8e9bf032411026ac4f8c925d
|
||||
F test/fts3al.test 07d64326e79bbdbab20ee87fc3328fbf01641c9f
|
||||
F test/fts3am.test 218aa6ba0dfc50c7c16b2022aac5c6be593d08d8
|
||||
F test/fts3an.test a49ccadc07a2f7d646ec1b81bc09da2d85a85b18
|
||||
F test/fts3ao.test 60a15590d3c8578e943e4a149524b16b9bc1be92
|
||||
F test/fts3ao.test e7b80272efcced57d1d087a9da5c690dd7c21fd9
|
||||
F test/fts3atoken.test 402ef2f7c2fb4b3d4fa0587df6441c1447e799b3
|
||||
F test/fts3auto.test c1a30b37002b7c764a96937fbc71065b73d69494
|
||||
F test/fts3aux1.test 0b02743955d56fc0d4d66236a26177bd1b726de0
|
||||
@ -475,16 +475,16 @@ F test/fts3e.test 1f6c6ac9cc8b772ca256e6b22aaeed50c9350851
|
||||
F test/fts3expr.test 5e745b2b6348499d9ef8d59015de3182072c564c
|
||||
F test/fts3expr2.test 18da930352e5693eaa163a3eacf96233b7290d1a
|
||||
F test/fts3fault.test f83e556465bb69dc8bc676339eca408dce4ca246
|
||||
F test/fts3fault2.test dc96203af6ba31ce20163fc35460e1556e8edf4d
|
||||
F test/fts3malloc.test 9c8cc3f885bb4dfc66d0460c52f68f45e4710d1b
|
||||
F test/fts3matchinfo.test 08a82d18cc08abb28aec41d412b4c2ef25ba6a5f
|
||||
F test/fts3fault2.test 253f9b336043ab7d0393d1b97a9f4ed21190331a
|
||||
F test/fts3malloc.test b86ea33db9e8c58c0c2f8027a9fcadaf6a1568be
|
||||
F test/fts3matchinfo.test 6507fe1c342e542300d65ea637d4110eccf894e6
|
||||
F test/fts3near.test 2e318ee434d32babd27c167142e2b94ddbab4844
|
||||
F test/fts3prefix.test 36246609111ec1683f7ea5ed27666ce2cefb5676
|
||||
F test/fts3prefix.test b36d4f00b128a51e7b386cc013a874246d9d7dc1
|
||||
F test/fts3query.test ef79d31fdb355d094baec1c1b24b60439a1fb8a2
|
||||
F test/fts3rnd.test 1320d8826a845e38a96e769562bf83d7a92a15d0
|
||||
F test/fts3shared.test 8bb266521d7c5495c0ae522bb4d376ad5387d4a2
|
||||
F test/fts3snippet.test 8e956051221a34c7daeb504f023cb54d5fa5a8b2
|
||||
F test/fts3sort.test 9a5176c9317bb545ec5f144d62e6fedb4da6c66e
|
||||
F test/fts3sort.test 95be0b19d7e41c44b29014f13ea8bddd495fd659
|
||||
F test/fts4aa.test 6e7f90420b837b2c685f3bcbe84c868492d40a68
|
||||
F test/fts4content.test 5c226c7c666e250c175bcbdfbdd4be3f275c73ba
|
||||
F test/func.test 6c5ce11e3a0021ca3c0649234e2d4454c89110ca
|
||||
@ -966,7 +966,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5
|
||||
F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
|
||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||
F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2
|
||||
P 1d27ea741f61c624e18bdc6a3b1c2d8574a64ddc
|
||||
R da82d432e1ef8526b881f10f91640d66
|
||||
P be86c7061b68f403730bf63ea1f7dc0d9ceb0a3b
|
||||
R 5a9454f18e2824c0a4b3f3725eccae4e
|
||||
U dan
|
||||
Z d642325dd5adee7274f24ac6f8449504
|
||||
Z e08086009c7ea460be359636e4d09cb8
|
||||
|
@ -1 +1 @@
|
||||
be86c7061b68f403730bf63ea1f7dc0d9ceb0a3b
|
||||
0f439944ab49a5691615bc170fdcf652055573df
|
@ -200,6 +200,9 @@ do_test fts3ao-4.7 {
|
||||
SELECT * FROM t5;
|
||||
}
|
||||
} {{the quick brown fox} {jumped over the} {lazy dog}}
|
||||
do_execsql_test fts3ao-4.8 {
|
||||
SELECT snippet(t5, '[', ']') FROM t5 WHERE t5 MATCH 'the'
|
||||
} {{[the] quick brown fox} {jumped over [the]}}
|
||||
|
||||
# Test that it is possible to rename an FTS4 table. Renaming an FTS4 table
|
||||
# involves renaming the extra %_docsize and %_stat tables.
|
||||
|
@ -82,4 +82,27 @@ do_faultsim_test 2.1 -prep {
|
||||
faultsim_test_result {0 {a * 1 1 a 0 1 1 b * 1 1 b 0 1 1 c * 1 1 c 0 1 1 x * 1 1 x 1 1 1 y * 1 1 y 1 1 1 z * 1 1 z 1 1 1}}
|
||||
}
|
||||
|
||||
do_faultsim_test 3.0 -faults oom* -prep {
|
||||
faultsim_delete_and_reopen
|
||||
db eval { CREATE TABLE 'xx yy'(a, b); }
|
||||
} -body {
|
||||
execsql {
|
||||
CREATE VIRTUAL TABLE tt USING fts4(content="xx yy");
|
||||
}
|
||||
} -test {
|
||||
faultsim_test_result {0 {}}
|
||||
}
|
||||
|
||||
do_faultsim_test 3.1 -faults oom* -prep {
|
||||
faultsim_delete_and_reopen
|
||||
db func zip zip
|
||||
db func unzip unzip
|
||||
} -body {
|
||||
execsql {
|
||||
CREATE VIRTUAL TABLE tt USING fts4(compress=zip, uncompress=unzip);
|
||||
}
|
||||
} -test {
|
||||
faultsim_test_result {0 {}}
|
||||
}
|
||||
|
||||
finish_test
|
||||
|
@ -294,6 +294,7 @@ do_write_test fts3_malloc-5.1 ft_content {
|
||||
do_test fts3_malloc-5.2 {
|
||||
execsql { CREATE VIRTUAL TABLE ft8 USING fts3(x, tokenize porter) }
|
||||
} {}
|
||||
|
||||
do_write_test fts3_malloc-5.3 ft_content {
|
||||
INSERT INTO ft8 VALUES('short alongertoken reallyquitealotlongerimeanit andthistokenisjustsolongthatonemightbeforgivenforimaginingthatitwasmerelyacontrivedexampleandnotarealtoken')
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ source $testdir/tester.tcl
|
||||
ifcapable !fts3 { finish_test ; return }
|
||||
|
||||
set testprefix fts3matchinfo
|
||||
set sqlite_fts3_enable_parentheses 0
|
||||
|
||||
proc mit {blob} {
|
||||
set scan(littleEndian) i*
|
||||
@ -57,6 +58,9 @@ do_catchsql_test 2.0 {
|
||||
do_catchsql_test 2.1 {
|
||||
CREATE VIRTUAL TABLE x2 USING fts4(mtchinfo=fts3);
|
||||
} {1 {unrecognized parameter: mtchinfo=fts3}}
|
||||
do_catchsql_test 2.2 {
|
||||
CREATE VIRTUAL TABLE x2 USING fts4(matchinfo=fts5);
|
||||
} {1 {unrecognized matchinfo: fts5}}
|
||||
|
||||
# Check that with fts3, the "=" character is permitted in column definitions.
|
||||
#
|
||||
@ -224,6 +228,18 @@ do_matchinfo_test 4.1.3 t4 {t4 MATCH 'a b'} { s {{2 0} {0 2}} }
|
||||
do_matchinfo_test 4.1.4 t4 {t4 MATCH '"a b" c'} { s {{2 0} {0 2}} }
|
||||
do_matchinfo_test 4.1.5 t4 {t4 MATCH 'a "b c"'} { s {{2 0} {0 2}} }
|
||||
do_matchinfo_test 4.1.6 t4 {t4 MATCH 'd d'} { s {{1 0} {0 1}} }
|
||||
do_matchinfo_test 4.1.7 t4 {t4 MATCH 'f OR abcd'} {
|
||||
x {
|
||||
{0 1 1 1 1 1 0 0 0 0 0 0}
|
||||
{1 1 1 0 1 1 0 0 0 0 0 0}
|
||||
}
|
||||
}
|
||||
do_matchinfo_test 4.1.8 t4 {t4 MATCH 'f -abcd'} {
|
||||
x {
|
||||
{0 1 1 1 1 1}
|
||||
{1 1 1 0 1 1}
|
||||
}
|
||||
}
|
||||
|
||||
do_execsql_test 4.2.0 {
|
||||
CREATE VIRTUAL TABLE t5 USING fts4;
|
||||
|
@ -200,4 +200,14 @@ do_execsql_test 4.6 {
|
||||
SELECT * FROM t3 WHERE t3 MATCH 'one*'
|
||||
} {{one two three}}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Syntax tests.
|
||||
#
|
||||
do_catchsql_test 5.1 {
|
||||
CREATE VIRTUAL TABLE t4 USING fts4(prefix="abc");
|
||||
} {1 {error parsing prefix parameter: abc}}
|
||||
do_catchsql_test 5.2 {
|
||||
CREATE VIRTUAL TABLE t4 USING fts4(prefix="");
|
||||
} {0 {}}
|
||||
|
||||
finish_test
|
||||
|
@ -138,6 +138,8 @@ foreach {tn param res} {
|
||||
3 "order=dec" {1 {unrecognized order: dec}}
|
||||
4 "order=xxx, order=asc" {1 {unrecognized order: xxx}}
|
||||
5 "order=desc, order=asc" {0 {}}
|
||||
6 "order=xxxx, order=asc" {1 {unrecognized order: xxxx}}
|
||||
7 "order=desk" {1 {unrecognized order: desk}}
|
||||
} {
|
||||
execsql { DROP TABLE IF EXISTS t1 }
|
||||
do_catchsql_test 2.1.$tn "
|
||||
@ -157,6 +159,9 @@ do_execsql_test 2.2 {
|
||||
do_execsql_test 2.3 {
|
||||
SELECT docid FROM t2 WHERE t2 MATCH 'aa';
|
||||
} {3 1}
|
||||
do_execsql_test 2.4 {
|
||||
SELECT docid FROM t2 WHERE t2 MATCH 'aa' ORDER BY content;
|
||||
} {1 3}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test that ticket [56be976859] has been fixed.
|
||||
|
Loading…
x
Reference in New Issue
Block a user