]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure that virtual WHERE-clause terms do not get transformed into real
authordrh <drh@noemail.net>
Tue, 11 Feb 2014 03:50:49 +0000 (03:50 +0000)
committerdrh <drh@noemail.net>
Tue, 11 Feb 2014 03:50:49 +0000 (03:50 +0000)
terms when processing set of OR-connected terms.
Fix for ticket [4c86b126f22ad].

FossilOrigin-Name: de635e09605acbeb319a36ce11c70ad328fa2556

manifest
manifest.uuid
src/where.c
test/tkt-4c86b126f2.test [new file with mode: 0644]
test/where8.test

index 19223fd379033ee7cf2d974759c4584ea9c84cbd..496dd8ce28f7102f29757066af687a76b15f17b2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sharmless\scompiler\swarning\sin\sVS2013.
-D 2014-02-08T13:22:36.857
+C Make\ssure\sthat\svirtual\sWHERE-clause\sterms\sdo\snot\sget\stransformed\sinto\sreal\nterms\swhen\sprocessing\sset\sof\sOR-connected\sterms.\nFix\sfor\sticket\s[4c86b126f22ad].
+D 2014-02-11T03:50:49.817
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -293,7 +293,7 @@ F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
 F src/wal.c 7dc3966ef98b74422267e7e6e46e07ff6c6eb1b4
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c 11edb74d587bc87b33ca96a5173e3ec1b8389e45
-F src/where.c 67ae3b5e97ecff36c70cb61ccc7d74cf228f1596
+F src/where.c 540f52385a653d7cc077e381875ec02bf4c80053
 F src/whereInt.h 96a75c61f1d2b9d4a8e4bb17d89deb0cf7cba358
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@@ -869,6 +869,7 @@ F test/tkt-3998683a16.test 6d1d04d551ed1704eb3396ca87bb9ccc8c5c1eb7
 F test/tkt-3a77c9714e.test b08bca26de1140bdf004a37716582a43d7bd8be8
 F test/tkt-3fe897352e.test 27e26eb0f1811aeba4d65aba43a4c52e99da5e70
 F test/tkt-4a03edc4c8.test 91c0e135888cdc3d4eea82406a44b05c8c1648d0
+F test/tkt-4c86b126f2.test cbcc611becd0396890169ab23102dd70048bbc9a
 F test/tkt-4dd95f6943.test 3d0ce415d2ee15d3d564121960016b9c7be79407
 F test/tkt-54844eea3f.test a12b851128f46a695e4e378cca67409b9b8f5894
 F test/tkt-5d863f876e.test c9f36ca503fa154a3655f92a69d2c30da1747bfa
@@ -1077,7 +1078,7 @@ F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
 F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
 F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
 F test/where7.test 5a4b0abc207d71da4deecd734ad8579e8dd40aa8
-F test/where8.test d2b4fd6d7b7c5d44f590182a05033d78a14c00a1
+F test/where8.test 84033c4da466d90fe7ef0152661ff67fd218105f
 F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
 F test/where9.test 4f3eab951353a3ae164befc521c777dfa903e46c
 F test/whereA.test 4d253178d135ec46d1671e440cd8f2b916aa6e6b
@@ -1152,10 +1153,8 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P e816dd924619db5f766de6df74ea2194f3e3b538
-R 73e287cc1a6edbdb5e3e210fabc10684
-T *branch * branch-3.8.3
-T *sym-branch-3.8.3 *
-T -sym-trunk *
+P 35f2793db5eb58484554477a23f8320843ebcd71
+Q +c950d6c4117d076f871518e738cdf9e8c46a19fc
+R bd7df5b41e7b9bc49f2a2bbd8c71e8eb
 U drh
