]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix an incorrect cost computation for sorting (introduced just a few
authordrh <drh@noemail.net>
Thu, 25 Feb 2016 23:21:41 +0000 (23:21 +0000)
committerdrh <drh@noemail.net>
Thu, 25 Feb 2016 23:21:41 +0000 (23:21 +0000)
check-ins ago).  Should be NlogN, not NloglogN.

FossilOrigin-Name: 2459d3238853951bc3a507dd975e7ec921cf8446

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

index 1b636cf0751911c59fb784f377f5afe752a749c4..0683bae1ecba6ea2abde3345f33c1b2edb427032 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Small\soptimization\sin\sFK\shandling.
-D 2016-02-25T21:38:28.541
+C Fix\san\sincorrect\scost\scomputation\sfor\ssorting\s(introduced\sjust\sa\sfew\ncheck-ins\sago).\s\sShould\sbe\sNlogN,\snot\sNloglogN.
+D 2016-02-25T23:21:41.832
 F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 28fc4ee02333996d31b3602b39eeb8e609a89ce4
@@ -428,7 +428,7 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
 F src/wal.c 10deb6b43887662691e5f53d10b3c171c401169b
 F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c
 F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354
-F src/where.c b21a2b3cee42e1db4f14c8fc5124f607e0c668c0
+F src/where.c 32051597188dc632bafb32d50a9c3a04fb97ce39
 F src/whereInt.h 93297d56edd137b7ea004490690fb6e2ce028a34
 F src/wherecode.c 39c1ef4598bedf1d66249334c74efd23ddd182ac
 F src/whereexpr.c fb87944b1254234e5bba671aaf6dee476241506a
@@ -1327,7 +1327,7 @@ F test/walro.test 34422d1d95aaff0388f0791ec20edb34e2a3ed57
 F test/walshared.test 0befc811dcf0b287efae21612304d15576e35417
 F test/walslow.test c05c68d4dc2700a982f89133ce103a1a84cc285f
 F test/walthread.test de8dbaf6d9e41481c460ba31ca61e163d7348f8e
-F test/where.test 9902a3d84e9bc80357a2c54ed0e76c0d6d04a867
+F test/where.test c33bf57e48a34d6cc98018d779a577c2f61ff312
 F test/where2.test af78c55589cbc82d793449493adba0dc3d659f23
 F test/where3.test 1ad55ba900bd7747f98b6082e65bd3e442c5004e
 F test/where4.test 4a371bfcc607f41d233701bdec33ac2972908ba8
@@ -1429,7 +1429,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh a98af506df552f3b3c0d904f94e4cdc4e1a6d598
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P d64d005eb5df2e3eb1248fc8eff8b1b683e48c74
-R ab8765cbaf5fbfbed19ecf7263e09682
-U mistachkin
-Z ff9c90565884f74ae6db48ba3f5b6f95
+P e0d25913b73a813f5987aa70b364b00f19351663
+R 8ecd868c4f09ad809b17fd8b0dd4a502
+U drh
+Z 87b6be9293374710fdcde53ff54603a2
index 90985bbea986c7048f8c95ad4c84e6a67f784b2b..59f4369738c574baf02f730b34f7a6d74e35f316 100644 (file)
@@ -1 +1 @@
-e0d25913b73a813f5987aa70b364b00f19351663
\ No newline at end of file
+2459d3238853951bc3a507dd975e7ec921cf8446
\ No newline at end of file
index a68dcf5bfc39e904fea8dad13c46d0b4aa480bf1..71d3cb01ef583aea591d5872a0a4e349113f4b77 100644 (file)
@@ -3463,9 +3463,8 @@ static LogEst whereSortingCost(
 
   /* Multiple by log(M) where M is the number of output rows.
   ** Use the LIMIT for M if it is smaller */
-  if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 ){
-    LogEst m = sqlite3LogEst(pWInfo->iLimit);
-    if( m<nRow ) nRow = m;
+  if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 && pWInfo->iLimit<nRow ){
+    nRow = pWInfo->iLimit;
   }
   rSortCost += estLog(nRow);
   return rSortCost;
index 0b5bb934d06b9c5c39c5ab453677d314ab3dae17..2b0b7dcfaf0183494a522761d12804f85bcb1e9c 100644 (file)
@@ -573,11 +573,17 @@ do_test where-6.6 {
     SELECT * FROM t3 WHERE a>0 ORDER BY a LIMIT 3
   }
 } {1 100 4 2 99 9 3 98 16 nosort}
-do_test where-6.7 {
+do_test where-6.7.1 {
   cksort {
-    SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 3
+    SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 10
   }
-} {1 100 4 2 99 9 3 98 16 nosort}
+} {/1 100 4 2 99 9 3 98 16 .* nosort/}
+do_test where-6.7.2 {
+  cksort {
+    SELECT * FROM t3 WHERE b>0 ORDER BY a LIMIT 1
+  }
+} {1 100 4 sort}
+exit
 ifcapable subquery {
   do_test where-6.8a {
     cksort {