From c4d56dd74bc9493c5ea7c4b1d83d953d8b225922 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 18 May 2015 12:18:37 +0000 Subject: [PATCH] Use an ALWAY() on conditionals in the transitive constraint logic that are always true as far as we know. FossilOrigin-Name: 204e567f68e4b3e069f04ca0643c6e5db781d39f --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/where.c | 6 ++++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 04d8531caf..613107e7c0 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refinements\sto\sthe\sdetermination\sof\swhen\san\sA==B\sterm\sis\san\sequivalence.\nAdd\stest\scases. -D 2015-05-18T11:34:52.372 +C Use\san\sALWAY()\son\sconditionals\sin\sthe\stransitive\sconstraint\slogic\sthat\sare\nalways\strue\sas\sfar\sas\swe\sknow. +D 2015-05-18T12:18:37.067 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in edfc69769e613a6359c42c06ea1d42c3bece1736 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -307,7 +307,7 @@ F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb F src/wal.c ce2cb2d06faab54d1bce3e739bec79e063dd9113 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804 -F src/where.c 68369923d549b475c991f2518002ea899a86e2cc +F src/where.c e71eae3b1383249c3b5d136d6b71ca8d28fb8d61 F src/whereInt.h a6f5a762bc1b4b1c76e1cea79976b437ac35a435 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 @@ -1258,7 +1258,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 8c886c43ff0bd5953d289534791d2c6b9dc25445 -R 40be7b14d15113b252df872d4e1eef76 +P 6bfaf525cac2e0c0a4a3bd3a1fc7bf5bd3234303 +R 6e68677be01e9eb58bd600864e0bd14f U drh -Z 672ea121cac3835cdbb00fa056bd1b67 +Z db7553e06fec928a1e05d39be9821e62 diff --git a/manifest.uuid b/manifest.uuid index ee2ba8454c..a2436cc2df 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6bfaf525cac2e0c0a4a3bd3a1fc7bf5bd3234303 \ No newline at end of file +204e567f68e4b3e069f04ca0643c6e5db781d39f \ No newline at end of file diff --git a/src/where.c b/src/where.c index 2566689cc4..d0dfb78d2d 100644 --- a/src/where.c +++ b/src/where.c @@ -1214,9 +1214,11 @@ static int termIsEquivalence(Parse *pParse, Expr *pExpr){ pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight); if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1; pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft); - zColl1 = pColl ? pColl->zName : "BINARY"; + /* Since pLeft and pRight are both a column references, their collating + ** sequence should always be defined. */ + zColl1 = ALWAYS(pColl) ? pColl->zName : 0; pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight); - zColl2 = pColl ? pColl->zName : "BINARY"; + zColl2 = ALWAYS(pColl) ? pColl->zName : 0; return sqlite3StrICmp(zColl1, zColl2)==0; } -- 2.39.5