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