]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Update the query planner to recognize more cases where ORDER BY clauses
authordrh <drh@noemail.net>
Wed, 3 Oct 2012 12:56:18 +0000 (12:56 +0000)
committerdrh <drh@noemail.net>
Wed, 3 Oct 2012 12:56:18 +0000 (12:56 +0000)
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

1  2 
manifest
manifest.uuid
src/tclsqlite.c
test/orderby2.test

diff --cc manifest
index 05b97bd3c0922ab607b504d26d627f24f6644592,47363407dd8b7a415f8a4c941a1d6dbbf89bba36..373e4e653bf1eb9ca6a3cd6f704bfeaa8352eac6
+++ 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 c4e20d4544b3f28052ed883969f1e69b838c729b,a9af475df2f3a134c46625678e04c61bf423c771..7aace3cdf7e1a3fff7cf73887382184bf61d3cd8
@@@ -1,1 -1,1 +1,1 @@@
- c1f10a2643179ec58f3879764e9e89676d4b5f91
 -0f9bb90100aa304a7f28023ca4173e68b445e8bd
++956e4d7f8958e7065ff2d61cd71519d6f4113d4a
diff --cc src/tclsqlite.c
index 5ea67782a0ca5bb41d8fb712fb2007d3b4f05904,47110cb8d2836379a656b3de89e2b635a489de9d..57dab85d4b56cef367e36c080d8b88c066aadb20
@@@ -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);
  }
  
  /*
index 7d543229c0643e309eed02c917d6ef95c4cd8c05,a2bb4e13a97aa9aa63f3a74b07c254c646398407..cfd647715244a8e252ebb51e2a627e9646c999f5
@@@ -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