xref: /sqlite-3.40.0/test/minmax4.test (revision 83283697)
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