1# 2022 July 06 2# 3# The author disclaims copyright to this source code. In place of 4# a legal notice, here is a blessing: 5# 6# May you do good and not evil. 7# May you find forgiveness for yourself and forgive others. 8# May you share freely, never taking more than you give. 9# 10#*********************************************************************** 11# 12 13set testdir [file dirname $argv0] 14source $testdir/tester.tcl 15source $testdir/lock_common.tcl 16source $testdir/malloc_common.tcl 17 18if {[permutation] == "inmemory_journal"} { 19 finish_test 20 return 21} 22 23ifcapable !vtab { 24 finish_test 25 return 26} 27 28set testprefix dbpagefault 29 30faultsim_save_and_close 31do_faultsim_test 1 -prep { 32 faultsim_restore_and_reopen 33 execsql { ATTACH 'test.db2' AS aux; } 34} -body { 35 execsql { 36 CREATE VIRTUAL TABLE t1 USING sqlite_dbpage(); 37 } 38} -test { 39 execsql { PRAGMA journal_mode = off } 40 faultsim_test_result {0 {}} 41} 42 43do_faultsim_test 2 -prep { 44 sqlite3 db "xyz.db" -vfs memdb 45 execsql { ATTACH 'test.db2' AS aux; } 46} -body { 47 execsql { 48 CREATE VIRTUAL TABLE t1 USING sqlite_dbpage(); 49 INSERT INTO t1 DEFAULT VALUES; 50 } 51} -test { 52 execsql { PRAGMA journal_mode = off } 53 faultsim_test_result {1 {no such schema}} {1 {SQL logic error}} 54} 55 56reset_db 57do_execsql_test 3.0 { 58 CREATE TABLE x1(z, b); 59 CREATE TRIGGER BEFORE INSERT ON x1 BEGIN 60 DELETE FROM sqlite_dbpage WHERE pgno=100; 61 UPDATE sqlite_dbpage SET data=null WHERE pgno=100; 62 END; 63} 64 65# This test case no longer works, as it is no longer possible to use 66# virtual table sqlite_dbpage from within a trigger. 67# 68do_execsql_test 3.1 { 69 PRAGMA trusted_schema = 1; 70} 71do_catchsql_test 3.2 { 72 PRAGMA trusted_schema = 1; 73 INSERT INTO x1 DEFAULT VALUES; 74} {1 {unsafe use of virtual table "sqlite_dbpage"}} 75#do_faultsim_test 3 -prep { 76# catch { db close } 77# sqlite3 db test.db 78# execsql { PRAGMA trusted_schema = 1 } 79#} -body { 80# execsql { INSERT INTO x1 DEFAULT VALUES; } 81#} -test { 82# faultsim_test_result {0 {}} 83#} 84 85 86finish_test 87 88 89