1set testdir [file dirname $argv0]
2source $testdir/tester.tcl
3
4db close
5set DB [sqlite db test.db]
6
7execsql {
8  CREATE TABLE t1(a);
9  INSERT INTO t1 VALUES(1);
10  INSERT INTO t1 VALUES(2);
11  INSERT INTO t1 VALUES(3);
12  INSERT INTO t1 VALUES(4);
13}
14
15do_test capi3-13.1 {
16  execsql {
17    CREATE TABLE t3(a unique on conflict rollback);
18    INSERT INTO t3 SELECT a FROM t1;
19    BEGIN;
20    INSERT INTO t1 SELECT * FROM t1;
21  }
22} {}
23do_test capi3-13.2 {
24  set STMT [sqlite_compile $DB "SELECT a FROM t1" TAIL]
25  sqlite_step $STMT
26  sqlite_step $STMT
27  sqlite_step $STMT
28  sqlite_step $STMT
29  sqlite_step $STMT
30} {SQLITE_ROW}
31do_test capi3-13.3 {
32# This causes a ROLLBACK, which deletes the table out from underneath the
33# SELECT statement. Causes a crash.
34  catchsql {
35    INSERT INTO t3 SELECT a FROM t1;
36  }
37} {1 {column a is not unique}}
38do_test capi3-13.4 {
39  sqlite_step $STMT
40  sqlite_step $STMT
41  sqlite_step $STMT
42  sqlite_step $STMT
43} {SQLITE_DONE}
44do_test capi3-13.5 {
45  sqlite_finalize $STMT
46} {SQLITE_OK}
47
48finish_test
49