Fix a problem with prefix queries on fts5 offsets=0 tables.
FossilOrigin-Name: ad0987d83c252dd8d6a69321893629d7be805c28
This commit is contained in:
parent
b12dc84fbb
commit
c58b9eeaaa
@ -1805,11 +1805,20 @@ Fts5ExprNode *sqlite3Fts5ParseNode(
|
||||
for(iPhrase=0; iPhrase<pNear->nPhrase; iPhrase++){
|
||||
pNear->apPhrase[iPhrase]->pNode = pRet;
|
||||
}
|
||||
if( pNear->nPhrase==1
|
||||
&& pNear->apPhrase[0]->nTerm==1
|
||||
&& pNear->apPhrase[0]->aTerm[0].pSynonym==0
|
||||
){
|
||||
pRet->eType = FTS5_TERM;
|
||||
if( pNear->nPhrase==1 && pNear->apPhrase[0]->nTerm==1 ){
|
||||
if( pNear->apPhrase[0]->aTerm[0].pSynonym==0 ){
|
||||
pRet->eType = FTS5_TERM;
|
||||
}
|
||||
}else if( pParse->pConfig->bOffsets==0 ){
|
||||
assert( pParse->rc==SQLITE_OK );
|
||||
pParse->rc = SQLITE_ERROR;
|
||||
assert( pParse->zErr==0 );
|
||||
pParse->zErr = sqlite3_mprintf(
|
||||
"fts5: %s queries are not supported (offsets=0)",
|
||||
pNear->nPhrase==1 ? "phrase": "NEAR"
|
||||
);
|
||||
sqlite3_free(pRet);
|
||||
pRet = 0;
|
||||
}
|
||||
}else{
|
||||
fts5ExprAddChildren(pRet, pLeft);
|
||||
|
@ -4119,8 +4119,8 @@ static void fts5SegiterPoslist(
|
||||
PoslistCallbackCtx sCtx;
|
||||
sCtx.pBuf = pBuf;
|
||||
sCtx.pColset = pColset;
|
||||
assert( sCtx.eState==0 || sCtx.eState==1 );
|
||||
sCtx.eState = fts5IndexColsetTest(pColset, 0);
|
||||
assert( sCtx.eState==0 || sCtx.eState==1 );
|
||||
fts5ChunkIterate(p, pSeg, (void*)&sCtx, fts5PoslistFilterCallback);
|
||||
}
|
||||
}
|
||||
@ -4192,8 +4192,8 @@ static int fts5AppendPoslist(
|
||||
assert( fts5MultiIterEof(p, pMulti)==0 );
|
||||
assert( pSeg->nPos>0 );
|
||||
if( 0==fts5BufferGrow(&p->rc, pBuf, pSeg->nPos+9+9) ){
|
||||
|
||||
if( pSeg->iLeafOffset+pSeg->nPos<=pSeg->pLeaf->szLeaf
|
||||
if( p->pConfig->bOffsets
|
||||
&& pSeg->iLeafOffset+pSeg->nPos<=pSeg->pLeaf->szLeaf
|
||||
&& (pColset==0 || pColset->nCol==1)
|
||||
){
|
||||
const u8 *pPos = &pSeg->pLeaf->p[pSeg->iLeafOffset];
|
||||
@ -4238,13 +4238,13 @@ static int fts5AppendPoslist(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void fts5DoclistIterNext(Fts5DoclistIter *pIter){
|
||||
u8 *p = pIter->aPoslist + pIter->nSize + pIter->nPoslist;
|
||||
|
||||
@ -4390,6 +4390,9 @@ static void fts5MergePrefixLists(
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Swap the contents of buffer *p1 with that of *p2.
|
||||
*/
|
||||
static void fts5BufferSwap(Fts5Buffer *p1, Fts5Buffer *p2){
|
||||
Fts5Buffer tmp = *p1;
|
||||
*p1 = *p2;
|
||||
|
@ -22,9 +22,11 @@ ifcapable !fts5 {
|
||||
}
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
# Simple tests.
|
||||
#
|
||||
do_execsql_test 1.0 {
|
||||
CREATE VIRTUAL TABLE t1 USING fts5(a, b, c, offsets=0);
|
||||
|
||||
INSERT INTO t1 VALUES('h d g', 'j b b g b', 'i e i d h g g'); -- 1
|
||||
INSERT INTO t1 VALUES('h j d', 'j h d a h', 'f d d g g f b'); -- 2
|
||||
INSERT INTO t1 VALUES('j c i', 'f f h e f', 'c j i j c h f'); -- 3
|
||||
@ -55,5 +57,13 @@ foreach {tn match res} {
|
||||
} $res
|
||||
}
|
||||
|
||||
do_catchsql_test 1.3.1 {
|
||||
SELECT rowid FROM t1('h + d');
|
||||
} {1 {fts5: phrase queries are not supported (offsets=0)}}
|
||||
|
||||
do_catchsql_test 1.3.2 {
|
||||
SELECT rowid FROM t1('NEAR(h d)');
|
||||
} {1 {fts5: NEAR queries are not supported (offsets=0)}}
|
||||
|
||||
finish_test
|
||||
|
||||
|
19
manifest
19
manifest
@ -1,5 +1,5 @@
|
||||
C Add\sthe\s"offsets=0"\soption\sto\sfts5,\sto\screate\sa\ssmaller\sindex\swithout\sterm\soffset\sinformation.\sA\sfew\sthings\sare\scurrently\sbroken\son\sthis\sbranch.
|
||||
D 2015-12-17T20:36:13.853
|
||||
C Fix\sa\sproblem\swith\sprefix\squeries\son\sfts5\soffsets=0\stables.
|
||||
D 2015-12-18T19:07:14.984
|
||||
F Makefile.in 28bcd6149e050dff35d4dcfd97e890cd387a499d
|
||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||
F Makefile.msc 5fff077fcc46de7714ed6eebb6159a4c00eab751
|
||||
@ -101,9 +101,9 @@ F ext/fts5/fts5Int.h 4e1bb66d8e607bf38e881eb455cdf36cc3fa9e42
|
||||
F ext/fts5/fts5_aux.c 1f384972d606375b8fa078319f25ab4b5feb1b35
|
||||
F ext/fts5/fts5_buffer.c 389d377d04f6e622644c3343ab5e511f6646de36
|
||||
F ext/fts5/fts5_config.c ba5248a05c28ec6a6fdf2599a86e9fd67e5c61e2
|
||||
F ext/fts5/fts5_expr.c 80075fa45091bad42100c4a5c4f2efc83e43e3af
|
||||
F ext/fts5/fts5_expr.c 3b2c7ac54e6c03e732751a6a4bf9ced8f408e2a2
|
||||
F ext/fts5/fts5_hash.c d4a6b52faca0134cc7bcc880f03a257a0dec2636
|
||||
F ext/fts5/fts5_index.c 53b3a8f1c9c1f6e5e896b6dc0a7ad26c2eea23a2
|
||||
F ext/fts5/fts5_index.c d862dc84c54133d902893a6a7992699cd5272c48
|
||||
F ext/fts5/fts5_main.c ef04699949ab8e42d590ae30188afef7ad58776e
|
||||
F ext/fts5/fts5_storage.c 0dc37a6183e1061e255f23971198d8878159d4ef
|
||||
F ext/fts5/fts5_tcl.c 3bf445e66de32137d4693694ff7b1fd6074e32bd
|
||||
@ -156,7 +156,7 @@ F ext/fts5/test/fts5integrity.test 87db5d4e7da0ce04a1dcba5ba91658673c997a65
|
||||
F ext/fts5/test/fts5matchinfo.test 2163b0013e824bba65499da9e34ea4da41349cc2
|
||||
F ext/fts5/test/fts5merge.test 8f3cdba2ec9c5e7e568246e81b700ad37f764367
|
||||
F ext/fts5/test/fts5near.test b214cddb1c1f1bddf45c75af768f20145f7e71cc
|
||||
F ext/fts5/test/fts5offsets.test 09fc61d553ae4e985afc0146ec77f3439503fc6b
|
||||
F ext/fts5/test/fts5offsets.test 8410ec485d652da168c138b3d39e7418ff8406bf
|
||||
F ext/fts5/test/fts5onepass.test 7ed9608e258132cb8d55e7c479b08676ad68810c
|
||||
F ext/fts5/test/fts5optimize.test 42741e7c085ee0a1276140a752d4407d97c2c9f5
|
||||
F ext/fts5/test/fts5phrase.test f6d1d464da5beb25dc56277aa4f1d6102f0d9a2f
|
||||
@ -1406,10 +1406,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
|
||||
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
|
||||
F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
|
||||
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
|
||||
P 7adfa4a5794e47f97491c08abeaaac90e826b331
|
||||
R a68b4412544bee6f6bc95a23674c55d4
|
||||
T *branch * fts5-offsets
|
||||
T *sym-fts5-offsets *
|
||||
T -sym-trunk *
|
||||
P 40b5bbf02a824ca73b33aa4ae1c7d5f65b7cda10
|
||||
R 3f45bfddac5bb4e5875c9115c2804e36
|
||||
U dan
|
||||
Z a51f39853c3a5371cd0ec3358f50f2d7
|
||||
Z 1ef5385fc9e0304197471eb155fb346c
|
||||
|
@ -1 +1 @@
|
||||
40b5bbf02a824ca73b33aa4ae1c7d5f65b7cda10
|
||||
ad0987d83c252dd8d6a69321893629d7be805c28
|
Loading…
x
Reference in New Issue
Block a user