1a298e90dSdanielk1977# 2006 June 10 2a298e90dSdanielk1977# 3a298e90dSdanielk1977# The author disclaims copyright to this source code. In place of 4a298e90dSdanielk1977# a legal notice, here is a blessing: 5a298e90dSdanielk1977# 6a298e90dSdanielk1977# May you do good and not evil. 7a298e90dSdanielk1977# May you find forgiveness for yourself and forgive others. 8a298e90dSdanielk1977# May you share freely, never taking more than you give. 9a298e90dSdanielk1977# 10a298e90dSdanielk1977#*********************************************************************** 11a298e90dSdanielk1977# 125a3032b3Sdrh# $Id: vtab_err.test,v 1.8 2007/09/03 16:12:10 drh Exp $ 13a298e90dSdanielk1977 14a298e90dSdanielk1977set testdir [file dirname $argv0] 15a298e90dSdanielk1977source $testdir/tester.tcl 16a298e90dSdanielk1977 17a298e90dSdanielk1977ifcapable !vtab { 18a298e90dSdanielk1977 finish_test 19a298e90dSdanielk1977 return 20a298e90dSdanielk1977} 21a298e90dSdanielk1977 225a3032b3Sdrh 2373bdf077Sdrhunset -nocomplain echo_module_begin_fail 24a298e90dSdanielk1977do_ioerr_test vtab_err-1 -tclprep { 25a298e90dSdanielk1977 register_echo_module [sqlite3_connection_pointer db] 26a298e90dSdanielk1977} -sqlbody { 27a298e90dSdanielk1977 BEGIN; 28a298e90dSdanielk1977 CREATE TABLE r(a PRIMARY KEY, b, c); 29a298e90dSdanielk1977 CREATE VIRTUAL TABLE e USING echo(r); 30a298e90dSdanielk1977 INSERT INTO e VALUES(1, 2, 3); 31a298e90dSdanielk1977 INSERT INTO e VALUES('a', 'b', 'c'); 32a298e90dSdanielk1977 UPDATE e SET c = 10; 33a298e90dSdanielk1977 DELETE FROM e WHERE a = 'a'; 34a298e90dSdanielk1977 COMMIT; 35a298e90dSdanielk1977 BEGIN; 36a298e90dSdanielk1977 CREATE TABLE r2(a, b, c); 37a298e90dSdanielk1977 INSERT INTO r2 SELECT * FROM e; 38a298e90dSdanielk1977 INSERT INTO e SELECT a||'x', b, c FROM r2; 39a298e90dSdanielk1977 COMMIT; 40a298e90dSdanielk1977} 41a298e90dSdanielk1977 425a3032b3Sdrhsource $testdir/malloc_common.tcl 435a3032b3Sdrh 445a3032b3Sdrh 45be718897Sdanielk1977do_malloc_test vtab_err-2 -tclprep { 46be718897Sdanielk1977 register_echo_module [sqlite3_connection_pointer db] 47be718897Sdanielk1977} -sqlbody { 48be718897Sdanielk1977 BEGIN; 49be718897Sdanielk1977 CREATE TABLE r(a PRIMARY KEY, b, c); 50be718897Sdanielk1977 CREATE VIRTUAL TABLE e USING echo(r); 51be718897Sdanielk1977 INSERT INTO e VALUES(1, 2, 3); 52be718897Sdanielk1977 INSERT INTO e VALUES('a', 'b', 'c'); 53be718897Sdanielk1977 UPDATE e SET c = 10; 54be718897Sdanielk1977 DELETE FROM e WHERE a = 'a'; 55be718897Sdanielk1977 COMMIT; 56be718897Sdanielk1977 BEGIN; 57be718897Sdanielk1977 CREATE TABLE r2(a, b, c); 58be718897Sdanielk1977 INSERT INTO r2 SELECT * FROM e; 59be718897Sdanielk1977 INSERT INTO e SELECT a||'x', b, c FROM r2; 60be718897Sdanielk1977 COMMIT; 61be718897Sdanielk1977} 62be718897Sdanielk1977 63a1644fd8Sdanielk1977sqlite3_memdebug_fail -1 64222a757dSdanielk1977 65*63e50b9eSdanreset_db 66*63e50b9eSdanregister_echo_module [sqlite3_connection_pointer db] 67*63e50b9eSdando_execsql_test vtab_err-3.0 { 68*63e50b9eSdan CREATE TABLE r(a PRIMARY KEY, b, c); 69*63e50b9eSdan CREATE VIRTUAL TABLE e USING echo(r); 70*63e50b9eSdan} 71*63e50b9eSdanfaultsim_save_and_close 72*63e50b9eSdan 73*63e50b9eSdando_faultsim_test vtab_err-3 -faults oom-t* -prep { 74*63e50b9eSdan faultsim_restore_and_reopen 75*63e50b9eSdan register_echo_module [sqlite3_connection_pointer db] 76*63e50b9eSdan} -body { 77*63e50b9eSdan execsql { 78*63e50b9eSdan BEGIN; 79*63e50b9eSdan CREATE TABLE xyz(x); 80*63e50b9eSdan SELECT a FROM e; 81*63e50b9eSdan COMMIT; 82*63e50b9eSdan } 83*63e50b9eSdan} -test { 84*63e50b9eSdan faultsim_test_result {0 {}} 85*63e50b9eSdan} 86*63e50b9eSdan 87a298e90dSdanielk1977finish_test 88