Fix over-aggressive optimization of ORDER BY as reported on the mailing list. (CVS 2655)
FossilOrigin-Name: efbb4bc83cd86b6a26d58c5818c58c2e3edaab18
This commit is contained in:
parent
4db38a7092
commit
a21c8495f9
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C All\sregression\stests\snow\spass\swith\sthe\snew\sbounded-memory\ssort\scode.\nThere\sis\sstill\slots\sof\sopportunity\sfor\soptimization,\showever.\s(CVS\s2654)
|
||||
D 2005-09-01T12:16:29
|
||||
C Fix\sover-aggressive\soptimization\sof\sORDER\sBY\sas\sreported\son\sthe\smailing\slist.\s(CVS\s2655)
|
||||
D 2005-09-01T17:47:51
|
||||
F Makefile.in 12784cdce5ffc8dfb707300c34e4f1eb3b8a14f1
|
||||
F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
|
||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||
@ -87,7 +87,7 @@ F src/vdbeapi.c f0d36ff0f06bb5315efac5645b62e99db2c175b8
|
||||
F src/vdbeaux.c afb689d2d5c413ec3448f8f697d07dcd35bd8766
|
||||
F src/vdbefifo.c 9efb94c8c3f4c979ebd0028219483f88e57584f5
|
||||
F src/vdbemem.c 4732fd4d1a75dc38549493d7f9a81d02bf7c59b5
|
||||
F src/where.c bbb973cbbd862b6b872faac39716a3fe13adfb44
|
||||
F src/where.c 92ab208abe6bec15e81616b8c1a619be23ece506
|
||||
F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
|
||||
F test/all.test 7f0988442ab811dfa41793b5b550f5828ce316f3
|
||||
F test/alter.test 9d6837a3d946b73df692b7cef2a7644d2e2f6bc6
|
||||
@ -204,7 +204,7 @@ F test/select4.test c239f516aa31f42f2ef7c6d7cd01105f08f934ca
|
||||
F test/select5.test ae1b5ee2485c5fdc610207a391cfdc23e59c7834
|
||||
F test/select6.test 6559d16ad16edb7d6864f7e74a3d204d0af72486
|
||||
F test/select7.test 1bf795b948c133a15a2a5e99d3270e652ec58ce6
|
||||
F test/sort.test 3b871d6e032f0a6c84d9f3d2d4b226e8fda97de0
|
||||
F test/sort.test 0c33a8ae1c238377ad197387c3872175f40d3843
|
||||
F test/subquery.test ed4ecba1afacb586c86fad1cdb92756a48a90302
|
||||
F test/subselect.test 3f3f7a940dc3195c3139f4d530385cb54665d614
|
||||
F test/sync.test d769caaec48456119316775e35e0fdee2fa852d7
|
||||
@ -235,7 +235,7 @@ F test/vacuum.test 5d4857ae2afc9c20d0edb8acc58bdc8d630126a9
|
||||
F test/vacuum2.test 5d77e98c458bcdbeecc6327de5107179ba1aa095
|
||||
F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
|
||||
F test/view.test ce0f0ad39fa4a3572acffcf1e634850ee151aae0
|
||||
F test/where.test 9a5d0aaf3dd32ecf7b555049a163e2111d95a274
|
||||
F test/where.test 1e9b990d64ca1d9175bcaa96e9f396e67c29ba07
|
||||
F test/where2.test 503e2e2b6abe14c5c10222e72d08ef84c1bf1ffb
|
||||
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
|
||||
F tool/lemon.c c88936c67f6411608db8fa4254d254f509fa40f6
|
||||
@ -306,7 +306,7 @@ F www/tclsqlite.tcl 3df553505b6efcad08f91e9b975deb2e6c9bb955
|
||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
||||
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
||||
P 09db0a24241f9248584250d1728117b8a3159626
|
||||
R a28ffb891eb181a1cfb6d78b2bf4c660
|
||||
P 81259a01f1e85ba50a1d017b1282bf841b16f0a5
|
||||
R 9230534585e06aeccca811dde76702e9
|
||||
U drh
|
||||
Z 0218deeb57fbf0ef13b89eb807c70c2a
|
||||
Z 91850feb3a4a5d6eb41e5886f9a1b320
|
||||
|
@ -1 +1 @@
|
||||
81259a01f1e85ba50a1d017b1282bf841b16f0a5
|
||||
efbb4bc83cd86b6a26d58c5818c58c2e3edaab18
|
@ -16,7 +16,7 @@
|
||||
** so is applicable. Because this module is responsible for selecting
|
||||
** indices, you might also think of this module as the "query optimizer".
|
||||
**
|
||||
** $Id: where.c,v 1.167 2005/08/29 16:40:53 drh Exp $
|
||||
** $Id: where.c,v 1.168 2005/09/01 17:47:51 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
|
||||
@ -813,7 +813,8 @@ static int sortableByRowid(
|
||||
assert( pOrderBy!=0 );
|
||||
assert( pOrderBy->nExpr>0 );
|
||||
p = pOrderBy->a[0].pExpr;
|
||||
if( p->op==TK_COLUMN && p->iTable==base && p->iColumn==-1 ){
|
||||
if( pOrderBy->nExpr==1 && p->op==TK_COLUMN && p->iTable==base
|
||||
&& p->iColumn==-1 ){
|
||||
*pbRev = pOrderBy->a[0].sortOrder;
|
||||
return 1;
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
# This file implements regression tests for SQLite library. The
|
||||
# focus of this file is testing the CREATE TABLE statement.
|
||||
#
|
||||
# $Id: sort.test,v 1.22 2005/08/13 16:13:06 drh Exp $
|
||||
# $Id: sort.test,v 1.23 2005/09/01 17:47:52 drh Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
@ -447,4 +447,21 @@ do_test sort-11.1 {
|
||||
}
|
||||
} {3 4}
|
||||
|
||||
# Trouble reported on the mailing list. Check for overly aggressive
|
||||
# (which is to say, incorrect) optimization of order-by with a rowid
|
||||
# in a join.
|
||||
#
|
||||
do_test sort-12.1 {
|
||||
execsql {
|
||||
create table a (id integer primary key);
|
||||
create table b (id integer primary key, aId integer, text);
|
||||
insert into a values (1);
|
||||
insert into b values (2, 1, 'xxx');
|
||||
insert into b values (1, 1, 'zzz');
|
||||
insert into b values (3, 1, 'yyy');
|
||||
select a.id, b.id, b.text from a join b on (a.id = b.aId)
|
||||
order by a.id, b.text;
|
||||
}
|
||||
} {1 2 xxx 1 3 yyy 1 1 zzz}
|
||||
|
||||
finish_test
|
||||
|
@ -11,7 +11,7 @@
|
||||
# This file implements regression tests for SQLite library. The
|
||||
# focus of this file is testing the use of indices in WHERE clases.
|
||||
#
|
||||
# $Id: where.test,v 1.34 2005/09/01 12:16:29 drh Exp $
|
||||
# $Id: where.test,v 1.35 2005/09/01 17:47:52 drh Exp $
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
@ -590,22 +590,22 @@ do_test where-6.21 {
|
||||
cksort {
|
||||
SELECT y FROM t1 ORDER BY rowid, y LIMIT 3;
|
||||
}
|
||||
} {4 9 16 nosort}
|
||||
} {4 9 16 sort}
|
||||
do_test where-6.22 {
|
||||
cksort {
|
||||
SELECT y FROM t1 ORDER BY rowid, y DESC LIMIT 3;
|
||||
}
|
||||
} {4 9 16 nosort}
|
||||
} {4 9 16 sort}
|
||||
do_test where-6.23 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y>4 ORDER BY rowid, w, x LIMIT 3;
|
||||
}
|
||||
} {9 16 25 nosort}
|
||||
} {9 16 25 sort}
|
||||
do_test where-6.24 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y>=9 ORDER BY rowid, x DESC, w LIMIT 3;
|
||||
}
|
||||
} {9 16 25 nosort}
|
||||
} {9 16 25 sort}
|
||||
do_test where-6.25 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y>4 AND y<25 ORDER BY rowid;
|
||||
@ -620,7 +620,7 @@ do_test where-6.27 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y<=25 ORDER BY _rowid_, w+y;
|
||||
}
|
||||
} {4 9 16 25 nosort}
|
||||
} {4 9 16 25 sort}
|
||||
|
||||
|
||||
# Tests for reverse-order sorting.
|
||||
@ -782,19 +782,19 @@ do_test where-7.31 {
|
||||
} {10201 10000 9801 nosort}
|
||||
do_test where-7.32 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y<25 ORDER BY rowid DESC, x
|
||||
SELECT y FROM t1 WHERE y<25 ORDER BY rowid DESC
|
||||
}
|
||||
} {16 9 4 nosort}
|
||||
do_test where-7.33 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y<=25 ORDER BY rowid DESC, x
|
||||
SELECT y FROM t1 WHERE y<=25 ORDER BY rowid DESC
|
||||
}
|
||||
} {25 16 9 4 nosort}
|
||||
do_test where-7.34 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y<25 AND y>4 ORDER BY rowid DESC, y DESC
|
||||
}
|
||||
} {16 9 nosort}
|
||||
} {16 9 sort}
|
||||
do_test where-7.35 {
|
||||
cksort {
|
||||
SELECT y FROM t1 WHERE y<25 AND y>=4 ORDER BY rowid DESC
|
||||
|
Loading…
x
Reference in New Issue
Block a user