]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure joins work correctly when both sides of the join are connected
authordrh <drh@noemail.net>
Thu, 24 Sep 2015 12:19:17 +0000 (12:19 +0000)
committerdrh <drh@noemail.net>
Thu, 24 Sep 2015 12:19:17 +0000 (12:19 +0000)
using indexed expressions.

FossilOrigin-Name: c2fcb03299f2872d7f97a540ea145519f8b2e5cc

manifest
manifest.uuid
src/where.c
test/indexexpr1.test

index 96b2f90caf4628bd93580658d1fea2ec129e060b..f74f0f10ad0db68e33e3f75781c0ce58db33fec0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Correctly\shandle\sthe\scase\sof\sa\sWHERE-clause\sterm\swith\sindexed\sexpressions\son\nboth\ssides\sof\sthe\s==\ssign.
-D 2015-09-24T11:26:45.688
+C Make\ssure\sjoins\swork\scorrectly\swhen\sboth\ssides\sof\sthe\sjoin\sare\sconnected\nusing\sindexed\sexpressions.
+D 2015-09-24T12:19:17.384
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in e1afa6fb2de2bddd50e0ddae8166c2ee9d69b301
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -417,7 +417,7 @@ F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb
 F src/wal.c 18b0ed49830cf04fe2d68224b41838a73ac6cd24
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba
-F src/where.c 64a80b1c0a042488b4827844d5a438ee152f6e18
+F src/where.c d5eed2584542e7f3bc78ddef7809a9d76d14d811
 F src/whereInt.h 7892bb54cf9ca0ae5c7e6094491b94c9286dc647
 F src/wherecode.c 7660e1ad16817a921b099af553f3e1349352d16f
 F src/whereexpr.c 2473e4350e30f9b55d1c6a8f66ca23c689f23f1d
@@ -785,7 +785,7 @@ F test/index5.test 8621491915800ec274609e42e02a97d67e9b13e7
 F test/index6.test 7102ec371414c42dfb1d5ca37eb4519aa9edc23a
 F test/index7.test 9c6765a74fc3fcde7aebc5b3bd40d98df14a527c
 F test/indexedby.test 9c4cd331224e57f79fbf411ae245e6272d415985
-F test/indexexpr1.test b750682e07d40bd0446082143f7ae2b1bf68e405
+F test/indexexpr1.test 203c83a05accf6f2b748834192f3564321b8c0d8
 F test/indexfault.test 31d4ab9a7d2f6e9616933eb079722362a883eb1d
 F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
 F test/insert.test 38742b5e9601c8f8d76e9b7555f7270288c2d371
@@ -1388,7 +1388,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P a4444c0f662058bdd5267e616c31cef828bc1fc5
-R c64af61f6d16f1b4c50f6ad30b9369d7
+P d9b716a6bd6145b2e7733c04d86227df777cd473
+R 59628b7ea7f835d00524019d5851df4e
 U drh
-Z b270a072167f90d001d31028f02a3bdb
+Z 3e6728e37d51c43c629584a154f06e88
index e04a732b5d2643bac3ba88b465c943e283300f96..20d67b18bc42195cc61e79fd21bd0b1338dc96d9 100644 (file)
@@ -1 +1 @@
-d9b716a6bd6145b2e7733c04d86227df777cd473
\ No newline at end of file
+c2fcb03299f2872d7f97a540ea145519f8b2e5cc
\ No newline at end of file
index 39f99001fb6053cf158fc32b78740d08b74f7625..1e13cf0ed0e78c8a3cada427d3e7625085bd315a 100644 (file)
@@ -182,7 +182,7 @@ static WhereTerm *whereScanNext(WhereScan *pScan){
   while( pScan->iEquiv<=pScan->nEquiv ){
     iCur = pScan->aiCur[pScan->iEquiv-1];
     iColumn = pScan->aiColumn[pScan->iEquiv-1];
-    assert( iColumn!=(-2) || pScan->pIdxExpr!=0 );
+    if( iColumn==(-2) && pScan->pIdxExpr==0 ) return 0;
     while( (pWC = pScan->pWC)!=0 ){
       for(pTerm=pWC->a+k; k<pWC->nTerm; k++, pTerm++){
         if( pTerm->leftCursor==iCur
index 63940892d774ab8b2ed7914bd2791ebdc6567987..1945059f2b43802e5a20a5acc52853d31ec58386 100644 (file)
@@ -233,6 +233,8 @@ do_execsql_test indexexpr1-600 {
   SELECT i FROM t4 WHERE e=5;
 } {9}
 
+# Indexed expressions on both sides of an == in a WHERE clause.
+#
 do_execsql_test indexexpr1-700 {
   DROP TABLE IF EXISTS t7;
   CREATE TABLE t7(a,b,c);
@@ -241,5 +243,16 @@ do_execsql_test indexexpr1-700 {
   CREATE INDEX t7c ON t7(+c);
   SELECT *, '|' FROM t7 WHERE +b=+c ORDER BY +a;
 } {1 2 2 | abc def def |}
+do_execsql_test indexexpr1-710 {
+  CREATE TABLE t71(a,b,c);
+  CREATE INDEX t71bc ON t71(b+c);
+  CREATE TABLE t72(x,y,z);
+  CREATE INDEX t72yz ON t72(y+z);
+  INSERT INTO t71(a,b,c) VALUES(1,11,2),(2,7,15),(3,5,4);
+  INSERT INTO t72(x,y,z) VALUES(1,10,3),(2,8,14),(3,9,9);
+  SELECT a, x, '|' FROM t71, t72
+   WHERE b+c=y+z
+  ORDER BY +a, +x;
+} {1 1 | 2 2 |}
 
 finish_test