# 2017-07-15 # # 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. The # focus of this file is error handling in the swarmvtab extension. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix swarmvtabfault ifcapable !vtab { finish_test return } proc fetch_db {file} { forcedelete $file sqlite3 dbX $file set rc [catch { dbX eval { CREATE TABLE t1(a INTEGER PRIMARY KEY, b) } } res] dbX close if {$rc!=0} {error $res} } forcedelete test.db1 forcedelete test.db2 do_execsql_test 1.0 { ATTACH 'test.db1' AS aux; CREATE TABLE aux.t1(a INTEGER PRIMARY KEY, b); INSERT INTO aux.t1 VALUES(1, NULL); INSERT INTO aux.t1 VALUES(2, NULL); INSERT INTO aux.t1 VALUES(9, NULL); DETACH aux; } {} faultsim_save_and_close do_faultsim_test 1.1 -faults oom* -prep { faultsim_restore_and_reopen db func fetch_db fetch_db load_static_extension db unionvtab db eval { CREATE VIRTUAL TABLE temp.xyz USING swarmvtab( 'VALUES ("test.db1", "t1", 1, 10), ("test.db2", "t1", 11, 20) ', 'fetch_db' ); } } -body { execsql { SELECT a FROM xyz } } -test { faultsim_test_result {0 {1 2 9}} {1 {sql error: out of memory}} } finish_test