Prevent deep recursions on nested COLLATE operators.
[sqlite.git] / test / minmax4.test
blob8063538bfd770e705dd558bb4b8e338a650d875e
1 # 2012 February 02
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #***********************************************************************
12 # Test for queries of the form:  
14 #    SELECT p, max(q) FROM t1;
16 # Demonstration that the value returned for p is on the same row as 
17 # the maximum q.
20 set testdir [file dirname $argv0]
21 source $testdir/tester.tcl
23 ifcapable !compound {
24   finish_test
25   return
28 do_test minmax4-1.1 {
29   db eval {
30     CREATE TABLE t1(p,q);
31     SELECT p, max(q) FROM t1;
32   }
33 } {{} {}}
34 do_test minmax4-1.2 {
35   db eval {
36     SELECT p, min(q) FROM t1;
37   }
38 } {{} {}}
39 do_test minmax4-1.3 {
40   db eval {
41     INSERT INTO t1 VALUES(1,2);
42     SELECT p, max(q) FROM t1;
43   }
44 } {1 2}
45 do_test minmax4-1.4 {
46   db eval {
47     SELECT p, min(q) FROM t1;
48   }
49 } {1 2}
50 do_test minmax4-1.5 {
51   db eval {
52     INSERT INTO t1 VALUES(3,4);
53     SELECT p, max(q) FROM t1;
54   }
55 } {3 4}
56 do_test minmax4-1.6 {
57   db eval {
58     SELECT p, min(q) FROM t1;
59     SELECT p FROM (SELECT p, min(q) FROM t1);
60   }
61 } {1 2 1}
62 do_test minmax4-1.7 {
63   db eval {
64     INSERT INTO t1 VALUES(5,0);
65     SELECT p, max(q) FROM t1;
66     SELECT p FROM (SELECT max(q), p FROM t1);
67   }
68 } {3 4 3}
69 do_test minmax4-1.8 {
70   db eval {
71     SELECT p, min(q) FROM t1;
72   }
73 } {5 0}
74 do_test minmax4-1.9 {
75   db eval {
76     INSERT INTO t1 VALUES(6,1);
77     SELECT p, max(q) FROM t1;
78     SELECT p FROM (SELECT max(q), p FROM t1);
79   }
80 } {3 4 3}
81 do_test minmax4-1.10 {
82   db eval {
83     SELECT p, min(q) FROM t1;
84   }
85 } {5 0}
86 do_test minmax4-1.11 {
87   db eval {
88     INSERT INTO t1 VALUES(7,NULL);
89     SELECT p, max(q) FROM t1;
90   }
91 } {3 4}
92 do_test minmax4-1.12 {
93   db eval {
94     SELECT p, min(q) FROM t1;
95   }
96 } {5 0}
97 do_test minmax4-1.13 {
98   db eval {
99     DELETE FROM t1 WHERE q IS NOT NULL;
100     SELECT p, max(q) FROM t1;
101   }
102 } {7 {}}
103 do_test minmax4-1.14 {
104   db eval {
105     SELECT p, min(q) FROM t1;
106   }
107 } {7 {}}
109 do_test minmax4-2.1 {
110   db eval {
111     CREATE TABLE t2(a,b,c);
112     INSERT INTO t2 VALUES
113          (1,null,2),
114          (1,2,3),
115          (1,1,4),
116          (2,3,5);
117     SELECT a, max(b), c FROM t2 GROUP BY a ORDER BY a;
118   }
119 } {1 2 3 2 3 5}
120 do_test minmax4-2.2 {
121   db eval {
122     SELECT a, min(b), c FROM t2 GROUP BY a ORDER BY a;
123   }
124 } {1 1 4 2 3 5}
125 do_test minmax4-2.3 {
126   db eval {
127     SELECT a, min(b), avg(b), count(b), c FROM t2 GROUP BY a ORDER BY a DESC;
128   }
129 } {2 3 3.0 1 5 1 1 1.5 2 4}
130 do_test minmax4-2.4 {
131   db eval {
132     SELECT a, min(b), max(b), c FROM t2 GROUP BY a ORDER BY a;
133   }
134 } {1 1 2 3 2 3 3 5}
135 do_test minmax4-2.5 {
136   db eval {
137     SELECT a, max(b), min(b), c FROM t2 GROUP BY a ORDER BY a;
138   }
139 } {1 2 1 4 2 3 3 5}
140 do_test minmax4-2.6 {
141   db eval {
142     SELECT a, max(b), b, max(c), c FROM t2 GROUP BY a ORDER BY a;
143   }
144 } {1 2 1 4 4 2 3 3 5 5}
145 do_test minmax4-2.7 {
146   db eval {
147     SELECT a, min(b), b, min(c), c FROM t2 GROUP BY a ORDER BY a;
148   }
149 } {1 1 {} 2 2 2 3 3 5 5}
153 finish_test