]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with prefix queries on fts5 offsets=0 tables.
authordan <dan@noemail.net>
Fri, 18 Dec 2015 19:07:14 +0000 (19:07 +0000)
committerdan <dan@noemail.net>
Fri, 18 Dec 2015 19:07:14 +0000 (19:07 +0000)
FossilOrigin-Name: ad0987d83c252dd8d6a69321893629d7be805c28

ext/fts5/fts5_expr.c
ext/fts5/fts5_index.c
ext/fts5/test/fts5offsets.test
manifest
manifest.uuid

index eb167b4407deabe08d5d523dc10ff29556902124..b7bc13b2895dddcd4ecb530fd5f882156db33595 100644 (file)
@@ -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);
index bf765d05563c0f8b654a397b4770b086708bfc98..5aa87d500f522bf55601312dd5180986eca344a9 100644 (file)
@@ -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;
index cd9bfa00540be27bc730cfed9c7757a0238f41f1..405824abf996370a8ffab8a2669eda43afc8fcaa 100644 (file)
@@ -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
 
index 8e1565e35595cebcd61eedaf5c857afc30e2c0cd..1beb3af7bdcabde0d65d787af040f50fd4b713c7 100644 (file)
--- a/manifest
+++ b/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
index b6243ea89e3aeaaa731a1772f292af6f10379bae..af1abb33dff85d8991094909a3294669d74ffb3e 100644 (file)
@@ -1 +1 @@
-40b5bbf02a824ca73b33aa4ae1c7d5f65b7cda10
\ No newline at end of file
+ad0987d83c252dd8d6a69321893629d7be805c28
\ No newline at end of file