]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not attempt to use the skip-scan optimization if prior terms of the
authordrh <drh@noemail.net>
Mon, 6 Jan 2020 17:33:09 +0000 (17:33 +0000)
committerdrh <drh@noemail.net>
Mon, 6 Jan 2020 17:33:09 +0000 (17:33 +0000)
index are already used for non-equality constraints.
Ticket [304017f5f04a0035]

FossilOrigin-Name: d7126a9ced86cb0934d5bde2bf535e6b529c361444c99e723f29dd3eb36e7044

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

index 536ec1d9b4fbb4dba0c73549068a79504427f8aa..18452b6c0ad9152e78609f05755a2512673204b4 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Ensure\sthe\sSF_Aggregate\sflag\son\sa\sSELECT\sstatement\sis\sset\sif\sa\sDISTINCT\sis\stransformed\sto\sa\sGROUP\sBY.\sTicket\s[9c944882].
-D 2020-01-06T17:06:12.101
+C Do\snot\sattempt\sto\suse\sthe\sskip-scan\soptimization\sif\sprior\sterms\sof\sthe\nindex\sare\salready\sused\sfor\snon-equality\sconstraints.\nTicket\s[304017f5f04a0035]
+D 2020-01-06T17:33:09.190
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -614,7 +614,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1
 F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
 F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d
-F src/where.c 4ca6c066554247a69dc54616755f68c301c16e23ec36d40170f07763fd0737b3
+F src/where.c df2bea0e0122e853d9f1a8ec68920744166d2a524e338eba92e5470538ecd1f9
 F src/whereInt.h e1d1db6bbec0ba4f345acc338f956c8237a6f06413afa68c6414e82fb5b06745
 F src/wherecode.c 75ad6cbb8dfe585ffe0fc71008750b5158fc4811c3a498327033920b18f0a4be
 F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396
@@ -1340,7 +1340,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 2a64ca7b3e6246bb86b47c9051bfd324603b1b60675fe606513535267713e080
+F test/skipscan1.test ed524bc86f27646b3a297f45d6557b55db338977b6838f8064b196b35848b31b
 F test/skipscan2.test 3eb703ce794f139e7b83567911046298bcde29606116727f9b700ce34f559d2d
 F test/skipscan3.test ec5bab3f81c7038b43450e7b3062e04a198bdbb5
 F test/skipscan5.test 67817a4b6857c47e0e33ba3e506da6f23ef68de2
@@ -1853,7 +1853,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 46f8ef70fb8b3ae00cc081b280f3dff38b1d0f1b52a8f4477ec89dec32e4d813
-R 28c300f982e3504535dbaf5798fe1687
-U dan
-Z 066ef948a76ae495e0e47b3f62fda826
+P 1409758f72c0206cc48f9f7e789382472949523b7056ea46f8dcb93fd3ea60c6
+R bd298e40a86eebf6b18fcd31345471e7
+U drh
+Z 45dcdf5551f03c892f39822b38628702
index a9c784b0ca9d070258ba3ba28a11a61e2b87f470..dc57a3ce65162c74d5a9969ff5d1137ad8fbd5d1 100644 (file)
@@ -1 +1 @@
-1409758f72c0206cc48f9f7e789382472949523b7056ea46f8dcb93fd3ea60c6
\ No newline at end of file
+d7126a9ced86cb0934d5bde2bf535e6b529c361444c99e723f29dd3eb36e7044
\ No newline at end of file
index 075276168c09c6ca0a145f04f28f7b8c5e9e319f..7fb27191a334eb11006e6d75aac50801d9afad8b 100644 (file)
@@ -2431,8 +2431,9 @@ static int whereLoopAddBtreeIndex(
 
   pNew = pBuilder->pNew;
   if( db->mallocFailed ) return SQLITE_NOMEM_BKPT;
-  WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d\n",
-                     pProbe->pTable->zName,pProbe->zName, pNew->u.btree.nEq));
+  WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d, nSkip=%d\n",
+                     pProbe->pTable->zName,pProbe->zName,
+                     pNew->u.btree.nEq, pNew->nSkip));
 
   assert( (pNew->wsFlags & WHERE_VIRTUALTABLE)==0 );
   assert( (pNew->wsFlags & WHERE_TOP_LIMIT)==0 );
@@ -2729,6 +2730,7 @@ static int whereLoopAddBtreeIndex(
   assert( 42==sqlite3LogEst(18) );
   if( saved_nEq==saved_nSkip
    && saved_nEq+1<pProbe->nKeyCol
+   && saved_nEq==pNew->nLTerm
    && pProbe->noSkipScan==0
    && OptimizationEnabled(db, SQLITE_SkipScan)
    && pProbe->aiRowLogEst[saved_nEq+1]>=42  /* TUNING: Minimum for skip-scan */
index da9df8fe5eb56479b38d4a7eb8dae0f9cc894484..367cd2a10837d9af6a0be11fb0264c8b37a864a7 100644 (file)
@@ -398,4 +398,25 @@ do_eqp_test skipscan1-3.2 {
   `--USE TEMP B-TREE FOR DISTINCT
 }
 
+# 2020-01-06 ticket 304017f5f04a0035
+#
+reset_db
+do_execsql_test skipscan1-4.10 {
+  CREATE TABLE t1(a,b INT);
+  INSERT INTO t1(a,b) VALUES(1,2),(3,3),(4,5);
+  CREATE UNIQUE INDEX i1 ON t1(b,b,a,a,a,a,a,b,a);
+  ANALYZE;
+  DROP TABLE IF EXISTS sqlite_stat4;
+  INSERT INTO sqlite_stat1 VALUES('t1','i1','30 30 30 2 2 2 2 2 2 2');
+  ANALYZE sqlite_master;
+
+  SELECT DISTINCT a
+    FROM t1
+   WHERE a = b
+     AND a = 3
+     AND b IN (1,3,2,4)
+     AND b >= 0
+     AND a <= 10;
+} {3}
+
 finish_test