From 0f517ea8d4400858233e1c8c2368eaa22661771e Mon Sep 17 00:00:00 2001 From: drh Date: Tue, 21 Apr 2015 02:12:13 +0000 Subject: [PATCH] Make sure the whereSplit() routine in the query planner is not confused by the likely() operator. FossilOrigin-Name: 588db14ffb4b0e8e76d511b7b1541db3ec78836a --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/where.c | 9 +++++---- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index c16ea75772..722a49165b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enable\scompilation\sand\sVSIX\spackage\screation\swith\sthe\sVisual\sStudio\s2015\sCTP. -D 2015-04-21T00:23:38.259 +C Make\ssure\sthe\swhereSplit()\sroutine\sin\sthe\squery\splanner\sis\snot\sconfused\nby\sthe\slikely()\soperator. +D 2015-04-21T02:12:13.667 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in faaf75b89840659d74501bea269c7e33414761c1 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -307,7 +307,7 @@ F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb F src/wal.c 753995db83247f20361a8e8a874990b21a75abd9 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804 -F src/where.c 723b4f614cd60b7198f5f1cc053362f8a28b0bed +F src/where.c 32fe265e3dc74ef3b27deb9e6eb5fc3c71409612 F src/whereInt.h cbe4aa57326998d89e7698ca65bb7c28541d483c F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 @@ -1251,7 +1251,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 b940b0fa6cf68fef58344d269ad5d39468ffe72f 5ae853aaebaee76c9265061984185f74c10c4c8b -R 9804529a8e22c5281a0b002dbd15342c -U mistachkin -Z 2ec7897fcafe697e2540c7ecf3cbf657 +P 03b725a768290e3c7b31f1ba3310532fd7dc05cd +R 1a86c7004bf5b29df45cd677c642d5c4 +U drh +Z 973efc28f5c5e0de1e0d5148069074b3 diff --git a/manifest.uuid b/manifest.uuid index 39b81f4f27..e1164a819a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -03b725a768290e3c7b31f1ba3310532fd7dc05cd \ No newline at end of file +588db14ffb4b0e8e76d511b7b1541db3ec78836a \ No newline at end of file diff --git a/src/where.c b/src/where.c index 1b97ebf98f..25d20c8808 100644 --- a/src/where.c +++ b/src/where.c @@ -255,13 +255,14 @@ static int whereClauseInsert(WhereClause *pWC, Expr *p, u16 wtFlags){ ** all terms of the WHERE clause. */ static void whereSplit(WhereClause *pWC, Expr *pExpr, u8 op){ + Expr *pE2 = sqlite3ExprSkipCollate(pExpr); pWC->op = op; - if( pExpr==0 ) return; - if( pExpr->op!=op ){ + if( pE2==0 ) return; + if( pE2->op!=op ){ whereClauseInsert(pWC, pExpr, 0); }else{ - whereSplit(pWC, pExpr->pLeft, op); - whereSplit(pWC, pExpr->pRight, op); + whereSplit(pWC, pE2->pLeft, op); + whereSplit(pWC, pE2->pRight, op); } }