]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Change the EQP output for the min/max optimization from "SCAN" to "SEARCH".
authordrh <drh@noemail.net>
Mon, 15 Nov 2010 21:50:19 +0000 (21:50 +0000)
committerdrh <drh@noemail.net>
Mon, 15 Nov 2010 21:50:19 +0000 (21:50 +0000)
Other changes in where.c in support of full branch coverage testing.

FossilOrigin-Name: d52b593978aa1776af7aeb957c4f8df0c5cb7e43

manifest
manifest.uuid
src/where.c
test/eqp.test

index 728cad39984b1440e73357f40b987612d574abbd..6afe3705c51e7a85959b695cc713d3bb34b6e0fd 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-C Fix\sthe\sEQP\slogic\sso\sthat\sit\scorrectly\sreports\sOOM\serrors\swhile\sformatting\n"detail"\stext.
-D 2010-11-15T16:29:31
+C Change\sthe\sEQP\soutput\sfor\sthe\smin/max\soptimization\sfrom\s"SCAN"\sto\s"SEARCH".\nOther\schanges\sin\swhere.c\sin\ssupport\sof\sfull\sbranch\scoverage\stesting.
+D 2010-11-15T21:50:20
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in e7a59672eaeb04408d1fa8501618d7501a3c5e39
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -242,7 +242,7 @@ F src/vtab.c b297e8fa656ab5e66244ab15680d68db0adbec30
 F src/wal.c f26b8d297bd11cb792e609917f9d4c6718ac8e0e
 F src/wal.h c1aac6593a0b02b15dc625987e619edeab39292e
 F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f
-F src/where.c f4023c5f2fa083f411f7d6fc8d277b7770196847
+F src/where.c 6ba0540b6f0239351f2e29b66f1565fe18ef53fe
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
 F test/all.test 6745008c144bd2956d58864d21f7b304689c1cce
@@ -368,7 +368,7 @@ F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
 F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398
 F test/enc3.test 5c550d59ff31dccdba5d1a02ae11c7047d77c041
 F test/enc4.test 4b575ef09e0eff896e73bd24076f96c2aa6a42de
-F test/eqp.test 0a76679df56eba3709fa9f6ce6761a6c6f8401e7
+F test/eqp.test 7cc9b11f92398843928c2c63525192d4dfdf8df6
 F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3
 F test/exclusive.test 53e1841b422e554cecf0160f937c473d6d0e3062
 F test/exclusive2.test 76e63c05349cb70d09d60b99d2ae625525ff5155
@@ -889,14 +889,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 88a854e18fc6bd619fa8d8a911abff50a9b76b9e
-R 78739c63fada478c89d9f3f543943196
+P 136c2ac24ee1663bc0904bce1a619ecef3d11c1c
+R 5f0193dbeb0cbc5cfdd968905645aae6
 U drh
-Z 248d217c09792745bf7000ce93c07b4f
+Z 99e502199a00f309bbcf4dd70b11c16e
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.6 (GNU/Linux)
 
-iD8DBQFM4V/uoxKgR168RlERAp6dAJ48aRXSbqzfVJi4Eb9vXXw3gcK9oQCZAYNE
-zpwmsrlBP5VyywolG2MEBs0=
-=8eQE
+iD8DBQFM4asfoxKgR168RlERAr0gAJ9X2nb2tbe+17ybbefiHGEsu/utZgCfQE+r
+khXtw5KolxWbb2vTQFeG+m0=
+=SW32
 -----END PGP SIGNATURE-----
index f4e89ee29e6aace622f131aa3b99bca96d494646..1e03318a094e602e56321bb94d6849324d0dd601 100644 (file)
@@ -1 +1 @@
-136c2ac24ee1663bc0904bce1a619ecef3d11c1c
\ No newline at end of file
+d52b593978aa1776af7aeb957c4f8df0c5cb7e43
\ No newline at end of file
index 93473669426ac9377f2caeb64167c86327bf3e9f..1d6641ee8b1eadb3e3313813d15ef012285ba059 100644 (file)
@@ -238,6 +238,7 @@ struct WhereCost {
 #define WHERE_IN_ABLE      0x000f1000  /* Able to support an IN operator */
 #define WHERE_TOP_LIMIT    0x00100000  /* x<EXPR or x<=EXPR constraint */
 #define WHERE_BTM_LIMIT    0x00200000  /* x>EXPR or x>=EXPR constraint */
+#define WHERE_BOTH_LIMIT   0x00300000  /* Both x>EXPR and x<EXPR */
 #define WHERE_IDX_ONLY     0x00800000  /* Use index only - omit table */
 #define WHERE_ORDERBY      0x01000000  /* Output will appear in correct order */
 #define WHERE_REVERSE      0x02000000  /* Scan in reverse order */
@@ -3226,7 +3227,9 @@ static void explainOneScan(
 
     if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
 
-    isSearch = (pLevel->plan.nEq>0 || flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT));
+    isSearch = (pLevel->plan.nEq>0)
+             || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
+             || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
 
     zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
     if( pItem->pSelect ){
@@ -3253,7 +3256,7 @@ static void explainOneScan(
 
       if( flags&WHERE_ROWID_EQ ){
         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
-      }else if( flags&WHERE_BTM_LIMIT && flags&WHERE_TOP_LIMIT ){
+      }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
       }else if( flags&WHERE_BTM_LIMIT ){
         zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
@@ -3269,6 +3272,7 @@ static void explainOneScan(
     }
 #endif
     if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){
+      testcase( wctrlFlags & WHERE_ORDERBY_MIN );
       nRow = 1;
     }else{
       nRow = (sqlite3_int64)pLevel->plan.nRow;
@@ -3689,7 +3693,7 @@ static Bitmask codeOneLoopStart(
     r1 = sqlite3GetTempReg(pParse);
     testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT );
     testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT );
-    if( pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT) ){
+    if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){
       sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
       sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont);
     }
index 4966d5ce0c472d08bf29b037bea9377cb0532d67..1758f9c6a65a2f24f4a73ab0e3c7c428f1d57d82 100644 (file)
@@ -114,10 +114,10 @@ det 2.2.6 "SELECT DISTINCT t2.x FROM t1, t2 ORDER BY t2.x" {
 }
 
 det 2.3.1 "SELECT max(x) FROM t2" {
-  0 0 0 {SCAN TABLE t2 USING COVERING INDEX t2i1 (~1 rows)}
+  0 0 0 {SEARCH TABLE t2 USING COVERING INDEX t2i1 (~1 rows)}
 }
 det 2.3.2 "SELECT min(x) FROM t2" {
-  0 0 0 {SCAN TABLE t2 USING COVERING INDEX t2i1 (~1 rows)}
+  0 0 0 {SEARCH TABLE t2 USING COVERING INDEX t2i1 (~1 rows)}
 }
 det 2.3.3 "SELECT min(x), max(x) FROM t2" {
   0 0 0 {SCAN TABLE t2 (~1000000 rows)}
@@ -494,4 +494,3 @@ do_peqp_test 6.1 {
 
 
 finish_test
-