Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / sqlite / sqlite-src-3080704 / test / selectC.test
blobdedac41fc474dd816bf798a114fbdbcd4cc159c3
1 # 2008 September 16
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 #***********************************************************************
11 # This file implements regression tests for SQLite library. 
13 # $Id: selectC.test,v 1.5 2009/05/17 15:26:21 drh Exp $
15 set testdir [file dirname $argv0]
16 source $testdir/tester.tcl
18 # Ticket #
19 do_test selectC-1.1 {
20   execsql {
21     CREATE TABLE t1(a, b, c);
22     INSERT INTO t1 VALUES(1,'aaa','bbb');
23     INSERT INTO t1 SELECT * FROM t1;
24     INSERT INTO t1 VALUES(2,'ccc','ddd');
26     SELECT DISTINCT a AS x, b||c AS y
27       FROM t1
28      WHERE y IN ('aaabbb','xxx');
29   }
30 } {1 aaabbb}
31 do_test selectC-1.2 {
32   execsql {
33     SELECT DISTINCT a AS x, b||c AS y
34       FROM t1
35      WHERE b||c IN ('aaabbb','xxx');
36   }
37 } {1 aaabbb}
38 do_test selectC-1.3 {
39   execsql {
40     SELECT DISTINCT a AS x, b||c AS y
41       FROM t1
42      WHERE y='aaabbb'
43   }
44 } {1 aaabbb}
45 do_test selectC-1.4 {
46   execsql {
47     SELECT DISTINCT a AS x, b||c AS y
48       FROM t1
49      WHERE b||c='aaabbb'
50   }
51 } {1 aaabbb}
52 do_test selectC-1.5 {
53   execsql {
54     SELECT DISTINCT a AS x, b||c AS y
55       FROM t1
56      WHERE x=2
57   }
58 } {2 cccddd}
59 do_test selectC-1.6 {
60   execsql {
61     SELECT DISTINCT a AS x, b||c AS y
62       FROM t1
63      WHERE a=2
64   }
65 } {2 cccddd}
66 do_test selectC-1.7 {
67   execsql {
68     SELECT DISTINCT a AS x, b||c AS y
69       FROM t1
70      WHERE +y='aaabbb'
71   }
72 } {1 aaabbb}
73 do_test selectC-1.8 {
74   execsql {
75     SELECT a AS x, b||c AS y
76       FROM t1
77      GROUP BY x, y
78     HAVING y='aaabbb'
79   }
80 } {1 aaabbb}
81 do_test selectC-1.9 {
82   execsql {
83     SELECT a AS x, b||c AS y
84       FROM t1
85      GROUP BY x, y
86     HAVING b||c='aaabbb'
87   }
88 } {1 aaabbb}
89 do_test selectC-1.10 {
90   execsql {
91     SELECT a AS x, b||c AS y
92       FROM t1
93      WHERE y='aaabbb'
94      GROUP BY x, y
95   }
96 } {1 aaabbb}
97 do_test selectC-1.11 {
98   execsql {
99     SELECT a AS x, b||c AS y
100       FROM t1
101      WHERE b||c='aaabbb'
102      GROUP BY x, y
103   }
104 } {1 aaabbb}
105 proc longname_toupper x {return [string toupper $x]}
106 db function uppercaseconversionfunctionwithaverylongname longname_toupper
107 do_test selectC-1.12.1 {
108   execsql {
109     SELECT DISTINCT upper(b) AS x
110       FROM t1
111      ORDER BY x
112   }
113 } {AAA CCC}
114 do_test selectC-1.12.2 {
115   execsql {
116     SELECT DISTINCT uppercaseconversionfunctionwithaverylongname(b) AS x
117       FROM t1
118      ORDER BY x
119   }
120 } {AAA CCC}
121 do_test selectC-1.13.1 {
122   execsql {
123     SELECT upper(b) AS x
124       FROM t1
125      GROUP BY x
126      ORDER BY x
127   }
128 } {AAA CCC}
129 do_test selectC-1.13.2 {
130   execsql {
131     SELECT uppercaseconversionfunctionwithaverylongname(b) AS x
132       FROM t1
133      GROUP BY x
134      ORDER BY x
135   }
136 } {AAA CCC}
137 do_test selectC-1.14.1 {
138   execsql {
139     SELECT upper(b) AS x
140       FROM t1
141      ORDER BY x DESC
142   }
143 } {CCC AAA AAA}
144 do_test selectC-1.14.2 {
145   execsql {
146     SELECT uppercaseconversionfunctionwithaverylongname(b) AS x
147       FROM t1
148      ORDER BY x DESC
149   }
150 } {CCC AAA AAA}
152 # The following query used to leak memory.  Verify that has been fixed.
154 ifcapable trigger&&compound {
155   do_test selectC-2.1 {
156     catchsql {
157       CREATE TABLE t21a(a,b);
158       INSERT INTO t21a VALUES(1,2);
159       CREATE TABLE t21b(n);
160       CREATE TRIGGER r21 AFTER INSERT ON t21b BEGIN
161         SELECT a FROM t21a WHERE a>new.x UNION ALL
162         SELECT b FROM t21a WHERE b>new.x ORDER BY 1 LIMIT 2;
163       END;
164       INSERT INTO t21b VALUES(6);
165     }
166   } {1 {no such column: new.x}}
169 # Check that ticket [883034dcb5] is fixed.
171 do_test selectC-3.1 {
172   execsql {
173     CREATE TABLE person (
174         org_id          TEXT NOT NULL,
175         nickname        TEXT NOT NULL,
176         license         TEXT,
177         CONSTRAINT person_pk PRIMARY KEY (org_id, nickname),
178         CONSTRAINT person_license_uk UNIQUE (license)
179     );
180     INSERT INTO person VALUES('meyers', 'jack', '2GAT123');
181     INSERT INTO person VALUES('meyers', 'hill', 'V345FMP');
182     INSERT INTO person VALUES('meyers', 'jim', '2GAT138');
183     INSERT INTO person VALUES('smith', 'maggy', '');
184     INSERT INTO person VALUES('smith', 'jose', 'JJZ109');
185     INSERT INTO person VALUES('smith', 'jack', 'THX138');
186     INSERT INTO person VALUES('lakeside', 'dave', '953OKG');
187     INSERT INTO person VALUES('lakeside', 'amy', NULL);
188     INSERT INTO person VALUES('lake-apts', 'tom', NULL);
189     INSERT INTO person VALUES('acorn', 'hideo', 'CQB421');
190     
191     SELECT 
192       org_id, 
193       count((NOT (org_id IS NULL)) AND (NOT (nickname IS NULL)))
194     FROM person 
195     WHERE (CASE WHEN license != '' THEN 1 ELSE 0 END)
196     GROUP BY 1;
197   }
198 } {acorn 1 lakeside 1 meyers 3 smith 2}
199 do_test selectC-3.2 {
200   execsql {
201     CREATE TABLE t2(a PRIMARY KEY, b);
202     INSERT INTO t2 VALUES('abc', 'xxx');
203     INSERT INTO t2 VALUES('def', 'yyy');
204     SELECT a, max(b || a) FROM t2 WHERE (b||b||b)!='value' GROUP BY a;
205   }
206 } {abc xxxabc def yyydef}
207 do_test selectC-3.3 {
208   execsql {
209     SELECT b, max(a || b) FROM t2 WHERE (b||b||b)!='value' GROUP BY a;
210   }
211 } {xxx abcxxx yyy defyyy}
214 proc udf {} { incr ::udf }
215 set ::udf 0
216 db function udf udf
218 do_execsql_test selectC-4.1 {
219   create table t_distinct_bug (a, b, c);
220   insert into t_distinct_bug values ('1', '1', 'a');
221   insert into t_distinct_bug values ('1', '2', 'b');
222   insert into t_distinct_bug values ('1', '3', 'c');
223   insert into t_distinct_bug values ('1', '1', 'd');
224   insert into t_distinct_bug values ('1', '2', 'e');
225   insert into t_distinct_bug values ('1', '3', 'f');
226 } {}
228 do_execsql_test selectC-4.2 {
229   select a from (select distinct a, b from t_distinct_bug)
230 } {1 1 1}
232 do_execsql_test selectC-4.3 {
233   select a, udf() from (select distinct a, b from t_distinct_bug)
234 } {1 1 1 2 1 3}
236 finish_test