]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Only run the constant propagation optimization on joins since that is the
authordrh <drh@noemail.net>
Fri, 27 Jul 2018 17:51:20 +0000 (17:51 +0000)
committerdrh <drh@noemail.net>
Fri, 27 Jul 2018 17:51:20 +0000 (17:51 +0000)
only scenario where it is useful.  This saves prepare time for the common
case of a simple query.

FossilOrigin-Name: 598d608359005b13fa1151c6c69f2fd12ef3ab7f563a035fc4a6f3c569dc6c67

manifest
manifest.uuid
src/expr.c
src/select.c
src/where.c
src/whereexpr.c

index 79cc142c4adf9baa82b3bc8c947505c49ab4b2cd..8733168556e3d05260945bf0976a6edf322e29c4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Constant\spropagation\sis\snow\srestricted\sto\sjust\sthe\sWHERE\sclause.\sThe\nmechanism\sis\schanged\sto\stake\saffinity\sand\scollation\sinto\saccount.\s\sThis\nseems\sto\sgive\scorrect\sanswers.\s\sBut\sthe\ssearch\sfor\sconstant\spropagation\ncosts\s4\smillion\scycles\sin\sthe\sspeed\stest.
-D 2018-07-27T16:57:11.322
+C Only\srun\sthe\sconstant\spropagation\soptimization\son\sjoins\ssince\sthat\sis\sthe\nonly\sscenario\swhere\sit\sis\suseful.\s\sThis\ssaves\sprepare\stime\sfor\sthe\scommon\ncase\sof\sa\ssimple\squery.
+D 2018-07-27T17:51:20.481
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 0a3a6c81e6fcb969ff9106e882f0a08547014ba463cb6beca4c4efaecc924ee6
@@ -450,7 +450,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957
 F src/dbpage.c 4aa7f26198934dbd002e69418220eae3dbc71b010bbac32bd78faf86b52ce6c3
 F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91
 F src/delete.c 4c8c7604277a2041647f96b78f4b9a47858e9217e4fb333d35e7b5ab32c5b57f
-F src/expr.c af489eb4dac501d06c1f05b9f27f7fc37a05582b9f9b7724e0e1ccc78ae8a530
+F src/expr.c eaf12eb8eb1dcf6358ee32bb21fd31225783a28ca42b27b1cdc497cc6c356493
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c b1da9ef8dc834603bb0d28972378a7ce65897847f9a1e89ab800bbdf24c788ee
 F src/func.c 7c288b4ce309b5a8b8473514b88e1f8e69a80134509a8c0db8e39c858e367e7f
@@ -498,7 +498,7 @@ F src/printf.c 7f6f3cba8e0c49c19e30a1ff4e9aeda6e06814dcbad4b664a69e1b6cb6e7e365
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 797088662ed61102485e3070ba3b3f7828bd5ef6a588223ba6865d77d52f6cea
 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac
-F src/select.c 7d2a980be754def09d3458c9eba5ac781ec2962c3415e6ce6d3e00ca100468f8
+F src/select.c a86a20bd89ea4298267b1d2f44a8b14a53cb6ad1e75a555af5d57de5cf7abd3b
 F src/shell.c.in f6ebd05c461805a7c708333cd645e74e0a93560d2118f5adb73a75d8c9cf6b01
 F src/sqlite.h.in c6451bb876adced3aba5b1682c6317d215c5eceaba21a6ce979e71a0b8d0bf95
 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
@@ -583,10 +583,10 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c d44a0811afd2155b1157c38b33141d4ac028fda6232485bed664015bb05819ca
 F src/wal.h 8de5d2d3de0956d6f6cb48c83a4012d5f227b8fe940f3a349a4b7e85ebcb492a
 F src/walker.c ba7225773931760cf60bf22f34d0cce2588df7ce5ce0f215a52eb88234b55ac4
-F src/where.c 2d313b446758317b60626763d0e1285e04b04c061ce94945dcfffad9525badc1
+F src/where.c fae13835da8cd457bbc50a8530b1f4bfe6eb173dec0687cf1572fc02a7aec415
 F src/whereInt.h b90ef9b9707ef750eab2a7a080c48fb4900315033274689def32d0cf5a81ebe4
 F src/wherecode.c 2c552dfe50d06e0916dbd49a180e4bf0accfce6d17d46a2dfeea8f75d2b5861b
