-C Disable\sthe\sskip-scan\soptimization\sfor\sDISTINCT\squeries.\nFix\sfor\sticket\s[ced41c7c7d6b4d36]
-D 2019-07-30T01:17:03.473
+C Improved\sfix\sfor\sticket\s[ced41c7c7d6b4d36]\sthat\skeeps\sskip-scan\senabled,\nbut\savoids\sidentifying\sa\sskip-scan\sas\sorder-distinct\s(because\sit\sis\snot)\nand\sthus\sforces\sa\sseparate\sb-tree\sto\simplement\sthe\sDISTINCT\sclause\sof\sa\nquery.\s\sThis\sundoes\scheck-in\s[a871d69c6de65038]\sand\ssubstitutes\sa\snew\sfix.
+D 2019-07-30T14:22:10.200
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F src/wal.c bbd6838bd79c0a32144d482fb0b6a9d2d1a252fb3b16d5005ec30f2f80413b0d
F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
F src/walker.c d5a94907dcac990e31976be9dc769d17f6a806782593d6aec9d760ee01ec22cd
-F src/where.c 03125c703ae26ae6ec32bc2e5563b38e41082c120d6d6e526c5f0174ce1cbd93
+F src/where.c 01b68cfc7f8a6eba6a0a10b24b7ab3ec11f7244830791560119e14680c756078
F src/whereInt.h 6fab4b6f7e4ae716f112ee09cd1343fc6dde3d4a1831feabc6b3ed3b54b8eef3
F src/wherecode.c 37a1004237d630d785c47bba2290eac652a7a8b0047518eba3cb7c808b604c4a
F src/whereexpr.c 5e559bdd24b06e3bc2e68f258bf751302954dc1e432daf71fdd8098a71462326
F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
F test/shrink.test 1b4330b1fd9e818c04726d45cb28db73087535ce
F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
-F test/skipscan1.test 64ad7a05a3c336e0280ac277c656b029d723071a18afc22beb3e352058e05c03
+F test/skipscan1.test acbde73b530bfc6618626abebad8868d86cc737c61a52a204fdcd02ded049936
F test/skipscan2.test 3eb703ce794f139e7b83567911046298bcde29606116727f9b700ce34f559d2d
F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5
F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 48b518eb6f76fb0beb161d1ebcf3b793efc36262d6d77a1ad5906b6501138e28
-R cc614d2cc68120f92ad0f4eec7ab3887
+P a871d69c6de65038360aa6142fbad22689fb347e526cca56bb83e695c1441fbe
+R 277630844b23a68da6a6e28edcb71a9f
U drh
-Z 570b02f38ebd5b0effe898329e81f79a
+Z 6873f4d0939662a6f4dc4c5cfa6fb08a
-a871d69c6de65038360aa6142fbad22689fb347e526cca56bb83e695c1441fbe
\ No newline at end of file
+89bf0399e87be76e7b264e0a35e8a6d3af0f9e71123a929c20754882b636ca70
\ No newline at end of file
&& 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;
assert( nColumn==nKeyCol+1 || !HasRowid(pIndex->pTable) );
assert( pIndex->aiColumn[nColumn-1]==XN_ROWID
|| !HasRowid(pIndex->pTable));
- isOrderDistinct = IsUniqueIndex(pIndex);
+ isOrderDistinct = IsUniqueIndex(pIndex)
+ && (pLoop->wsFlags & WHERE_SKIPSCAN)==0;
}
/* Loop through all columns of the index and deal with the ones
} {}
# 2019-07-29 Ticket ced41c7c7d6b4d36
-# Skip-scan is disabled for DISTINCT queries
+# A skipscan query is not order-distinct
#
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);
+ INSERT INTO t1 VALUES(3,0,1,NULL);
+ INSERT INTO t1 VALUES(0,4,1,NULL);
+ INSERT INTO t1 VALUES(5,6,1,NULL);
+ INSERT INTO t1 VALUES(0,4,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 |}
+} {3 0 1 NULL | 0 4 1 NULL | 5 6 1 NULL |}
+do_eqp_test skipscan1-3.2 {
+ SELECT DISTINCT quote(c1), quote(c2), quote(c3), quote(c4), '|'
+ FROM t1 WHERE t1.c3 = 1;
+} {
+ QUERY PLAN
+ |--SEARCH TABLE t1 USING INDEX sqlite_autoindex_t1_1 (ANY(c4) AND c3=?)
+ `--USE TEMP B-TREE FOR DISTINCT
+}
finish_test