194a6d998Sdrh# 2012 February 02 294a6d998Sdrh# 394a6d998Sdrh# The author disclaims copyright to this source code. In place of 494a6d998Sdrh# a legal notice, here is a blessing: 594a6d998Sdrh# 694a6d998Sdrh# May you do good and not evil. 794a6d998Sdrh# May you find forgiveness for yourself and forgive others. 894a6d998Sdrh# May you share freely, never taking more than you give. 994a6d998Sdrh# 1094a6d998Sdrh#*********************************************************************** 1194a6d998Sdrh# 1294a6d998Sdrh# Test for queries of the form: 1394a6d998Sdrh# 1494a6d998Sdrh# SELECT p, max(q) FROM t1; 1594a6d998Sdrh# 1694a6d998Sdrh# Demonstration that the value returned for p is on the same row as 1794a6d998Sdrh# the maximum q. 1894a6d998Sdrh# 1994a6d998Sdrh 2094a6d998Sdrhset testdir [file dirname $argv0] 2194a6d998Sdrhsource $testdir/tester.tcl 22ddd7421cSdanset testprefix minmax4 2394a6d998Sdrh 242f56da3fSdanifcapable !compound { 252f56da3fSdan finish_test 262f56da3fSdan return 272f56da3fSdan} 282f56da3fSdan 2994a6d998Sdrhdo_test minmax4-1.1 { 3094a6d998Sdrh db eval { 3194a6d998Sdrh CREATE TABLE t1(p,q); 3294a6d998Sdrh SELECT p, max(q) FROM t1; 3394a6d998Sdrh } 3494a6d998Sdrh} {{} {}} 3594a6d998Sdrhdo_test minmax4-1.2 { 3694a6d998Sdrh db eval { 3794a6d998Sdrh SELECT p, min(q) FROM t1; 3894a6d998Sdrh } 3994a6d998Sdrh} {{} {}} 4094a6d998Sdrhdo_test minmax4-1.3 { 4194a6d998Sdrh db eval { 4294a6d998Sdrh INSERT INTO t1 VALUES(1,2); 4394a6d998Sdrh SELECT p, max(q) FROM t1; 4494a6d998Sdrh } 4594a6d998Sdrh} {1 2} 4694a6d998Sdrhdo_test minmax4-1.4 { 4794a6d998Sdrh db eval { 4894a6d998Sdrh SELECT p, min(q) FROM t1; 4994a6d998Sdrh } 5094a6d998Sdrh} {1 2} 5194a6d998Sdrhdo_test minmax4-1.5 { 5294a6d998Sdrh db eval { 5394a6d998Sdrh INSERT INTO t1 VALUES(3,4); 5494a6d998Sdrh SELECT p, max(q) FROM t1; 5594a6d998Sdrh } 5694a6d998Sdrh} {3 4} 5794a6d998Sdrhdo_test minmax4-1.6 { 5894a6d998Sdrh db eval { 5994a6d998Sdrh SELECT p, min(q) FROM t1; 609588ad95Sdrh SELECT p FROM (SELECT p, min(q) FROM t1); 6194a6d998Sdrh } 629588ad95Sdrh} {1 2 1} 6394a6d998Sdrhdo_test minmax4-1.7 { 6494a6d998Sdrh db eval { 6594a6d998Sdrh INSERT INTO t1 VALUES(5,0); 6694a6d998Sdrh SELECT p, max(q) FROM t1; 679588ad95Sdrh SELECT p FROM (SELECT max(q), p FROM t1); 6894a6d998Sdrh } 699588ad95Sdrh} {3 4 3} 7094a6d998Sdrhdo_test minmax4-1.8 { 7194a6d998Sdrh db eval { 7294a6d998Sdrh SELECT p, min(q) FROM t1; 7394a6d998Sdrh } 7494a6d998Sdrh} {5 0} 7594a6d998Sdrhdo_test minmax4-1.9 { 7694a6d998Sdrh db eval { 7794a6d998Sdrh INSERT INTO t1 VALUES(6,1); 7894a6d998Sdrh SELECT p, max(q) FROM t1; 799588ad95Sdrh SELECT p FROM (SELECT max(q), p FROM t1); 8094a6d998Sdrh } 819588ad95Sdrh} {3 4 3} 8294a6d998Sdrhdo_test minmax4-1.10 { 8394a6d998Sdrh db eval { 8494a6d998Sdrh SELECT p, min(q) FROM t1; 8594a6d998Sdrh } 8694a6d998Sdrh} {5 0} 8794a6d998Sdrhdo_test minmax4-1.11 { 8894a6d998Sdrh db eval { 8994a6d998Sdrh INSERT INTO t1 VALUES(7,NULL); 9094a6d998Sdrh SELECT p, max(q) FROM t1; 9194a6d998Sdrh } 9294a6d998Sdrh} {3 4} 9394a6d998Sdrhdo_test minmax4-1.12 { 9494a6d998Sdrh db eval { 9594a6d998Sdrh SELECT p, min(q) FROM t1; 9694a6d998Sdrh } 9794a6d998Sdrh} {5 0} 9894a6d998Sdrhdo_test minmax4-1.13 { 9994a6d998Sdrh db eval { 10094a6d998Sdrh DELETE FROM t1 WHERE q IS NOT NULL; 10194a6d998Sdrh SELECT p, max(q) FROM t1; 10294a6d998Sdrh } 10394a6d998Sdrh} {7 {}} 10494a6d998Sdrhdo_test minmax4-1.14 { 10594a6d998Sdrh db eval { 10694a6d998Sdrh SELECT p, min(q) FROM t1; 10794a6d998Sdrh } 10894a6d998Sdrh} {7 {}} 10994a6d998Sdrh 11094a6d998Sdrhdo_test minmax4-2.1 { 11194a6d998Sdrh db eval { 11294a6d998Sdrh CREATE TABLE t2(a,b,c); 11394a6d998Sdrh INSERT INTO t2 VALUES 11494a6d998Sdrh (1,null,2), 11594a6d998Sdrh (1,2,3), 11694a6d998Sdrh (1,1,4), 11794a6d998Sdrh (2,3,5); 11894a6d998Sdrh SELECT a, max(b), c FROM t2 GROUP BY a ORDER BY a; 11994a6d998Sdrh } 12094a6d998Sdrh} {1 2 3 2 3 5} 12194a6d998Sdrhdo_test minmax4-2.2 { 12294a6d998Sdrh db eval { 12394a6d998Sdrh SELECT a, min(b), c FROM t2 GROUP BY a ORDER BY a; 12494a6d998Sdrh } 12594a6d998Sdrh} {1 1 4 2 3 5} 12694a6d998Sdrhdo_test minmax4-2.3 { 12794a6d998Sdrh db eval { 12894a6d998Sdrh SELECT a, min(b), avg(b), count(b), c FROM t2 GROUP BY a ORDER BY a DESC; 12994a6d998Sdrh } 13094a6d998Sdrh} {2 3 3.0 1 5 1 1 1.5 2 4} 13194a6d998Sdrhdo_test minmax4-2.4 { 13294a6d998Sdrh db eval { 13394a6d998Sdrh SELECT a, min(b), max(b), c FROM t2 GROUP BY a ORDER BY a; 13494a6d998Sdrh } 13594a6d998Sdrh} {1 1 2 3 2 3 3 5} 13694a6d998Sdrhdo_test minmax4-2.5 { 13794a6d998Sdrh db eval { 13894a6d998Sdrh SELECT a, max(b), min(b), c FROM t2 GROUP BY a ORDER BY a; 13994a6d998Sdrh } 14094a6d998Sdrh} {1 2 1 4 2 3 3 5} 14194a6d998Sdrhdo_test minmax4-2.6 { 14294a6d998Sdrh db eval { 14394a6d998Sdrh SELECT a, max(b), b, max(c), c FROM t2 GROUP BY a ORDER BY a; 14494a6d998Sdrh } 14594a6d998Sdrh} {1 2 1 4 4 2 3 3 5 5} 14694a6d998Sdrhdo_test minmax4-2.7 { 14794a6d998Sdrh db eval { 14894a6d998Sdrh SELECT a, min(b), b, min(c), c FROM t2 GROUP BY a ORDER BY a; 14994a6d998Sdrh } 15094a6d998Sdrh} {1 1 {} 2 2 2 3 3 5 5} 15194a6d998Sdrh 152ddd7421cSdan#------------------------------------------------------------------------- 153ddd7421cSdanforeach {tn sql} { 154ddd7421cSdan 1 { CREATE INDEX i1 ON t1(a) } 155ddd7421cSdan 2 { CREATE INDEX i1 ON t1(a DESC) } 156ddd7421cSdan 3 { } 157ddd7421cSdan} { 158ddd7421cSdan reset_db 159ddd7421cSdan do_execsql_test 3.$tn.0 { 160ddd7421cSdan CREATE TABLE t1(a, b); 161ddd7421cSdan INSERT INTO t1 VALUES(NULL, 1); 162ddd7421cSdan } 163ddd7421cSdan execsql $sql 164ddd7421cSdan do_execsql_test 3.$tn.1 { 165ddd7421cSdan SELECT min(a), b FROM t1; 166ddd7421cSdan } {{} 1} 167ddd7421cSdan do_execsql_test 3.$tn.2 { 168ddd7421cSdan SELECT min(a), b FROM t1 WHERE a<50; 169ddd7421cSdan } {{} {}} 170ddd7421cSdan do_execsql_test 3.$tn.3 { 171ddd7421cSdan INSERT INTO t1 VALUES(2, 2); 172ddd7421cSdan } 173ddd7421cSdan do_execsql_test 3.$tn.4 { 174ddd7421cSdan SELECT min(a), b FROM t1; 175ddd7421cSdan } {2 2} 176ddd7421cSdan do_execsql_test 3.$tn.5 { 177ddd7421cSdan SELECT min(a), b FROM t1 WHERE a<50; 178ddd7421cSdan } {2 2} 179ddd7421cSdan} 18094a6d998Sdrh 181192418bdSdan#------------------------------------------------------------------------- 182192418bdSdanreset_db 183192418bdSdando_execsql_test 4.0 { 184192418bdSdan CREATE TABLE t0 (c0, c1); 185192418bdSdan CREATE INDEX i0 ON t0(c1, c1 + 1 DESC); 186192418bdSdan INSERT INTO t0(c0) VALUES (1); 187192418bdSdan} 188192418bdSdando_execsql_test 4.1 { 189192418bdSdan SELECT MIN(t0.c1), t0.c0 FROM t0 WHERE t0.c1 ISNULL; 190192418bdSdan} {{} 1} 191192418bdSdan 192192418bdSdan#------------------------------------------------------------------------- 193192418bdSdanreset_db 194192418bdSdando_execsql_test 5.0 { 195192418bdSdan CREATE TABLE t1 (a, b); 196192418bdSdan INSERT INTO t1 VALUES(123, NULL); 197192418bdSdan CREATE INDEX i1 ON t1(a, b DESC); 198192418bdSdan} 199192418bdSdando_execsql_test 5.1 { 200192418bdSdan SELECT MIN(a) FROM t1 WHERE a=123; 201192418bdSdan} {123} 202192418bdSdan 203*83283697Sdan#------------------------------------------------------------------------- 204*83283697Sdan# Tests for ticket f8a7060ece. 205*83283697Sdan# 206*83283697Sdanreset_db 207*83283697Sdando_execsql_test 6.1.0 { 208*83283697Sdan CREATE TABLE t1(a, b, c); 209*83283697Sdan INSERT INTO t1 VALUES(NULL, 1, 'x'); 210*83283697Sdan CREATE INDEX i1 ON t1(a); 211*83283697Sdan} 212*83283697Sdando_execsql_test 6.1.1 { 213*83283697Sdan SELECT min(a), b, c FROM t1 WHERE c='x'; 214*83283697Sdan} {{} 1 x} 215*83283697Sdando_execsql_test 6.1.2 { 216*83283697Sdan INSERT INTO t1 VALUES(1, 2, 'y'); 217*83283697Sdan} {} 218*83283697Sdando_execsql_test 6.1.3 { 219*83283697Sdan SELECT min(a), b, c FROM t1 WHERE c='x'; 220*83283697Sdan} {{} 1 x} 221*83283697Sdan 222*83283697Sdando_execsql_test 6.2.0 { 223*83283697Sdan CREATE TABLE t0(c0 UNIQUE, c1); 224*83283697Sdan INSERT INTO t0(c1) VALUES (0); 225*83283697Sdan INSERT INTO t0(c0) VALUES (0); 226*83283697Sdan CREATE VIEW v0(c0, c1) AS 227*83283697Sdan SELECT t0.c1, t0.c0 FROM t0 WHERE CAST(t0.rowid AS INT) = 1; 228*83283697Sdan} 229*83283697Sdando_execsql_test 6.2.1 { 230*83283697Sdan SELECT c0, c1 FROM v0; 231*83283697Sdan} {0 {}} 232*83283697Sdando_execsql_test 6.2.2 { 233*83283697Sdan SELECT v0.c0, MIN(v0.c1) FROM v0; 234*83283697Sdan} {0 {}} 235*83283697Sdan 23694a6d998Sdrhfinish_test 237