blob: 45250ef30b6e3b460b590957273d3b101f6234cf [file] [log] [blame]
drhec8d2422008-09-16 15:09:53 +00001# 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#
drh03949ba2009-05-17 15:26:20 +000013# $Id: selectC.test,v 1.5 2009/05/17 15:26:21 drh Exp $
drhec8d2422008-09-16 15:09:53 +000014
15set testdir [file dirname $argv0]
16source $testdir/tester.tcl
17
drhf44ed022008-09-16 18:02:47 +000018# Ticket #
drhec8d2422008-09-16 15:09:53 +000019do_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}
31do_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}
38do_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}
45do_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}
52do_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}
59do_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}
66do_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}
drhf44ed022008-09-16 18:02:47 +000073do_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}
81do_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}
89do_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}
97do_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}
drhd742bb72009-03-02 01:22:40 +0000105proc longname_toupper x {return [string toupper $x]}
106db function uppercaseconversionfunctionwithaverylongname longname_toupper
107do_test selectC-1.12.1 {
drhf44ed022008-09-16 18:02:47 +0000108 execsql {
109 SELECT DISTINCT upper(b) AS x
110 FROM t1
111 ORDER BY x
112 }
113} {AAA CCC}
drhd742bb72009-03-02 01:22:40 +0000114do_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}
121do_test selectC-1.13.1 {
drhf44ed022008-09-16 18:02:47 +0000122 execsql {
123 SELECT upper(b) AS x
124 FROM t1
125 GROUP BY x
126 ORDER BY x
127 }
128} {AAA CCC}
drhd742bb72009-03-02 01:22:40 +0000129do_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}
137do_test selectC-1.14.1 {
drhd1766112008-09-17 00:13:12 +0000138 execsql {
139 SELECT upper(b) AS x
140 FROM t1
141 ORDER BY x DESC
142 }
143} {CCC AAA AAA}
drhd742bb72009-03-02 01:22:40 +0000144do_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}
drhec8d2422008-09-16 15:09:53 +0000151
drh03949ba2009-05-17 15:26:20 +0000152# The following query used to leak memory. Verify that has been fixed.
153#
dan75cbd982009-09-21 16:06:03 +0000154ifcapable trigger {
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}
drh03949ba2009-05-17 15:26:20 +0000168
dan67a6a402010-03-31 15:02:56 +0000169# Check that ticket [883034dcb5] is fixed.
170#
171do_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}
199do_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}
207do_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
drhec8d2422008-09-16 15:09:53 +0000213finish_test