From: drh Date: Fri, 27 Jul 2018 17:51:20 +0000 (+0000) Subject: Only run the constant propagation optimization on joins since that is the X-Git-Tag: version-3.25.0~95^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7810ab646453c143966dad28f51e1a1950c89f88;p=thirdparty%2Fsqlite.git Only run the constant propagation optimization on joins since that is the only scenario where it is useful. This saves prepare time for the common case of a simple query. FossilOrigin-Name: 598d608359005b13fa1151c6c69f2fd12ef3ab7f563a035fc4a6f3c569dc6c67 --- diff --git a/manifest b/manifest index 79cc142c4a..8733168556 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index f10ad29d73..5a7c8b3472 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -82c67efb723dba387964f690cd459b420e59e3367d9589016597a76531596391 \ No newline at end of file +598d608359005b13fa1151c6c69f2fd12ef3ab7f563a035fc4a6f3c569dc6c67 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 69270959fb..98d93333bf 100644 --- a/src/expr.c +++ b/src/expr.c @@ -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; } /* diff --git a/src/select.c b/src/select.c index d74af40989..87bf5fa6e8 100644 --- a/src/select.c +++ b/src/select.c @@ -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: diff --git a/src/where.c b/src/where.c index d4f88a27af..b7e51f3d94 100644 --- a/src/where.c +++ b/src/where.c @@ -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; } diff --git a/src/whereexpr.c b/src/whereexpr.c index 4abadb1878..752a0842c0 100644 --- a/src/whereexpr.c +++ b/src/whereexpr.c @@ -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),