From: drh Date: Tue, 30 Jul 2019 01:17:03 +0000 (+0000) Subject: Disable the skip-scan optimization for DISTINCT queries. X-Git-Tag: version-3.30.0~184 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=822bc969f65f9d4dfb77df8c9221c058d16c9580;p=thirdparty%2Fsqlite.git Disable the skip-scan optimization for DISTINCT queries. Fix for ticket [ced41c7c7d6b4d36] FossilOrigin-Name: a871d69c6de65038360aa6142fbad22689fb347e526cca56bb83e695c1441fbe --- diff --git a/manifest b/manifest index 4f979abb1a..f940ffbed6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Convert\san\sassert()\sin\sR-Tree\sinto\sa\sdatabase\scorruption\sdetection\scase. -D 2019-07-29T17:18:45.497 +C Disable\sthe\sskip-scan\soptimization\sfor\sDISTINCT\squeries.\nFix\sfor\sticket\s[ced41c7c7d6b4d36] +D 2019-07-30T01:17:03.473 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -609,7 +609,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9 F src/wal.c bbd6838bd79c0a32144d482fb0b6a9d2d1a252fb3b16d5005ec30f2f80413b0d F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a F src/walker.c d5a94907dcac990e31976be9dc769d17f6a806782593d6aec9d760ee01ec22cd -F src/where.c a3c9a0e1215c0e67e508014084e8f47271895b56f780fc26ac57be34fac33c1a +F src/where.c 03125c703ae26ae6ec32bc2e5563b38e41082c120d6d6e526c5f0174ce1cbd93 F src/whereInt.h 6fab4b6f7e4ae716f112ee09cd1343fc6dde3d4a1831feabc6b3ed3b54b8eef3 F src/wherecode.c 37a1004237d630d785c47bba2290eac652a7a8b0047518eba3cb7c808b604c4a F src/whereexpr.c 5e559bdd24b06e3bc2e68f258bf751302954dc1e432daf71fdd8098a71462326 @@ -1329,7 +1329,7 @@ F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3 F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5 F test/shrink.test 1b4330b1fd9e818c04726d45cb28db73087535ce F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329 -F test/skipscan1.test b1fef3046d555836712d4a3a7c8ae8193356c6a15bee59cb3976e4ee98596c97 +F test/skipscan1.test 64ad7a05a3c336e0280ac277c656b029d723071a18afc22beb3e352058e05c03 F test/skipscan2.test 3eb703ce794f139e7b83567911046298bcde29606116727f9b700ce34f559d2d F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5 F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2 @@ -1838,7 +1838,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 11f7f94f1c5d761e7f381e277658b7e857cc369283996c509061de55fd6aad52 -R 4b6136e9b391e089f928150a88e88819 +P 48b518eb6f76fb0beb161d1ebcf3b793efc36262d6d77a1ad5906b6501138e28 +R cc614d2cc68120f92ad0f4eec7ab3887 U drh -Z d18c141f950c38e740b9d65f9c3aa0d1 +Z 570b02f38ebd5b0effe898329e81f79a diff --git a/manifest.uuid b/manifest.uuid index 95480f6001..ace1a0b23d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -48b518eb6f76fb0beb161d1ebcf3b793efc36262d6d77a1ad5906b6501138e28 \ No newline at end of file +a871d69c6de65038360aa6142fbad22689fb347e526cca56bb83e695c1441fbe \ No newline at end of file diff --git a/src/where.c b/src/where.c index 2e6ca3acf2..27c407976a 100644 --- a/src/where.c +++ b/src/where.c @@ -2723,6 +2723,7 @@ static int whereLoopAddBtreeIndex( && pProbe->noSkipScan==0 && OptimizationEnabled(db, SQLITE_SkipScan) && pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */ + && (pWInfo->wctrlFlags & (WHERE_WANT_DISTINCT|WHERE_DISTINCTBY))==0 && (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK ){ LogEst nIter; diff --git a/test/skipscan1.test b/test/skipscan1.test index 6aaf5335fe..ad3b82db78 100644 --- a/test/skipscan1.test +++ b/test/skipscan1.test @@ -373,4 +373,21 @@ do_execsql_test skipscan1-2.3 { SELECT a,b,c,d,'|' FROM t6 WHERE d<>99 AND b=345 ORDER BY a DESC; } {} +# 2019-07-29 Ticket ced41c7c7d6b4d36 +# Skip-scan is disabled for DISTINCT queries +# +db close +sqlite3 db :memory: +do_execsql_test skipscan1-3.1 { + CREATE TABLE t1 (c1, c2, c3, c4, PRIMARY KEY(c4, c3)); + INSERT INTO t1 VALUES(NULL,0,1,NULL); + INSERT INTO t1 VALUES(0,NULL,1,NULL); + INSERT INTO t1 VALUES(NULL,NULL,1,NULL); + ANALYZE sqlite_master; + INSERT INTO sqlite_stat1 VALUES('t1','sqlite_autoindex_t1_1','18 18 6'); + ANALYZE sqlite_master; + SELECT DISTINCT quote(c1), quote(c2), quote(c3), quote(c4), '|' + FROM t1 WHERE t1.c3 = 1; +} {NULL 0 1 NULL | 0 NULL 1 NULL | NULL NULL 1 NULL |} + finish_test