OLD | NEW |
| (Empty) |
1 # 2008 September 16 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
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. | |
9 # | |
10 #*********************************************************************** | |
11 # This file implements regression tests for SQLite library. | |
12 # | |
13 # $Id: selectC.test,v 1.5 2009/05/17 15:26:21 drh Exp $ | |
14 | |
15 set testdir [file dirname $argv0] | |
16 source $testdir/tester.tcl | |
17 | |
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'); | |
25 | |
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} | |
151 | |
152 # The following query used to leak memory. Verify that has been fixed. | |
153 # | |
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}} | |
167 } | |
168 | |
169 # Check that ticket [883034dcb5] is fixed. | |
170 # | |
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} | |
212 | |
213 | |
214 proc udf {} { incr ::udf } | |
215 set ::udf 0 | |
216 db function udf udf | |
217 | |
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 } {} | |
227 | |
228 do_execsql_test selectC-4.2 { | |
229 select a from (select distinct a, b from t_distinct_bug) | |
230 } {1 1 1} | |
231 | |
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} | |
235 | |
236 finish_test | |
OLD | NEW |