blob: b41ac66235d663c33a184163a5c395a3c6d9d2c8 [file] [log] [blame]
dane36281f2022-07-06 13:59:45 +00001# 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
danafe76812022-11-08 19:36:26 +000023ifcapable !vtab {
24 finish_test
25 return
26}
27
dane36281f2022-07-06 13:59:45 +000028set testprefix dbpagefault
29
dane36281f2022-07-06 13:59:45 +000030faultsim_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
danf56291e2022-08-19 20:10:51 +000056reset_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
danf53c0a02022-11-05 19:26:45 +000065# 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;
danf56291e2022-08-19 20:10:51 +000070}
danf53c0a02022-11-05 19:26:45 +000071do_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#}
danf56291e2022-08-19 20:10:51 +000084
85
dane36281f2022-07-06 13:59:45 +000086finish_test
danf56291e2022-08-19 20:10:51 +000087
88