]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with position list processing for OR queries.
authordan <dan@noemail.net>
Thu, 17 Jul 2014 15:14:07 +0000 (15:14 +0000)
committerdan <dan@noemail.net>
Thu, 17 Jul 2014 15:14:07 +0000 (15:14 +0000)
FossilOrigin-Name: 5808f30fae0d844c52a785bf18872be371d4af68

ext/fts5/fts5_expr.c
manifest
manifest.uuid
test/fts5ac.test

index bcbc3745e7836045dc49f5bddb95122940543f54..3ea885e75c43ea323ef6f41c5c002903aafaddfc 100644 (file)
@@ -1396,13 +1396,14 @@ int sqlite3Fts5ExprPhraseSize(Fts5Expr *pExpr, int iPhrase){
 ** iPhrase.
 */
 int sqlite3Fts5ExprPoslist(Fts5Expr *pExpr, int iPhrase, const u8 **pa){
-  if( iPhrase<0 || iPhrase>=pExpr->nPhrase ){
-    *pa = 0;
-    return 0;
-  }else{
+  if( iPhrase>=0 && iPhrase<pExpr->nPhrase ){
     Fts5ExprPhrase *pPhrase = pExpr->apPhrase[iPhrase];
-    *pa = pPhrase->poslist.p;
-    return pPhrase->poslist.n;
+    if( sqlite3Fts5IterRowid(pPhrase->aTerm[0].pIter)==pExpr->pRoot->iRowid ){
+      *pa = pPhrase->poslist.p;
+      return pPhrase->poslist.n;
+    }
   }
+  *pa = 0;
+  return 0;
 }
 
index 607b5f1c62f04059bf761d9817dde859ac7f391b..7d4537622b4215d8fe96a8be48100ff5989db9a3 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fixes\sfor\stcl\slist\sgeneration\sin\sfts5_test().
-D 2014-07-16T20:07:59.378
+C Fix\sa\sproblem\swith\sposition\slist\sprocessing\sfor\sOR\squeries.
+D 2014-07-17T15:14:07.541
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in b03432313a3aad96c706f8164fb9f5307eaf19f5
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -109,7 +109,7 @@ F ext/fts5/fts5Int.h 2d4c1e1ebdf18278776fcd8a64233ff3c04ea51f
 F ext/fts5/fts5_aux.c 27b082732fd76277fd7e9277f52903723d97f99b
 F ext/fts5/fts5_buffer.c b7aa6cdf4a63642fcc12359cedc4be748ca400cc
 F ext/fts5/fts5_config.c 94f1b4cb4de6a7cd5780c14adb0198e289df8cef
-F ext/fts5/fts5_expr.c e4e4e6d32beff1ab0d076f8fbf5cf3b2241d4dbc
+F ext/fts5/fts5_expr.c 52a1b47cfd30feb09c522392b1ba246eda7023f4
 F ext/fts5/fts5_index.c 9ff3008e903aa9077b0a7a7aa76ab6080eb07a36
 F ext/fts5/fts5_storage.c 7848d8f8528d798bba159900ea310a6d4a279da8
 F ext/fts5/fts5parse.y 777da8e5819f75c217982c79c29d014c293acac9
@@ -597,7 +597,7 @@ F test/fts4noti.test 524807f0c36d49deea7920cdd4cd687408b58849
 F test/fts4unicode.test 01ec3fe2a7c3cfff3b4c0581b83caa11b33efa36
 F test/fts5aa.test c8d3b9694f6b2864161c7437408464a535d19343
 F test/fts5ab.test dc04ed48cf93ca957d174406e6c192f2ff4f3397
-F test/fts5ac.test 14d05f412b99ccac34316b76861b5bfe3a33d0a1
+F test/fts5ac.test 84599f8253abc7e10b929b8ee0b47c5edd4eafbd
 F test/fts5ad.test 2ed38bbc865678cb2905247120d02ebba7f20e07
 F test/fts5ea.test ff43b40f8879ba50b82def70f2ab67c195d1a1d4
 F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d
@@ -1194,7 +1194,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 1e2a7ba0889093416455f488fca893eaeb195d45
-R c6840136b0b681ac8e496da634d56e88
+P c1f9a4b76c0bbc1ef9f6cdb5d62aa5d536fdf38e
+R c3e4d3fb829636894b73dbf001062a3f
 U dan
-Z a290facfa88166ccaa147b2550745bf7
+Z 4c19ad3988f765a5de2b9174d276eba9
index 00e65c7fa99d120d1366a6cc92752175e53cbdf8..0f87023763c60315782ed40199350536d4b2629a 100644 (file)
@@ -1 +1 @@
-c1f9a4b76c0bbc1ef9f6cdb5d62aa5d536fdf38e
\ No newline at end of file
+5808f30fae0d844c52a785bf18872be371d4af68
\ No newline at end of file
index db5d9f151bacacc1e8e67e66bf49061a4e4e2196..3257480134a03b43c3e3ae0e9bd54071b3101fac 100644 (file)
@@ -153,7 +153,7 @@ proc poslist {aCol args} {
     set O($k) $v
   }
 
-  # Set phraselist to be a list of phrases. nPhrase its length.
+  # Set $phraselist to be a list of phrases. $nPhrase its length.
   set phraselist [lrange $args [expr $nOpt+1] end]
   set nPhrase [llength $phraselist]
 
@@ -299,10 +299,16 @@ foreach {tn phrase} {
 # Test some AND and OR queries.
 #
 foreach {tn expr} {
-  1 "a   AND b"
-  2 "a+b AND c"
-  3 "d+c AND u"
-  4 "d+c AND u+d"
+  1.1 "a   AND b"
+  1.2 "a+b AND c"
+  1.3 "d+c AND u"
+  1.4 "d+c AND u+d"
+
+  2.1 "a   OR b"
+  2.2 "a+b OR c"
+  2.3 "d+c OR u"
+  2.4 "d+c OR u+d"
+
 } {
   set res [matchdata 1 $expr]
   do_execsql_test 2.1.$tn.[llength $res] {