xref: /titanic_51/usr/src/lib/libsqlite/test/capi2.test (revision c5c4113dfcabb1eed3d4bdf7609de5170027a794)
1*c5c4113dSnw141292
2*c5c4113dSnw141292#pragma ident	"%Z%%M%	%I%	%E% SMI"
3*c5c4113dSnw141292
4*c5c4113dSnw141292# 2003 January 29
5*c5c4113dSnw141292#
6*c5c4113dSnw141292# The author disclaims copyright to this source code.  In place of
7*c5c4113dSnw141292# a legal notice, here is a blessing:
8*c5c4113dSnw141292#
9*c5c4113dSnw141292#    May you do good and not evil.
10*c5c4113dSnw141292#    May you find forgiveness for yourself and forgive others.
11*c5c4113dSnw141292#    May you share freely, never taking more than you give.
12*c5c4113dSnw141292#
13*c5c4113dSnw141292#***********************************************************************
14*c5c4113dSnw141292# This file implements regression tests for SQLite library.  The
15*c5c4113dSnw141292# focus of this script testing the callback-free C/C++ API.
16*c5c4113dSnw141292#
17*c5c4113dSnw141292# $Id: capi2.test,v 1.10 2003/08/05 13:13:38 drh Exp $
18*c5c4113dSnw141292#
19*c5c4113dSnw141292
20*c5c4113dSnw141292set testdir [file dirname $argv0]
21*c5c4113dSnw141292source $testdir/tester.tcl
22*c5c4113dSnw141292
23*c5c4113dSnw141292# Check basic functionality
24*c5c4113dSnw141292#
25*c5c4113dSnw141292do_test capi2-1.1 {
26*c5c4113dSnw141292  db close
27*c5c4113dSnw141292  set DB [sqlite db test.db]
28*c5c4113dSnw141292  execsql {CREATE TABLE t1(a,b,c)}
29*c5c4113dSnw141292  set VM [sqlite_compile $DB {SELECT name, rowid FROM sqlite_master} TAIL]
30*c5c4113dSnw141292  set TAIL
31*c5c4113dSnw141292} {}
32*c5c4113dSnw141292do_test capi2-1.2 {
33*c5c4113dSnw141292  sqlite_step $VM N VALUES COLNAMES
34*c5c4113dSnw141292} {SQLITE_ROW}
35*c5c4113dSnw141292do_test capi2-1.3 {
36*c5c4113dSnw141292  set N
37*c5c4113dSnw141292} {2}
38*c5c4113dSnw141292do_test capi2-1.4 {
39*c5c4113dSnw141292  set VALUES
40*c5c4113dSnw141292} {t1 1}
41*c5c4113dSnw141292do_test capi2-1.5 {
42*c5c4113dSnw141292  set COLNAMES
43*c5c4113dSnw141292} {name rowid text INTEGER}
44*c5c4113dSnw141292do_test capi2-1.6 {
45*c5c4113dSnw141292  set N x
46*c5c4113dSnw141292  set VALUES y
47*c5c4113dSnw141292  set COLNAMES z
48*c5c4113dSnw141292  sqlite_step $VM N VALUES COLNAMES
49*c5c4113dSnw141292} {SQLITE_DONE}
50*c5c4113dSnw141292do_test capi2-1.7 {
51*c5c4113dSnw141292  list $N $VALUES $COLNAMES
52*c5c4113dSnw141292} {2 {} {name rowid text INTEGER}}
53*c5c4113dSnw141292do_test capi2-1.8 {
54*c5c4113dSnw141292  set N x
55*c5c4113dSnw141292  set VALUES y
56*c5c4113dSnw141292  set COLNAMES z
57*c5c4113dSnw141292  sqlite_step $VM N VALUES COLNAMES
58*c5c4113dSnw141292} {SQLITE_MISUSE}
59*c5c4113dSnw141292do_test capi2-1.9 {
60*c5c4113dSnw141292  list $N $VALUES $COLNAMES
61*c5c4113dSnw141292} {0 {} {}}
62*c5c4113dSnw141292do_test capi2-1.10 {
63*c5c4113dSnw141292  sqlite_finalize $VM
64*c5c4113dSnw141292} {}
65*c5c4113dSnw141292
66*c5c4113dSnw141292# Check to make sure that the "tail" of a multi-statement SQL script
67*c5c4113dSnw141292# is returned by sqlite_compile.
68*c5c4113dSnw141292#
69*c5c4113dSnw141292do_test capi2-2.1 {
70*c5c4113dSnw141292  set SQL {
71*c5c4113dSnw141292    SELECT name, rowid FROM sqlite_master;
72*c5c4113dSnw141292    SELECT name, rowid FROM sqlite_temp_master;
73*c5c4113dSnw141292    -- A comment at the end
74*c5c4113dSnw141292  }
75*c5c4113dSnw141292  set VM [sqlite_compile $DB $SQL SQL]
76*c5c4113dSnw141292  set SQL
77*c5c4113dSnw141292} {
78*c5c4113dSnw141292    SELECT name, rowid FROM sqlite_temp_master;
79*c5c4113dSnw141292    -- A comment at the end
80*c5c4113dSnw141292  }
81*c5c4113dSnw141292do_test capi2-2.2 {
82*c5c4113dSnw141292  set r [sqlite_step $VM n val colname]
83*c5c4113dSnw141292  lappend r $n $val $colname
84*c5c4113dSnw141292} {SQLITE_ROW 2 {t1 1} {name rowid text INTEGER}}
85*c5c4113dSnw141292do_test capi2-2.3 {
86*c5c4113dSnw141292  set r [sqlite_step $VM n val colname]
87*c5c4113dSnw141292  lappend r $n $val $colname
88*c5c4113dSnw141292} {SQLITE_DONE 2 {} {name rowid text INTEGER}}
89*c5c4113dSnw141292do_test capi2-2.4 {
90*c5c4113dSnw141292  sqlite_finalize $VM
91*c5c4113dSnw141292} {}
92*c5c4113dSnw141292do_test capi2-2.5 {
93*c5c4113dSnw141292  set VM [sqlite_compile $DB $SQL SQL]
94*c5c4113dSnw141292  set SQL
95*c5c4113dSnw141292} {
96*c5c4113dSnw141292    -- A comment at the end
97*c5c4113dSnw141292  }
98*c5c4113dSnw141292do_test capi2-2.6 {
99*c5c4113dSnw141292  set r [sqlite_step $VM n val colname]
100*c5c4113dSnw141292  lappend r $n $val $colname
101*c5c4113dSnw141292} {SQLITE_DONE 2 {} {name rowid text INTEGER}}
102*c5c4113dSnw141292do_test capi2-2.7 {
103*c5c4113dSnw141292  sqlite_finalize $VM
104*c5c4113dSnw141292} {}
105*c5c4113dSnw141292do_test capi2-2.8 {
106*c5c4113dSnw141292  set VM [sqlite_compile $DB $SQL SQL]
107*c5c4113dSnw141292  list $SQL $VM
108*c5c4113dSnw141292} {{} {}}
109*c5c4113dSnw141292
110*c5c4113dSnw141292# Check the error handling.
111*c5c4113dSnw141292#
112*c5c4113dSnw141292do_test capi2-3.1 {
113*c5c4113dSnw141292  set rc [catch {
114*c5c4113dSnw141292      sqlite_compile $DB {select bogus from sqlite_master} TAIL
115*c5c4113dSnw141292  } msg]
116*c5c4113dSnw141292  lappend rc $msg $TAIL
117*c5c4113dSnw141292} {1 {(1) no such column: bogus} {}}
118*c5c4113dSnw141292do_test capi2-3.2 {
119*c5c4113dSnw141292  set rc [catch {
120*c5c4113dSnw141292      sqlite_compile $DB {select bogus from } TAIL
121*c5c4113dSnw141292  } msg]
122*c5c4113dSnw141292  lappend rc $msg $TAIL
123*c5c4113dSnw141292} {1 {(1) near " ": syntax error} {}}
124*c5c4113dSnw141292do_test capi2-3.3 {
125*c5c4113dSnw141292  set rc [catch {
126*c5c4113dSnw141292      sqlite_compile $DB {;;;;select bogus from sqlite_master} TAIL
127*c5c4113dSnw141292  } msg]
128*c5c4113dSnw141292  lappend rc $msg $TAIL
129*c5c4113dSnw141292} {1 {(1) no such column: bogus} {}}
130*c5c4113dSnw141292do_test capi2-3.4 {
131*c5c4113dSnw141292  set rc [catch {
132*c5c4113dSnw141292      sqlite_compile $DB {select bogus from sqlite_master;x;} TAIL
133*c5c4113dSnw141292  } msg]
134*c5c4113dSnw141292  lappend rc $msg $TAIL
135*c5c4113dSnw141292} {1 {(1) no such column: bogus} {x;}}
136*c5c4113dSnw141292do_test capi2-3.5 {
137*c5c4113dSnw141292  set rc [catch {
138*c5c4113dSnw141292      sqlite_compile $DB {select bogus from sqlite_master;;;x;} TAIL
139*c5c4113dSnw141292  } msg]
140*c5c4113dSnw141292  lappend rc $msg $TAIL
141*c5c4113dSnw141292} {1 {(1) no such column: bogus} {;;x;}}
142*c5c4113dSnw141292do_test capi2-3.6 {
143*c5c4113dSnw141292  set rc [catch {
144*c5c4113dSnw141292      sqlite_compile $DB {select 5/0} TAIL
145*c5c4113dSnw141292  } VM]
146*c5c4113dSnw141292  lappend rc $TAIL
147*c5c4113dSnw141292} {0 {}}
148*c5c4113dSnw141292do_test capi2-3.7 {
149*c5c4113dSnw141292  set N {}
150*c5c4113dSnw141292  set VALUE {}
151*c5c4113dSnw141292  set COLNAME {}
152*c5c4113dSnw141292  list [sqlite_step $VM N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
153*c5c4113dSnw141292} {SQLITE_ROW 1 {{}} {5/0 NUMERIC}}
154*c5c4113dSnw141292do_test capi2-3.8 {
155*c5c4113dSnw141292  sqlite_finalize $VM
156*c5c4113dSnw141292} {}
157*c5c4113dSnw141292do_test capi2-3.9 {
158*c5c4113dSnw141292  execsql {CREATE UNIQUE INDEX i1 ON t1(a)}
159*c5c4113dSnw141292  set VM [sqlite_compile $DB {INSERT INTO t1 VALUES(1,2,3)} TAIL]
160*c5c4113dSnw141292  set TAIL
161*c5c4113dSnw141292} {}
162*c5c4113dSnw141292do_test capi2-3.9b {db changes} {0}
163*c5c4113dSnw141292do_test capi2-3.10 {
164*c5c4113dSnw141292  set N {}
165*c5c4113dSnw141292  set VALUE {}
166*c5c4113dSnw141292  set COLNAME {}
167*c5c4113dSnw141292  list [sqlite_step $VM N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
168*c5c4113dSnw141292} {SQLITE_DONE 0 {} {}}
169*c5c4113dSnw141292do_test capi2-3.10b {db changes} {1}
170*c5c4113dSnw141292do_test capi2-3.11 {
171*c5c4113dSnw141292  sqlite_finalize $VM
172*c5c4113dSnw141292} {}
173*c5c4113dSnw141292do_test capi2-3.11b {db changes} {1}
174*c5c4113dSnw141292do_test capi2-3.12 {
175*c5c4113dSnw141292  list [catch {sqlite_finalize $VM} msg] [set msg]
176*c5c4113dSnw141292} {1 {(21) library routine called out of sequence}}
177*c5c4113dSnw141292do_test capi2-3.13 {
178*c5c4113dSnw141292  set VM [sqlite_compile $DB {INSERT INTO t1 VALUES(1,3,4)} TAIL]
179*c5c4113dSnw141292  list [sqlite_step $VM N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
180*c5c4113dSnw141292} {SQLITE_ERROR 0 {} {}}
181*c5c4113dSnw141292do_test capi2-3.13b {db changes} {0}
182*c5c4113dSnw141292do_test capi2-3.14 {
183*c5c4113dSnw141292  list [catch {sqlite_finalize $VM} msg] [set msg]
184*c5c4113dSnw141292} {1 {(19) column a is not unique}}
185*c5c4113dSnw141292do_test capi2-3.15 {
186*c5c4113dSnw141292  set VM [sqlite_compile $DB {CREATE TABLE t2(a NOT NULL, b)} TAIL]
187*c5c4113dSnw141292  set TAIL
188*c5c4113dSnw141292} {}
189*c5c4113dSnw141292do_test capi2-3.16 {
190*c5c4113dSnw141292  list [sqlite_step $VM N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
191*c5c4113dSnw141292} {SQLITE_DONE 0 {} {}}
192*c5c4113dSnw141292do_test capi2-3.17 {
193*c5c4113dSnw141292  list [catch {sqlite_finalize $VM} msg] [set msg]
194*c5c4113dSnw141292} {0 {}}
195*c5c4113dSnw141292do_test capi2-3.18 {
196*c5c4113dSnw141292  set VM [sqlite_compile $DB {INSERT INTO t2 VALUES(NULL,2)} TAIL]
197*c5c4113dSnw141292  list [sqlite_step $VM N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
198*c5c4113dSnw141292} {SQLITE_ERROR 0 {} {}}
199*c5c4113dSnw141292do_test capi2-3.19 {
200*c5c4113dSnw141292  list [catch {sqlite_finalize $VM} msg] [set msg]
201*c5c4113dSnw141292} {1 {(19) t2.a may not be NULL}}
202*c5c4113dSnw141292
203*c5c4113dSnw141292# Two or more virtual machines exists at the same time.
204*c5c4113dSnw141292#
205*c5c4113dSnw141292do_test capi2-4.1 {
206*c5c4113dSnw141292  set VM1 [sqlite_compile $DB {INSERT INTO t2 VALUES(1,2)} TAIL]
207*c5c4113dSnw141292  set TAIL
208*c5c4113dSnw141292} {}
209*c5c4113dSnw141292do_test capi2-4.2 {
210*c5c4113dSnw141292  set VM2 [sqlite_compile $DB {INSERT INTO t2 VALUES(2,3)} TAIL]
211*c5c4113dSnw141292  set TAIL
212*c5c4113dSnw141292} {}
213*c5c4113dSnw141292do_test capi2-4.3 {
214*c5c4113dSnw141292  set VM3 [sqlite_compile $DB {INSERT INTO t2 VALUES(3,4)} TAIL]
215*c5c4113dSnw141292  set TAIL
216*c5c4113dSnw141292} {}
217*c5c4113dSnw141292do_test capi2-4.4 {
218*c5c4113dSnw141292  list [sqlite_step $VM2 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
219*c5c4113dSnw141292} {SQLITE_DONE 0 {} {}}
220*c5c4113dSnw141292do_test capi2-4.5 {
221*c5c4113dSnw141292  execsql {SELECT * FROM t2 ORDER BY a}
222*c5c4113dSnw141292} {2 3}
223*c5c4113dSnw141292do_test capi2-4.6 {
224*c5c4113dSnw141292  list [catch {sqlite_finalize $VM2} msg] [set msg]
225*c5c4113dSnw141292} {0 {}}
226*c5c4113dSnw141292do_test capi2-4.7 {
227*c5c4113dSnw141292  list [sqlite_step $VM3 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
228*c5c4113dSnw141292} {SQLITE_DONE 0 {} {}}
229*c5c4113dSnw141292do_test capi2-4.8 {
230*c5c4113dSnw141292  execsql {SELECT * FROM t2 ORDER BY a}
231*c5c4113dSnw141292} {2 3 3 4}
232*c5c4113dSnw141292do_test capi2-4.9 {
233*c5c4113dSnw141292  list [catch {sqlite_finalize $VM3} msg] [set msg]
234*c5c4113dSnw141292} {0 {}}
235*c5c4113dSnw141292do_test capi2-4.10 {
236*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
237*c5c4113dSnw141292} {SQLITE_DONE 0 {} {}}
238*c5c4113dSnw141292do_test capi2-4.11 {
239*c5c4113dSnw141292  execsql {SELECT * FROM t2 ORDER BY a}
240*c5c4113dSnw141292} {1 2 2 3 3 4}
241*c5c4113dSnw141292do_test capi2-4.12 {
242*c5c4113dSnw141292  list [catch {sqlite_finalize $VM1} msg] [set msg]
243*c5c4113dSnw141292} {0 {}}
244*c5c4113dSnw141292
245*c5c4113dSnw141292# Interleaved SELECTs
246*c5c4113dSnw141292#
247*c5c4113dSnw141292do_test capi2-5.1 {
248*c5c4113dSnw141292  set VM1 [sqlite_compile $DB {SELECT * FROM t2} TAIL]
249*c5c4113dSnw141292  set VM2 [sqlite_compile $DB {SELECT * FROM t2} TAIL]
250*c5c4113dSnw141292  set VM3 [sqlite_compile $DB {SELECT * FROM t2} TAIL]
251*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
252*c5c4113dSnw141292} {SQLITE_ROW 2 {2 3} {a b {} {}}}
253*c5c4113dSnw141292do_test capi2-5.2 {
254*c5c4113dSnw141292  list [sqlite_step $VM2 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
255*c5c4113dSnw141292} {SQLITE_ROW 2 {2 3} {a b {} {}}}
256*c5c4113dSnw141292do_test capi2-5.3 {
257*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
258*c5c4113dSnw141292} {SQLITE_ROW 2 {3 4} {a b {} {}}}
259*c5c4113dSnw141292do_test capi2-5.4 {
260*c5c4113dSnw141292  list [sqlite_step $VM3 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
261*c5c4113dSnw141292} {SQLITE_ROW 2 {2 3} {a b {} {}}}
262*c5c4113dSnw141292do_test capi2-5.5 {
263*c5c4113dSnw141292  list [sqlite_step $VM3 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
264*c5c4113dSnw141292} {SQLITE_ROW 2 {3 4} {a b {} {}}}
265*c5c4113dSnw141292do_test capi2-5.6 {
266*c5c4113dSnw141292  list [sqlite_step $VM3 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
267*c5c4113dSnw141292} {SQLITE_ROW 2 {1 2} {a b {} {}}}
268*c5c4113dSnw141292do_test capi2-5.7 {
269*c5c4113dSnw141292  list [sqlite_step $VM3 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
270*c5c4113dSnw141292} {SQLITE_DONE 2 {} {a b {} {}}}
271*c5c4113dSnw141292do_test capi2-5.8 {
272*c5c4113dSnw141292  list [catch {sqlite_finalize $VM3} msg] [set msg]
273*c5c4113dSnw141292} {0 {}}
274*c5c4113dSnw141292do_test capi2-5.9 {
275*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
276*c5c4113dSnw141292} {SQLITE_ROW 2 {1 2} {a b {} {}}}
277*c5c4113dSnw141292do_test capi2-5.10 {
278*c5c4113dSnw141292  list [catch {sqlite_finalize $VM1} msg] [set msg]
279*c5c4113dSnw141292} {0 {}}
280*c5c4113dSnw141292do_test capi2-5.11 {
281*c5c4113dSnw141292  list [sqlite_step $VM2 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
282*c5c4113dSnw141292} {SQLITE_ROW 2 {3 4} {a b {} {}}}
283*c5c4113dSnw141292do_test capi2-5.12 {
284*c5c4113dSnw141292  list [sqlite_step $VM2 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
285*c5c4113dSnw141292} {SQLITE_ROW 2 {1 2} {a b {} {}}}
286*c5c4113dSnw141292do_test capi2-5.11 {
287*c5c4113dSnw141292  list [catch {sqlite_finalize $VM2} msg] [set msg]
288*c5c4113dSnw141292} {0 {}}
289*c5c4113dSnw141292
290*c5c4113dSnw141292# Check for proper SQLITE_BUSY returns.
291*c5c4113dSnw141292#
292*c5c4113dSnw141292do_test capi2-6.1 {
293*c5c4113dSnw141292  execsql {
294*c5c4113dSnw141292    BEGIN;
295*c5c4113dSnw141292    CREATE TABLE t3(x counter);
296*c5c4113dSnw141292    INSERT INTO t3 VALUES(1);
297*c5c4113dSnw141292    INSERT INTO t3 VALUES(2);
298*c5c4113dSnw141292    INSERT INTO t3 SELECT x+2 FROM t3;
299*c5c4113dSnw141292    INSERT INTO t3 SELECT x+4 FROM t3;
300*c5c4113dSnw141292    INSERT INTO t3 SELECT x+8 FROM t3;
301*c5c4113dSnw141292    COMMIT;
302*c5c4113dSnw141292  }
303*c5c4113dSnw141292  set VM1 [sqlite_compile $DB {SELECT * FROM t3} TAIL]
304*c5c4113dSnw141292  sqlite db2 test.db
305*c5c4113dSnw141292  execsql {BEGIN} db2
306*c5c4113dSnw141292} {}
307*c5c4113dSnw141292do_test capi2-6.2 {
308*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
309*c5c4113dSnw141292} {SQLITE_BUSY 0 {} {}}
310*c5c4113dSnw141292do_test capi2-6.3 {
311*c5c4113dSnw141292  execsql {COMMIT} db2
312*c5c4113dSnw141292} {}
313*c5c4113dSnw141292do_test capi2-6.4 {
314*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
315*c5c4113dSnw141292} {SQLITE_ROW 1 1 {x counter}}
316*c5c4113dSnw141292do_test capi2-6.5 {
317*c5c4113dSnw141292  catchsql {BEGIN} db2
318*c5c4113dSnw141292} {1 {database is locked}}
319*c5c4113dSnw141292do_test capi2-6.6 {
320*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
321*c5c4113dSnw141292} {SQLITE_ROW 1 2 {x counter}}
322*c5c4113dSnw141292do_test capi2-6.7 {
323*c5c4113dSnw141292  execsql {SELECT * FROM t2} db2
324*c5c4113dSnw141292} {2 3 3 4 1 2}
325*c5c4113dSnw141292do_test capi2-6.8 {
326*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
327*c5c4113dSnw141292} {SQLITE_ROW 1 3 {x counter}}
328*c5c4113dSnw141292do_test capi2-6.9 {
329*c5c4113dSnw141292  execsql {SELECT * FROM t2}
330*c5c4113dSnw141292} {2 3 3 4 1 2}
331*c5c4113dSnw141292do_test capi2-6.10 {
332*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
333*c5c4113dSnw141292} {SQLITE_ROW 1 4 {x counter}}
334*c5c4113dSnw141292do_test capi2-6.11 {
335*c5c4113dSnw141292  execsql {BEGIN}
336*c5c4113dSnw141292} {}
337*c5c4113dSnw141292do_test capi2-6.12 {
338*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
339*c5c4113dSnw141292} {SQLITE_ROW 1 5 {x counter}}
340*c5c4113dSnw141292# execsql {pragma vdbe_trace=on}
341*c5c4113dSnw141292do_test capi2-6.13 {
342*c5c4113dSnw141292  catchsql {UPDATE t3 SET x=x+1}
343*c5c4113dSnw141292} {1 {database table is locked}}
344*c5c4113dSnw141292do_test capi2-6.14 {
345*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
346*c5c4113dSnw141292} {SQLITE_ROW 1 6 {x counter}}
347*c5c4113dSnw141292# puts [list [catch {sqlite_finalize $VM1} msg] [set msg]]; exit
348*c5c4113dSnw141292do_test capi2-6.15 {
349*c5c4113dSnw141292  execsql {SELECT * FROM t1}
350*c5c4113dSnw141292} {1 2 3}
351*c5c4113dSnw141292do_test capi2-6.16 {
352*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
353*c5c4113dSnw141292} {SQLITE_ROW 1 7 {x counter}}
354*c5c4113dSnw141292do_test capi2-6.17 {
355*c5c4113dSnw141292  catchsql {UPDATE t1 SET b=b+1}
356*c5c4113dSnw141292} {0 {}}
357*c5c4113dSnw141292do_test capi2-6.18 {
358*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
359*c5c4113dSnw141292} {SQLITE_ROW 1 8 {x counter}}
360*c5c4113dSnw141292do_test capi2-6.19 {
361*c5c4113dSnw141292  execsql {SELECT * FROM t1}
362*c5c4113dSnw141292} {1 3 3}
363*c5c4113dSnw141292do_test capi2-6.20 {
364*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
365*c5c4113dSnw141292} {SQLITE_ROW 1 9 {x counter}}
366*c5c4113dSnw141292do_test capi2-6.21 {
367*c5c4113dSnw141292  execsql {ROLLBACK; SELECT * FROM t1}
368*c5c4113dSnw141292} {1 2 3}
369*c5c4113dSnw141292do_test capi2-6.22 {
370*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
371*c5c4113dSnw141292} {SQLITE_ROW 1 10 {x counter}}
372*c5c4113dSnw141292do_test capi2-6.23 {
373*c5c4113dSnw141292  execsql {BEGIN TRANSACTION ON CONFLICT ROLLBACK;}
374*c5c4113dSnw141292} {}
375*c5c4113dSnw141292do_test capi2-6.24 {
376*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
377*c5c4113dSnw141292} {SQLITE_ROW 1 11 {x counter}}
378*c5c4113dSnw141292do_test capi2-6.25 {
379*c5c4113dSnw141292  execsql {
380*c5c4113dSnw141292    INSERT INTO t1 VALUES(2,3,4);
381*c5c4113dSnw141292    SELECT * FROM t1;
382*c5c4113dSnw141292  }
383*c5c4113dSnw141292} {1 2 3 2 3 4}
384*c5c4113dSnw141292do_test capi2-6.26 {
385*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
386*c5c4113dSnw141292} {SQLITE_ROW 1 12 {x counter}}
387*c5c4113dSnw141292do_test capi2-6.27 {
388*c5c4113dSnw141292  catchsql {
389*c5c4113dSnw141292    INSERT INTO t1 VALUES(2,4,5);
390*c5c4113dSnw141292    SELECT * FROM t1;
391*c5c4113dSnw141292  }
392*c5c4113dSnw141292} {1 {column a is not unique}}
393*c5c4113dSnw141292do_test capi2-6.28 {
394*c5c4113dSnw141292  list [sqlite_step $VM1 N VALUE COLNAME] [set N] [set VALUE] [set COLNAME]
395*c5c4113dSnw141292} {SQLITE_ROW 1 13 {x counter}}
396*c5c4113dSnw141292do_test capi2-6.99 {
397*c5c4113dSnw141292  list [catch {sqlite_finalize $VM1} msg] [set msg]
398*c5c4113dSnw141292} {0 {}}
399*c5c4113dSnw141292catchsql {ROLLBACK}
400*c5c4113dSnw141292
401*c5c4113dSnw141292do_test capi2-7.1 {
402*c5c4113dSnw141292  stepsql $DB {
403*c5c4113dSnw141292    SELECT * FROM t1
404*c5c4113dSnw141292  }
405*c5c4113dSnw141292} {0 1 2 3}
406*c5c4113dSnw141292do_test capi2-7.2 {
407*c5c4113dSnw141292  stepsql $DB {
408*c5c4113dSnw141292    PRAGMA count_changes=on
409*c5c4113dSnw141292  }
410*c5c4113dSnw141292} {0}
411*c5c4113dSnw141292do_test capi2-7.3 {
412*c5c4113dSnw141292  stepsql $DB {
413*c5c4113dSnw141292    UPDATE t1 SET a=a+10;
414*c5c4113dSnw141292  }
415*c5c4113dSnw141292} {0 1}
416*c5c4113dSnw141292do_test capi2-7.4 {
417*c5c4113dSnw141292  stepsql $DB {
418*c5c4113dSnw141292    INSERT INTO t1 SELECT a+1,b+1,c+1 FROM t1;
419*c5c4113dSnw141292  }
420*c5c4113dSnw141292} {0 1}
421*c5c4113dSnw141292do_test capi2-7.4b {db changes} {1}
422*c5c4113dSnw141292do_test capi2-7.5 {
423*c5c4113dSnw141292  stepsql $DB {
424*c5c4113dSnw141292    UPDATE t1 SET a=a+10;
425*c5c4113dSnw141292  }
426*c5c4113dSnw141292} {0 2}
427*c5c4113dSnw141292do_test capi2-7.5b {db changes} {2}
428*c5c4113dSnw141292do_test capi2-7.6 {
429*c5c4113dSnw141292  stepsql $DB {
430*c5c4113dSnw141292    SELECT * FROM t1;
431*c5c4113dSnw141292  }
432*c5c4113dSnw141292} {0 21 2 3 22 3 4}
433*c5c4113dSnw141292do_test capi2-7.7 {
434*c5c4113dSnw141292  stepsql $DB {
435*c5c4113dSnw141292    INSERT INTO t1 SELECT a+2,b+2,c+2 FROM t1;
436*c5c4113dSnw141292  }
437*c5c4113dSnw141292} {0 2}
438*c5c4113dSnw141292do_test capi2-7.8 {
439*c5c4113dSnw141292  db changes
440*c5c4113dSnw141292} {2}
441*c5c4113dSnw141292do_test capi2-7.9 {
442*c5c4113dSnw141292  stepsql $DB {
443*c5c4113dSnw141292    SELECT * FROM t1;
444*c5c4113dSnw141292  }
445*c5c4113dSnw141292} {0 21 2 3 22 3 4 23 4 5 24 5 6}
446*c5c4113dSnw141292do_test capi2-7.10 {
447*c5c4113dSnw141292  stepsql $DB {
448*c5c4113dSnw141292    UPDATE t1 SET a=a-20;
449*c5c4113dSnw141292    SELECT * FROM t1;
450*c5c4113dSnw141292  }
451*c5c4113dSnw141292} {0 4 1 2 3 2 3 4 3 4 5 4 5 6}
452*c5c4113dSnw141292do_test capi2-7.11 {
453*c5c4113dSnw141292  db changes
454*c5c4113dSnw141292} {0}
455*c5c4113dSnw141292do_test capi2-7.12 {
456*c5c4113dSnw141292  set x [stepsql $DB {EXPLAIN SELECT * FROM t1}]
457*c5c4113dSnw141292  lindex $x 0
458*c5c4113dSnw141292} {0}
459*c5c4113dSnw141292
460*c5c4113dSnw141292# Ticket #261 - make sure we can finalize before the end of a query.
461*c5c4113dSnw141292#
462*c5c4113dSnw141292do_test capi2-8.1 {
463*c5c4113dSnw141292  set VM1 [sqlite_compile $DB {SELECT * FROM t2} TAIL]
464*c5c4113dSnw141292  sqlite_finalize $VM1
465*c5c4113dSnw141292} {}
466*c5c4113dSnw141292
467*c5c4113dSnw141292# Tickets #384 and #385 - make sure the TAIL argument to sqlite_compile
468*c5c4113dSnw141292# and all of the return pointers in sqlite_step can be null.
469*c5c4113dSnw141292#
470*c5c4113dSnw141292do_test capi2-9.1 {
471*c5c4113dSnw141292  set VM1 [sqlite_compile $DB {SELECT * FROM t2}]
472*c5c4113dSnw141292  sqlite_step $VM1
473*c5c4113dSnw141292  sqlite_finalize $VM1
474*c5c4113dSnw141292} {}
475*c5c4113dSnw141292
476*c5c4113dSnw141292db2 close
477*c5c4113dSnw141292
478*c5c4113dSnw141292finish_test
479