Improved testing of the min/max optimization. (CVS 5373)
FossilOrigin-Name: fa07c360b708324c47c8e9931f1e2b1b24e4faf8
This commit is contained in:
parent
49fc1f60b0
commit
0880a74633
18
manifest
18
manifest
@ -1,5 +1,5 @@
|
|||||||
C Prevent\sthe\sflattening\soptimization\sfrom\stransforming\sa\sto\sa\squery\swith\san\sillegal\sORDER\sBY\sclause.\s(CVS\s5372)
|
C Improved\stesting\sof\sthe\smin/max\soptimization.\s(CVS\s5373)
|
||||||
D 2008-07-08T17:43:57
|
D 2008-07-08T18:05:26
|
||||||
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
|
||||||
F Makefile.in 325dfac0a0dd1cb4d975f1ace6453157892e6042
|
F Makefile.in 325dfac0a0dd1cb4d975f1ace6453157892e6042
|
||||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||||
@ -140,7 +140,7 @@ F src/pragma.c 6fad83fbcc7ec6e76d91fe2805fe972ff3af6a0c
|
|||||||
F src/prepare.c aba51dad52308e3d9d2074d8ff4e612e7f1cab51
|
F src/prepare.c aba51dad52308e3d9d2074d8ff4e612e7f1cab51
|
||||||
F src/printf.c 8b063da9dcde26b7c500a01444b718d86f21bc6e
|
F src/printf.c 8b063da9dcde26b7c500a01444b718d86f21bc6e
|
||||||
F src/random.c 5c754319d38abdd6acd74601ee0105504adc508a
|
F src/random.c 5c754319d38abdd6acd74601ee0105504adc508a
|
||||||
F src/select.c 183a68a0af4ce20c8ebe684dd1581ce898c9f48f
|
F src/select.c 46997b3399166b3c4b0d8db25c35ca099c277a50
|
||||||
F src/shell.c 484e7297e066f22830f9c15d7abbcdd2acb097b0
|
F src/shell.c 484e7297e066f22830f9c15d7abbcdd2acb097b0
|
||||||
F src/sqlite.h.in 22c32cedf7e435d5b3bb8564ce0a640c40dbbfb1
|
F src/sqlite.h.in 22c32cedf7e435d5b3bb8564ce0a640c40dbbfb1
|
||||||
F src/sqlite3ext.h 1e3887c9bd3ae66cb599e922824b04cd0d0f2c3e
|
F src/sqlite3ext.h 1e3887c9bd3ae66cb599e922824b04cd0d0f2c3e
|
||||||
@ -190,7 +190,7 @@ F src/vdbeblob.c 9345f6dcd675fdcfdb537d2d2f487542d9ea136a
|
|||||||
F src/vdbefifo.c c46dae1194e4277bf007144d7e5b0c0b1c24f136
|
F src/vdbefifo.c c46dae1194e4277bf007144d7e5b0c0b1c24f136
|
||||||
F src/vdbemem.c ee1a032b44ab59bd83a064544a0895003eecaec1
|
F src/vdbemem.c ee1a032b44ab59bd83a064544a0895003eecaec1
|
||||||
F src/vtab.c 2096c03ec5540a43c8c73a8f43407dfd3549a982
|
F src/vtab.c 2096c03ec5540a43c8c73a8f43407dfd3549a982
|
||||||
F src/where.c 6a22ceb86d774c4428ac53196f721bb14e6cbdfa
|
F src/where.c 1422d95647c6f3ca7b8e9cf4c44ed3f255fa2637
|
||||||
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
|
F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
|
||||||
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
|
||||||
F test/all.test ed6849e7a425620d5d4388409f3b15901b5bc2e7
|
F test/all.test ed6849e7a425620d5d4388409f3b15901b5bc2e7
|
||||||
@ -403,7 +403,7 @@ F test/manydb.test 8de36b8d33aab5ef295b11d9e95310aeded31af8
|
|||||||
F test/memdb.test a67bda4ff90a38f2b19f6c7f95aa7289e051d893
|
F test/memdb.test a67bda4ff90a38f2b19f6c7f95aa7289e051d893
|
||||||
F test/memleak.test d2d2a1ff7105d32dc3fdf691458cf6cba58c7217
|
F test/memleak.test d2d2a1ff7105d32dc3fdf691458cf6cba58c7217
|
||||||
F test/memsubsys1.test 209156a07aaf99d095ef2e3a3a0acd5d55c978f6
|
F test/memsubsys1.test 209156a07aaf99d095ef2e3a3a0acd5d55c978f6
|
||||||
F test/minmax.test 5d56f08a7765dfb5c1fb303333f7444dacb37bef
|
F test/minmax.test 722d80816f7e096bf2c04f4111f1a6c1ba65453d
|
||||||
F test/minmax2.test 33504c01a03bd99226144e4b03f7631a274d66e0
|
F test/minmax2.test 33504c01a03bd99226144e4b03f7631a274d66e0
|
||||||
F test/minmax3.test 05110398e065875b3d9315892889d3c87fccfe2b
|
F test/minmax3.test 05110398e065875b3d9315892889d3c87fccfe2b
|
||||||
F test/misc1.test 1b89c02c4a33b49dee4cd1d20d161aaaba719075
|
F test/misc1.test 1b89c02c4a33b49dee4cd1d20d161aaaba719075
|
||||||
@ -600,7 +600,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
|
|||||||
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
||||||
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
|
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
|
||||||
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
|
||||||
P d74fbb81ca3f973ac46534344e5076afc5dd5491
|
P 6c2adade34fdbe344cf73f6bac951e0c37dd003b
|
||||||
R e1ce45277dc48c16e1fe351ba15bc433
|
R f6042400124ac27240401c0ca180db80
|
||||||
U danielk1977
|
U drh
|
||||||
Z 27ce1f86b9768bde4d591564b2a9be66
|
Z fc19ef422ff146e4058b15fdc6559cae
|
||||||
|
@ -1 +1 @@
|
|||||||
6c2adade34fdbe344cf73f6bac951e0c37dd003b
|
fa07c360b708324c47c8e9931f1e2b1b24e4faf8
|
@ -12,7 +12,7 @@
|
|||||||
** This file contains C code routines that are called by the parser
|
** This file contains C code routines that are called by the parser
|
||||||
** to handle SELECT statements in SQLite.
|
** to handle SELECT statements in SQLite.
|
||||||
**
|
**
|
||||||
** $Id: select.c,v 1.448 2008/07/08 17:43:57 danielk1977 Exp $
|
** $Id: select.c,v 1.449 2008/07/08 18:05:26 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
|
|
||||||
@ -4241,7 +4241,7 @@ int sqlite3Select(
|
|||||||
if( flag ){
|
if( flag ){
|
||||||
pDel = pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->pList);
|
pDel = pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->pList);
|
||||||
if( pMinMax && !db->mallocFailed ){
|
if( pMinMax && !db->mallocFailed ){
|
||||||
pMinMax->a[0].sortOrder = ((flag==WHERE_ORDERBY_MIN)?0:1);
|
pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN;
|
||||||
pMinMax->a[0].pExpr->op = TK_COLUMN;
|
pMinMax->a[0].pExpr->op = TK_COLUMN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
** so is applicable. Because this module is responsible for selecting
|
** so is applicable. Because this module is responsible for selecting
|
||||||
** indices, you might also think of this module as the "query optimizer".
|
** indices, you might also think of this module as the "query optimizer".
|
||||||
**
|
**
|
||||||
** $Id: where.c,v 1.311 2008/06/26 18:04:03 danielk1977 Exp $
|
** $Id: where.c,v 1.312 2008/07/08 18:05:26 drh Exp $
|
||||||
*/
|
*/
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
|
|
||||||
@ -2157,7 +2157,8 @@ WhereInfo *sqlite3WhereBegin(
|
|||||||
ppIdxInfo);
|
ppIdxInfo);
|
||||||
flags = WHERE_VIRTUALTABLE;
|
flags = WHERE_VIRTUALTABLE;
|
||||||
pIndex = *ppIdxInfo;
|
pIndex = *ppIdxInfo;
|
||||||
if( pIndex && pIndex->orderByConsumed ){
|
assert( pIndex!=0 );
|
||||||
|
if( pIndex->orderByConsumed ){
|
||||||
flags = WHERE_VIRTUALTABLE | WHERE_ORDERBY;
|
flags = WHERE_VIRTUALTABLE | WHERE_ORDERBY;
|
||||||
}
|
}
|
||||||
pIdx = 0;
|
pIdx = 0;
|
||||||
@ -2546,8 +2547,9 @@ WhereInfo *sqlite3WhereBegin(
|
|||||||
if( (wflags&WHERE_ORDERBY_MIN)!=0
|
if( (wflags&WHERE_ORDERBY_MIN)!=0
|
||||||
&& (pLevel->flags&WHERE_ORDERBY)
|
&& (pLevel->flags&WHERE_ORDERBY)
|
||||||
&& (pIdx->nColumn>nEq)
|
&& (pIdx->nColumn>nEq)
|
||||||
&& (pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq])
|
|
||||||
){
|
){
|
||||||
|
assert( pOrderBy->nExpr==1 );
|
||||||
|
assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] );
|
||||||
isMinQuery = 1;
|
isMinQuery = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
160
test/minmax.test
160
test/minmax.test
@ -13,7 +13,7 @@
|
|||||||
# aggregate min() and max() functions and which are handled as
|
# aggregate min() and max() functions and which are handled as
|
||||||
# as a special case.
|
# as a special case.
|
||||||
#
|
#
|
||||||
# $Id: minmax.test,v 1.20 2008/01/05 17:39:30 danielk1977 Exp $
|
# $Id: minmax.test,v 1.21 2008/07/08 18:05:26 drh Exp $
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
@ -84,6 +84,19 @@ do_test minmax-1.10 {
|
|||||||
set sqlite_search_count
|
set sqlite_search_count
|
||||||
} {19}
|
} {19}
|
||||||
|
|
||||||
|
do_test minmax-1.21 {
|
||||||
|
execsql {SELECT min(x) FROM t1 WHERE x=5}
|
||||||
|
} {5}
|
||||||
|
do_test minmax-1.22 {
|
||||||
|
execsql {SELECT min(x) FROM t1 WHERE x>=5}
|
||||||
|
} {5}
|
||||||
|
do_test minmax-1.23 {
|
||||||
|
execsql {SELECT min(x) FROM t1 WHERE x>=4.5}
|
||||||
|
} {5}
|
||||||
|
do_test minmax-1.24 {
|
||||||
|
execsql {SELECT min(x) FROM t1 WHERE x<4.5}
|
||||||
|
} {1}
|
||||||
|
|
||||||
do_test minmax-2.0 {
|
do_test minmax-2.0 {
|
||||||
execsql {
|
execsql {
|
||||||
CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
|
CREATE TABLE t2(a INTEGER PRIMARY KEY, b);
|
||||||
@ -381,4 +394,149 @@ do_test minmax-10.12 {
|
|||||||
} {{} {}}
|
} {{} {}}
|
||||||
|
|
||||||
|
|
||||||
|
do_test minmax-11.1 {
|
||||||
|
execsql {
|
||||||
|
CREATE INDEX t1i2 ON t1(y,x);
|
||||||
|
SELECT min(x) FROM t1 WHERE y=5;
|
||||||
|
}
|
||||||
|
} {16}
|
||||||
|
do_test minmax-11.2 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(x) FROM t1 WHERE y=5;
|
||||||
|
}
|
||||||
|
} {20}
|
||||||
|
do_test minmax-11.3 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(x) FROM t1 WHERE y=6;
|
||||||
|
}
|
||||||
|
} {{}}
|
||||||
|
do_test minmax-11.4 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(x) FROM t1 WHERE y=6;
|
||||||
|
}
|
||||||
|
} {{}}
|
||||||
|
do_test minmax-11.5 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(x) FROM t1 WHERE y=1;
|
||||||
|
}
|
||||||
|
} {1}
|
||||||
|
do_test minmax-11.6 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(x) FROM t1 WHERE y=1;
|
||||||
|
}
|
||||||
|
} {1}
|
||||||
|
do_test minmax-11.7 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(x) FROM t1 WHERE y=0;
|
||||||
|
}
|
||||||
|
} {{}}
|
||||||
|
do_test minmax-11.8 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(x) FROM t1 WHERE y=0;
|
||||||
|
}
|
||||||
|
} {{}}
|
||||||
|
do_test minmax-11.9 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(x) FROM t1 WHERE y=5 AND x>=17.5;
|
||||||
|
}
|
||||||
|
} {18}
|
||||||
|
do_test minmax-11.10 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(x) FROM t1 WHERE y=5 AND x>=17.5;
|
||||||
|
}
|
||||||
|
} {20}
|
||||||
|
|
||||||
|
do_test minmax-12.1 {
|
||||||
|
execsql {
|
||||||
|
CREATE TABLE t7(a,b,c);
|
||||||
|
INSERT INTO t7 SELECT y, x, x*y FROM t1;
|
||||||
|
INSERT INTO t7 SELECT y, x, x*y+1000 FROM t1;
|
||||||
|
CREATE INDEX t7i1 ON t7(a,b,c);
|
||||||
|
SELECT min(a) FROM t7;
|
||||||
|
}
|
||||||
|
} {1}
|
||||||
|
do_test minmax-12.2 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(a) FROM t7;
|
||||||
|
}
|
||||||
|
} {5}
|
||||||
|
do_test minmax-12.3 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(a) FROM t7 WHERE a=5;
|
||||||
|
}
|
||||||
|
} {5}
|
||||||
|
do_test minmax-12.4 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(b) FROM t7 WHERE a=5;
|
||||||
|
}
|
||||||
|
} {16}
|
||||||
|
do_test minmax-12.5 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(b) FROM t7 WHERE a=5;
|
||||||
|
}
|
||||||
|
} {20}
|
||||||
|
do_test minmax-12.6 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(b) FROM t7 WHERE a=4;
|
||||||
|
}
|
||||||
|
} {8}
|
||||||
|
do_test minmax-12.7 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(b) FROM t7 WHERE a=4;
|
||||||
|
}
|
||||||
|
} {15}
|
||||||
|
do_test minmax-12.8 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(c) FROM t7 WHERE a=4 AND b=10;
|
||||||
|
}
|
||||||
|
} {40}
|
||||||
|
do_test minmax-12.9 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(c) FROM t7 WHERE a=4 AND b=10;
|
||||||
|
}
|
||||||
|
} {1040}
|
||||||
|
do_test minmax-12.10 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(rowid) FROM t7;
|
||||||
|
}
|
||||||
|
} {1}
|
||||||
|
do_test minmax-12.11 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(rowid) FROM t7;
|
||||||
|
}
|
||||||
|
} {40}
|
||||||
|
do_test minmax-12.12 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(rowid) FROM t7 WHERE a=3;
|
||||||
|
}
|
||||||
|
} {4}
|
||||||
|
do_test minmax-12.13 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(rowid) FROM t7 WHERE a=3;
|
||||||
|
}
|
||||||
|
} {27}
|
||||||
|
do_test minmax-12.14 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(rowid) FROM t7 WHERE a=3 AND b=5;
|
||||||
|
}
|
||||||
|
} {5}
|
||||||
|
do_test minmax-12.15 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(rowid) FROM t7 WHERE a=3 AND b=5;
|
||||||
|
}
|
||||||
|
} {25}
|
||||||
|
do_test minmax-12.16 {
|
||||||
|
execsql {
|
||||||
|
SELECT min(rowid) FROM t7 WHERE a=3 AND b=5 AND c=1015;
|
||||||
|
}
|
||||||
|
} {25}
|
||||||
|
do_test minmax-12.17 {
|
||||||
|
execsql {
|
||||||
|
SELECT max(rowid) FROM t7 WHERE a=3 AND b=5 AND c=15;
|
||||||
|
}
|
||||||
|
} {5}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Loading…
Reference in New Issue
Block a user