-F src/whereexpr.c 7d30c744f37e8bd53811f88fd1d949f6145d24ce77a6f51b252e2b903dc4434e
+F src/whereexpr.c dc34f0df69418dedb4619f7ad61b7d31f447971223540b957a1b836a62c0ce7b
 F src/window.c c61434ce7e35b7d76b3321dec39e10e79061c10eed1e3d7976c87dbdd77aefb5
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/affinity2.test a6d901b436328bd67a79b41bb0ac2663918fe3bd
@@ -1753,7 +1753,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 50add839fd95665bd67a6ae5de8346fd09e83904bbcbad26fad280dff86d9e93
-R 50f5324ffb4955a3d4663001ed61326d
+P 82c67efb723dba387964f690cd459b420e59e3367d9589016597a76531596391
+R 25b438a30597294879dd2d1bc42efd58
 U drh
-Z f7259f5866467f9069a6566db546a485
+Z bbd08ff7c79abf3a0e619aafbe2d2c13
index f10ad29d7319d186e96e4062009bd47c47d0cf82..5a7c8b3472c4d09a11a209847f7bf9b22abf1cbb 100644 (file)
@@ -1 +1 @@
-82c67efb723dba387964f690cd459b420e59e3367d9589016597a76531596391
\ No newline at end of file
+598d608359005b13fa1151c6c69f2fd12ef3ab7f563a035fc4a6f3c569dc6c67
\ No newline at end of file
index 69270959fb698b38c4a869daa374cda3ea3b9f1a..98d93333bf7b521f39085427b9f25c45d6e37adb 100644 (file)
@@ -332,9 +332,7 @@ CollSeq *sqlite3BinaryCompareCollSeq(
 ** Return true if CollSeq is the default built-in BINARY.
 */
 int sqlite3IsBinary(const CollSeq *p){
-  if( p==0 ) return 1;
-  if( sqlite3_stricmp(p->zName,"BINARY")==0 ) return 1;
-  return 0;
+  return p==0 || sqlite3StrICmp(p->zName,sqlite3StrBINARY)==0;
 }
 
 /*
index d74af409898e5fbd5032cecc9d68cbdc03f89234..87bf5fa6e8eb57e571d93e84fdfdff76bb0190f5 100644 (file)
@@ -5759,8 +5759,13 @@ int sqlite3Select(
   }
 #endif
 
-  /* Do the constant propagation optimization */
-  if( OptimizationEnabled(db, SQLITE_PropagateConst)
+  /* Do the WHERE-clause constant propagation optimization if this is
+  ** a join.  No need to speed time on this operation for non-join queries
+  ** as the equivalent optimization will be handled by query planner in
+  ** sqlite3WhereBegin().
+  */
+  if( pTabList->nSrc>1
+   && OptimizationEnabled(db, SQLITE_PropagateConst)
    && propagateConstants(pParse, p)
   ){
 #if SELECTTRACE_ENABLED
@@ -5770,7 +5775,7 @@ int sqlite3Select(
     }
 #endif
   }else{
-    SELECTTRACE(0x100,pParse,p,("Constant propagation not possible\n"));
+    SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n"));
   }
 
   /* For each term in the FROM clause, do two things:
index d4f88a27af4d0488aa00ba2bbfb21d7092a6ee76..b7e51f3d943b1a1207b9c2edbb6120c1fa475efa 100644 (file)
@@ -3205,7 +3205,7 @@ const char *sqlite3_vtab_collation(sqlite3_index_info *pIdxInfo, int iCons){
     if( pX->pLeft ){
       pC = sqlite3BinaryCompareCollSeq(pHidden->pParse, pX->pLeft, pX->pRight);
     }
-    zRet = (pC ? pC->zName : "BINARY");
+    zRet = (pC ? pC->zName : sqlite3StrBINARY);
   }
   return zRet;
 }
index 4abadb18781d528ad5099421425a21b1dfc89c8b..752a0842c0b10b4205bb7f2e65dea3e9a4c4eb85 100644 (file)
@@ -1200,7 +1200,7 @@ static void exprAnalyze(
       }
       *pC = c + 1;
     }
-    zCollSeqName = noCase ? "NOCASE" : "BINARY";
+    zCollSeqName = noCase ? "NOCASE" : sqlite3StrBINARY;
     pNewExpr1 = sqlite3ExprDup(db, pLeft, 0);
     pNewExpr1 = sqlite3PExpr(pParse, TK_GE,
            sqlite3ExprAddCollateString(pParse,pNewExpr1,zCollSeqName),