# 2004 Jun 27 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. # # This file implements tests for miscellanous features that were # left out of other test files. # # $Id: misc4.test,v 1.7 2004/10/19 16:40:59 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # Prepare a statement that will create a temporary table. Then do # a rollback. Then try to execute the prepared statement. # do_test misc4-1.1 { db close set DB [sqlite3 db test.db] execsql { CREATE TABLE t1(x); INSERT INTO t1 VALUES(1); } } {} do_test misc4-1.2 { set sql {CREATE TEMP TABLE t2 AS SELECT * FROM t1} set stmt [sqlite3_prepare $DB $sql -1 TAIL] execsql { BEGIN; CREATE TABLE t3(a,b,c); INSERT INTO t1 SELECT * FROM t1; ROLLBACK; } } {} do_test misc4-1.3 { sqlite3_step $stmt } SQLITE_DONE do_test misc4-1.4 { execsql { SELECT * FROM temp.t2; } } {1} # Drop the temporary table, then rerun the prepared statement to # recreate it again. This recreates ticket #807. # do_test misc4-1.5 { execsql {DROP TABLE t2} sqlite3_reset $stmt sqlite3_step $stmt } {SQLITE_ERROR} do_test misc4-1.6 { sqlite3_finalize $stmt } {SQLITE_SCHEMA} # Prepare but do not execute various CREATE statements. Then before # those statements are executed, try to use the tables, indices, views, # are triggers that were created. # do_test misc4-2.1 { set stmt [sqlite3_prepare $DB {CREATE TABLE t3(x);} -1 TAIL] catchsql { INSERT INTO t3 VALUES(1); } } {1 {no such table: t3}} do_test misc4-2.2 { sqlite3_step $stmt } SQLITE_DONE do_test misc4-2.3 { sqlite3_finalize $stmt } SQLITE_OK do_test misc4-2.4 { catchsql { INSERT INTO t3 VALUES(1); } } {0 {}} # Ticket #966 # do_test misc4-3.1 { execsql { CREATE TABLE Table1(ID integer primary key, Value TEXT); INSERT INTO Table1 VALUES(1, 'x'); CREATE TABLE Table2(ID integer NOT NULL, Value TEXT); INSERT INTO Table2 VALUES(1, 'z'); INSERT INTO Table2 VALUES (1, 'a'); SELECT ID, Value FROM Table1 UNION SELECT ID, max(Value) FROM Table2 GROUP BY 1,2 ORDER BY 1, 2; } } {{} {} 1 x 1 z} finish_test