xref: /sqlite-3.40.0/test/dbpagefault.test (revision afe76819)
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