-Z 85563bddc8fc07f7442defb50aa2e866
+Z 6687b6d2c51d9496d292594442d38fc4
index 25396cbf6db435cc5bcec5bf88a8f5b842160318..dfd83c76835d342022d4b9303b3a0f6e12feb260 100644 (file)
@@ -1 +1 @@
-35f2793db5eb58484554477a23f8320843ebcd71
\ No newline at end of file
+de635e09605acbeb319a36ce11c70ad328fa2556
\ No newline at end of file
index 6fac5e5ed16e962a348e81dc93e54d4eb156758e..67ef577e9b560b118039cb0f0fc7ef30aab2a5d4 100644 (file)
@@ -3314,7 +3314,9 @@ static Bitmask codeOneLoopStart(
         Expr *pExpr = pWC->a[iTerm].pExpr;
         if( &pWC->a[iTerm] == pTerm ) continue;
         if( ExprHasProperty(pExpr, EP_FromJoin) ) continue;
-        if( pWC->a[iTerm].wtFlags & (TERM_ORINFO) ) continue;
+        testcase( pWC->a[iTerm].wtFlags & TERM_ORINFO );
+        testcase( pWC->a[iTerm].wtFlags & TERM_VIRTUAL );
+        if( pWC->a[iTerm].wtFlags & (TERM_ORINFO|TERM_VIRTUAL) ) continue;
         if( (pWC->a[iTerm].eOperator & WO_ALL)==0 ) continue;
         pExpr = sqlite3ExprDup(db, pExpr, 0);
         pAndExpr = sqlite3ExprAnd(db, pAndExpr, pExpr);
diff --git a/test/tkt-4c86b126f2.test b/test/tkt-4c86b126f2.test
new file mode 100644 (file)
index 0000000..3c5177e
--- /dev/null
@@ -0,0 +1,49 @@
+# 2014-02-11
+#
+# 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.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library. Specifically,
+# it tests that ticket [4c86b126f22ad548fee0125337bdc9366912d9ac].
+#
+# When SQLite is compiled using SQLITE_ENABLE_STAT3 or SQLITE_ENABLE_STAT4,
+# it gets the wrong answer...
+#
+# The problem was introduced in SQLite 3.8.1.
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_execsql_test tkt-4c86b126f2-1.1 {
+  CREATE TABLE nodes(
+     local_relpath  TEXT PRIMARY KEY,
+     moved_to  TEXT
+  );
+  INSERT INTO nodes VALUES('A',NULL);
+  INSERT INTO nodes VALUES('A/B',NULL);
+  INSERT INTO nodes VALUES('',NULL);
+  INSERT INTO nodes VALUES('A/B/C-move',NULL);
+  INSERT INTO nodes VALUES('A/B/C','A/B/C-move');
+  INSERT INTO nodes VALUES('A/B-move',NULL);
+  INSERT INTO nodes VALUES('A/B-move/C-move',NULL);
+  INSERT INTO nodes VALUES('A/B-move/C','x');
+  SELECT local_relpath, moved_to
+   FROM nodes
+  WHERE (local_relpath = 'A/B' OR
+           ((local_relpath > 'A/B/') AND (local_relpath < 'A/B0')))
+    AND moved_to IS NOT NULL;
+} {A/B/C A/B/C-move}
+
+do_execsql_test tkt-4c86b126f2-2.1 {
+  CREATE TABLE t1(x TEXT UNIQUE, y TEXT UNIQUE, z);
+  INSERT INTO t1 VALUES('ghi','jkl','y');
+  SELECT * FROM t1 WHERE (x='ghi' OR y='jkl') AND z IS NOT NULL;
+} {ghi jkl y}
+
+
+finish_test
index a1ef1d796c5d38a628303f3379ced4fa3de8a2d4..287e4004c813369dcd97d2d00d75f4a34e314939 100644 (file)
@@ -210,7 +210,7 @@ do_test where8-3.4 {
 
 do_test where8-3.5 {
   execsql_status {
-    SELECT a, d FROM t1, t2 WHERE (a = 2 OR a = 3) AND (d = a OR e = 'sixteen')
+    SELECT a, d FROM t1, t2 WHERE (a = 2 OR a = 3) AND (d = +a OR e = 'sixteen')
      ORDER BY +a, +d;
   }
 } {2 2 2 4 3 3 3 4 0 1}
@@ -222,7 +222,7 @@ do_test where8-3.6 {
   execsql_status {
     SELECT a, d 
     FROM t1, t2 
-    WHERE (a = 2 OR a = 3) AND (d = a OR e = 'sixteen')
+    WHERE (a = 2 OR a = 3) AND (d = +a OR e = 'sixteen')
     ORDER BY t1.rowid
   }
 } {2 2 2 4 3 3 3 4 0 1}