wasCSharpSQLite – Blame information for rev 7
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | # 2007 April 24 |
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 | # This file implements regression tests for SQLite library. |
||
12 | # |
||
13 | # This file implements tests to make sure SQLite treats a database |
||
14 | # as readonly if its write version is set to high. |
||
15 | # |
||
16 | # $Id: rdonly.test,v 1.2 2008/07/08 10:19:58 danielk1977 Exp $ |
||
17 | |||
18 | set testdir [file dirname $argv0] |
||
19 | source $testdir/tester.tcl |
||
20 | |||
21 | # Do not use a codec for tests in this file, as the database file is |
||
22 | # manipulated directly using tcl scripts (using the [hexio_write] command). |
||
23 | # |
||
24 | do_not_use_codec |
||
25 | |||
26 | # Create a database. |
||
27 | # |
||
28 | do_test rdonly-1.1 { |
||
29 | execsql { |
||
30 | CREATE TABLE t1(x); |
||
31 | INSERT INTO t1 VALUES(1); |
||
32 | SELECT * FROM t1; |
||
33 | } |
||
34 | } {1} |
||
35 | |||
36 | # Changes the write version from 1 to 3. Verify that the database |
||
37 | # can be read but not written. |
||
38 | # |
||
39 | do_test rdonly-1.2 { |
||
40 | db close |
||
41 | hexio_get_int [hexio_read test.db 18 1] |
||
42 | } 1 |
||
43 | do_test rdonly-1.3 { |
||
44 | hexio_write test.db 18 03 |
||
45 | sqlite3 db test.db |
||
46 | execsql { |
||
47 | SELECT * FROM t1; |
||
48 | } |
||
49 | } {1} |
||
50 | do_test rdonly-1.4 { |
||
51 | catchsql { |
||
52 | INSERT INTO t1 VALUES(2) |
||
53 | } |
||
54 | } {1 {attempt to write a readonly database}} |
||
55 | |||
56 | # Change the write version back to 1. Verify that the database |
||
57 | # is read-write again. |
||
58 | # |
||
59 | do_test rdonly-1.5 { |
||
60 | db close |
||
61 | hexio_write test.db 18 01 |
||
62 | sqlite3 db test.db |
||
63 | catchsql { |
||
64 | INSERT INTO t1 VALUES(2); |
||
65 | SELECT * FROM t1; |
||
66 | } |
||
67 | } {0 {1 2}} |
||
68 | |||
69 | # Now, after connection [db] has loaded the database schema, modify the |
||
70 | # write-version of the file (and the change-counter, so that the |
||
71 | # write-version is reloaded). This way, SQLite does not discover that |
||
72 | # the database is read-only until after it is locked. |
||
73 | # |
||
74 | set ro_version 02 |
||
75 | ifcapable wal { set ro_version 03 } |
||
76 | do_test rdonly-1.6 { |
||
77 | hexio_write test.db 18 $ro_version ; # write-version |
||
78 | hexio_write test.db 24 11223344 ; # change-counter |
||
79 | catchsql { |
||
80 | INSERT INTO t1 VALUES(2); |
||
81 | } |
||
82 | } {1 {attempt to write a readonly database}} |
||
83 | |||
84 | finish_test |