Correctly initialize the SrcItem.iCursor field to -1 when creating a co-routine from...
[sqlite.git] / test / values.test
blob8df0e6138f4032969c0f7b6442d56fb3ecbad9d6
1 # 2024 March 3
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.
14 set testdir [file dirname $argv0]
15 source $testdir/tester.tcl
16 set testprefix values
19 do_execsql_test 1.0 {
20   CREATE TABLE x1(a, b, c);
24 explain_i {
25   INSERT INTO x1(a, b, c) VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4);
27 do_execsql_test 1.1.1 {
28   INSERT INTO x1 VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4);
30 do_execsql_test 1.1.2 {
31   SELECT * FROM x1;
32 } {
33   1 1 1
34   2 2 2
35   3 3 3
36   4 4 4
39 do_execsql_test 1.2.0 {
40   DELETE FROM x1
42 do_execsql_test 1.2.1 {
43   INSERT INTO x1 VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3) UNION ALL SELECT 4, 4, 4;
44   SELECT * FROM x1;
45 } {1 1 1  2 2 2   3 3 3  4 4 4}
47 sqlite3_limit db SQLITE_LIMIT_COMPOUND_SELECT 4
49 do_execsql_test 1.2.2 {
50   DELETE FROM x1;
51   INSERT INTO x1 
52   VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5) 
53   UNION ALL SELECT 6, 6, 6;
54   SELECT * FROM x1;
55 } {1 1 1  2 2 2   3 3 3  4 4 4  5 5 5  6 6 6}
57 do_execsql_test 1.2.3 {
58   DELETE FROM x1;
59   INSERT INTO x1 
60   VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)
61   UNION ALL SELECT 6, 6, 6;
62   SELECT * FROM x1;
63 } {1 1 1  2 2 2   3 3 3  4 4 4  6 6 6}
65 do_execsql_test 1.2.4 {
66   DELETE FROM x1;
67   INSERT INTO x1 VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3) UNION ALL SELECT 6, 6, 6;
68   SELECT * FROM x1;
69 } {
70  1 1 1
71  2 2 2
72  3 3 3
73  6 6 6
76 set a 4
77 set b 5
78 set c 6
79 do_execsql_test 1.2.5 {
80   DELETE FROM x1;
81   INSERT INTO x1 
82   VALUES(1, 1, 1), (2, 2, 2), (3, 3, 3), 
83         (4, 4, $a), (5, 5, $b), (6, 6, $c)
86 do_execsql_test 1.2.6 {
87   SELECT * FROM x1;
88 } {
89   1 1 1
90   2 2 2
91   3 3 3
92   4 4 4
93   5 5 5
94   6 6 6
97 #-------------------------------------------------------------------------
98 # SQLITE_LIMIT_COMPOUND_SELECT set to 0.
100 reset_db
102 do_execsql_test 2.0 {
103   CREATE TABLE x1(a, b, c);
106 sqlite3_limit db SQLITE_LIMIT_COMPOUND_SELECT 3
108 do_catchsql_test 2.1.1 {
109   INSERT INTO x1 VALUES
110       (1, 1, 1), 
111       (2, 2, 2), 
112       (3, 3, 3), 
113       (4, 4, 4), 
114       (5, 5, 5), 
115       (6, 6, 6), 
116       (7, 7, 7), 
117       (8, 8, 8), 
118       (9, 9, 9), 
119       (10, 10, 10, 10)
120 } {1 {all VALUES must have the same number of terms}}
122 do_catchsql_test 2.1.2 {
123   INSERT INTO x1 VALUES
124       (1, 1, 1), 
125       (2, 2, 2, 2), 
126       (3, 3, 3), 
127       (4, 4, 4), 
128       (5, 5, 5), 
129       (6, 6, 6), 
130       (7, 7, 7), 
131       (8, 8, 8), 
132       (9, 9, 9), 
133       (10, 10, 10)
134 } {1 {all VALUES must have the same number of terms}}
136 sqlite3_limit db SQLITE_LIMIT_COMPOUND_SELECT 0
138 do_execsql_test 2.2 {
139   INSERT INTO x1 VALUES
140       (1, 1, 1), 
141       (2, 2, 2), 
142       (3, 3, 3), 
143       (4, 4, 4), 
144       (5, 5, 5), 
145       (6, 6, 6), 
146       (7, 7, 7), 
147       (8, 8, 8), 
148       (9, 9, 9), 
149       (10, 10, 10)
150 } {}
151 do_execsql_test 2.3 {
152   INSERT INTO x1 VALUES
153       (1, 1, 1), 
154       (2, 2, 2), 
155       (3, 3, 3), 
156       (4, 4, 4), 
157       (5, 5, 5), 
158       (6, 6, 6), 
159       (7, 7, 7), 
160       (8, 8, 8), 
161       (9, 9, 9), 
162       (10, 10, 10)
163       UNION ALL 
164       SELECT 5, 12, 12
165       ORDER BY 1
166 } {}
168 #-------------------------------------------------------------------------
169 reset_db
171 do_execsql_test 3.0 {
172   CREATE TABLE y1(x, y);
175 do_execsql_test 3.1.1 {
176   DELETE FROM y1;
177   INSERT INTO y1 VALUES(1, 2), (3, 4), (row_number() OVER (), 5);
179 do_execsql_test 3.1.2 {
180   SELECT * FROM y1;
181 } {1 2  3 4  1 5}
182 do_execsql_test 3.2.1 {
183   DELETE FROM y1;
184   INSERT INTO y1 VALUES(1, 2), (3, 4), (row_number() OVER (), 6)
185     , (row_number() OVER (), 7)
187 do_execsql_test 3.1.2 {
188   SELECT * FROM y1;
189 } {1 2  3 4  1 6  1 7}
191 #-------------------------------------------------------------------------
192 reset_db
194 do_execsql_test 4.0 {
195   CREATE TABLE x1(a PRIMARY KEY, b) WITHOUT ROWID;
198 foreach {tn iLimit} {1 0    2 3} { 
199   sqlite3_limit db SQLITE_LIMIT_COMPOUND_SELECT $iLimit
201   do_execsql_test 4.1.1 {
202     DELETE FROM x1;
203     INSERT INTO x1 VALUES
204         (1, 1),
205         (2, (SELECT * FROM  (VALUES('a'), ('b'), ('c'), ('d')) ))
206   }
207   do_execsql_test 4.1.2 {
208     SELECT * FROM x1
209   } {1 1 2 a}
211   do_execsql_test 4.2.1 {
212     DELETE FROM x1;
213     INSERT INTO x1 VALUES
214         (1, 1),
215         (2, 2),
216         (3, 3),
217         (4, 4),
218         (5, (SELECT * FROM  (VALUES('a'), ('b'), ('c'), ('d')) ))
219   }
220   do_execsql_test 4.2.2 {
221     SELECT * FROM x1
222   } {1 1 2 2 3 3 4 4 5 a}
224   do_execsql_test 4.3.1 {
225     DELETE FROM x1;
226     INSERT INTO x1 VALUES
227         (1, (SELECT * FROM  (VALUES('a'), ('b'), ('c'), ('d'), ('e')) ))
228   }
229   do_execsql_test 4.3.2 {
230     SELECT * FROM x1
231   } {1 a}
234 #------------------------------------------------------------------------
235 reset_db
237 do_execsql_test 5.0 {
238   CREATE VIEW v1 AS VALUES(1, 2, 3), (4, 5, 6), (7, 8, 9);
240 do_execsql_test 5.1 {
241   SELECT * FROM v1
242 } {1 2 3 4 5 6 7 8 9}
244 #-------------------------------------------------------------------------
245 reset_db
246 do_execsql_test 6.0 {
247   CREATE TABLE t1(x);
248   INSERT INTO t1 VALUES(1), (2);
251 do_execsql_test 6.1 {
252   SELECT ( VALUES( x ), ( x ) ) FROM t1;
253 } {1 2}
255 #-------------------------------------------------------------------------
256 reset_db
257 do_execsql_test 6.0 {
258   CREATE TABLE t1(x);
259   INSERT INTO t1 VALUES('x'), ('y');
262 do_execsql_test 6.1 {
263   SELECT * FROM t1, (VALUES(1), (2))
264 } {x 1 x 2 y 1 y 2}
266 finish_test