From: drh Date: Wed, 3 Oct 2012 12:56:18 +0000 (+0000) Subject: Update the query planner to recognize more cases where ORDER BY clauses X-Git-Tag: version-3.7.15~93 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=325eff58d6b8b4563827e51f8ac9185751bdb9bf;p=thirdparty%2Fsqlite.git Update the query planner to recognize more cases where ORDER BY clauses can be optimized out. Add test cases to verify correct behavior of the ORDER BY optimization when the covering-index-scan optimization is disabled. Fix a harmless compiler warning in the TCL interface. FossilOrigin-Name: 956e4d7f8958e7065ff2d61cd71519d6f4113d4a --- 325eff58d6b8b4563827e51f8ac9185751bdb9bf diff --cc manifest index 05b97bd3c0,47363407dd..373e4e653b --- a/manifest +++ b/manifest @@@ -1,5 -1,5 +1,5 @@@ - C Fix\sthe\sTCL\sinterface\sso\sthat\sSQL\sfunctions\simplemented\sin\sTCL\shonor\sthe\n"nullvalue"\ssetting.\s\sAlso\sremove\sfrom\sthe\sTCL\sinterface\ssome\sunused\s\nlegacy\sUTF8\stranslation\scode\sleft\sover\sfrom\sSQLite2. - D 2012-10-03T11:02:33.741 -C Fix\sa\squery\splanner\sproblem\sthat\sonly\soccurs\swhen\scovering-index-scan\sis\ndisabled.\s\sFix\sto\stests\swhose\soutput\schanged\sdue\sto\sthe\snew\sand\smore\naggressive\sORDER\sBY\soptimization. -D 2012-10-03T12:38:19.551 ++C Update\sthe\squery\splanner\sto\srecognize\smore\scases\swhere\sORDER\sBY\sclauses\ncan\sbe\soptimized\sout.\s\sAdd\stest\scases\sto\sverify\scorrect\sbehavior\sof\sthe\nORDER\sBY\soptimization\swhen\sthe\scovering-index-scan\soptimization\sis\sdisabled.\nFix\sa\sharmless\scompiler\swarning\sin\sthe\sTCL\sinterface. ++D 2012-10-03T12:56:18.398 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5f4f26109f9d80829122e0e09f9cda008fa065fb F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@@ -183,7 -183,7 +183,7 @@@ F src/sqliteInt.h c29395d6e68cfbcb26617 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 35939e7e03abf1b7577ce311f48f682c40de3208 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e - F src/tclsqlite.c fc9027118d5fa1b3d16a7b22c63684a54adeeb42 -F src/tclsqlite.c 22de426c579d01c7bd2c24fb9229fbd774613b42 ++F src/tclsqlite.c 515abd8e33e82aa330eeb54675185a7e1e5b6778 F src/test1.c 936afc02766403e5debca49a1817a780e116df7e F src/test2.c 4178056dd1e7d70f954ad8a1e3edb71a2a784daf F src/test3.c 3c3c2407fa6ec7a19e24ae23f7cb439d0275a60d @@@ -635,7 -635,7 +635,7 @@@ F test/notnull.test cc7c78340328e6112a1 F test/null.test a8b09b8ed87852742343b33441a9240022108993 F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394 F test/orderby1.test 4875a2a0a87d81920f3600a3405dc42f233b8c82 - F test/orderby2.test d8fa5991d8948ae1f335c2f91d751e955bfee815 -F test/orderby2.test b799f7c96b5b00daa0aa914c22309423a4b56bc8 ++F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04 F test/oserror.test 50417780d0e0d7cd23cf12a8277bb44024765df3 F test/pager1.test 2163c6ef119f497a71a84137c957c63763e640ab F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1 @@@ -1018,7 -1018,7 +1018,7 @@@ F tool/vdbe-compress.tcl f12c884766bd14 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9 - P 7d301fdfeec540e4a58f43bff04d219e9f769dc4 - R 6327212080c41cdbc10c1e2eb094be0d -P 6744d9a37faffed59b4d5cb96c8671ec46a87ea7 -R 603241d0c48a2df1479c4d8cfb353c66 ++P c1f10a2643179ec58f3879764e9e89676d4b5f91 0f9bb90100aa304a7f28023ca4173e68b445e8bd ++R 8774a06a6467942bbeb55b1c69f79903 U drh - Z 25d327c4e46a0608f83a0eb5d2f156c2 -Z e697da84737ed0e1f148e3cf30d77940 ++Z dc6130441c34298b8082b4166a85e60e diff --cc manifest.uuid index c4e20d4544,a9af475df2..7aace3cdf7 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - c1f10a2643179ec58f3879764e9e89676d4b5f91 -0f9bb90100aa304a7f28023ca4173e68b445e8bd ++956e4d7f8958e7065ff2d61cd71519d6f4113d4a diff --cc src/tclsqlite.c index 5ea67782a0,47110cb8d2..57dab85d4b --- a/src/tclsqlite.c +++ b/src/tclsqlite.c @@@ -1489,7 -1513,7 +1489,7 @@@ static Tcl_Obj *dbEvalColumnValue(DbEva } } - return Tcl_NewStringObj(sqlite3_column_text(pStmt, iCol), -1); - return dbTextToObj((char *)sqlite3_column_text(pStmt, iCol)); ++ return Tcl_NewStringObj((char*)sqlite3_column_text(pStmt, iCol), -1); } /* diff --cc test/orderby2.test index 7d543229c0,a2bb4e13a9..cfd6477152 --- a/test/orderby2.test +++ b/test/orderby2.test @@@ -67,7 -67,7 +67,8 @@@ do_test 1.3b } } {~/ORDER BY/} --# After where34.314 in TH3: ++# The following tests derived from TH3 test module cov1/where34.test ++# do_test 2.0 { db eval { CREATE TABLE t31(a,b); CREATE INDEX t31ab ON t31(a,b); @@@ -92,6 -92,6 +93,25 @@@ do_test 2.1 ORDER BY +a ASC, +c ASC, +e DESC, +g ASC; } } {1,3,7,10 1,3,7,14 1,3,6,11 1,4,8,12 1,4,8,12 1,4,8,13 1,4,5,9 2,3,7,10 2,3,7,14 2,3,6,11} - ++do_test 2.2 { ++ db eval { ++ SELECT a||','||c||','||e||','||g FROM t31, t32, t33, t34 ++ WHERE c=b AND e=d AND g=f ++ ORDER BY a ASC, c ASC, e ASC, g ASC; ++ } ++} {1,3,6,11 1,3,7,10 1,3,7,14 1,4,5,9 1,4,8,12 1,4,8,12 1,4,8,13 2,3,6,11 2,3,7,10 2,3,7,14} ++do_test 2.3 { ++ optimization_control db cover-idx-scan off ++ db cache flush ++ db eval { ++ SELECT a||','||c||','||e||','||g FROM t31, t32, t33, t34 ++ WHERE c=b AND e=d AND g=f ++ ORDER BY a ASC, c ASC, e ASC, g ASC; ++ } ++} {1,3,6,11 1,3,7,10 1,3,7,14 1,4,5,9 1,4,8,12 1,4,8,12 1,4,8,13 2,3,6,11 2,3,7,10 2,3,7,14} ++optimization_control db all on ++db cache flush ++ + finish_test