Annotation of embedaddon/sqlite3/test/fallocate.test, revision 1.1.1.1
1.1 misho 1: # 2010 July 28
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:
13: set testdir [file dirname $argv0]
14: source $testdir/tester.tcl
15:
16: file_control_chunksize_test db main [expr 1024*1024]
17:
18: do_test fallocate-1.1 {
19: execsql {
20: PRAGMA page_size = 1024;
21: PRAGMA auto_vacuum = 1;
22: CREATE TABLE t1(a, b);
23: }
24: file size test.db
25: } [expr 1*1024*1024]
26:
27: do_test fallocate-1.2 {
28: execsql { INSERT INTO t1 VALUES(1, zeroblob(1024*900)) }
29: file size test.db
30: } [expr 1*1024*1024]
31:
32: do_test fallocate-1.3 {
33: execsql { INSERT INTO t1 VALUES(2, zeroblob(1024*900)) }
34: file size test.db
35: } [expr 2*1024*1024]
36:
37: do_test fallocate-1.4 {
38: execsql { DELETE FROM t1 WHERE a = 1 }
39: file size test.db
40: } [expr 1*1024*1024]
41:
42: do_test fallocate-1.5 {
43: execsql { DELETE FROM t1 WHERE a = 2 }
44: file size test.db
45: } [expr 1*1024*1024]
46:
47: do_test fallocate-1.6 {
48: execsql { PRAGMA freelist_count }
49: } {0}
50:
51: # Start a write-transaction and read the "database file size" field from
52: # the journal file. This field should be set to the number of pages in
53: # the database file based on the size of the file on disk, not the actual
54: # logical size of the database within the file.
55: #
56: # We need to check this to verify that if in the unlikely event a rollback
57: # causes a database file to grow, the database grows to its previous size
58: # on disk, not to the minimum size required to hold the database image.
59: #
60: do_test fallocate-1.7 {
61: execsql { BEGIN; INSERT INTO t1 VALUES(1, 2); }
62: if {[permutation] != "inmemory_journal"} {
63: hexio_get_int [hexio_read test.db-journal 16 4]
64: } else {
65: set {} 1024
66: }
67: } {1024}
68: do_test fallocate-1.8 { execsql { COMMIT } } {}
69:
70:
71: #-------------------------------------------------------------------------
72: # The following tests - fallocate-2.* - test that things work in WAL
73: # mode as well.
74: #
75: set skipwaltests [expr {
76: [permutation]=="journaltest" || [permutation]=="inmemory_journal"
77: }]
78: ifcapable !wal { set skipwaltests 1 }
79:
80: if {!$skipwaltests} {
81: db close
82: forcedelete test.db
83: sqlite3 db test.db
84: file_control_chunksize_test db main [expr 32*1024]
85:
86: do_test fallocate-2.1 {
87: execsql {
88: PRAGMA page_size = 1024;
89: PRAGMA journal_mode = WAL;
90: CREATE TABLE t1(a, b);
91: }
92: file size test.db
93: } [expr 32*1024]
94:
95: do_test fallocate-2.2 {
96: execsql { INSERT INTO t1 VALUES(1, zeroblob(35*1024)) }
97: execsql { PRAGMA wal_checkpoint }
98: file size test.db
99: } [expr 64*1024]
100:
101: do_test fallocate-2.3 {
102: execsql { DELETE FROM t1 }
103: execsql { VACUUM }
104: file size test.db
105: } [expr 64*1024]
106:
107: do_test fallocate-2.4 {
108: execsql { PRAGMA wal_checkpoint }
109: file size test.db
110: } [expr 32*1024]
111:
112: do_test fallocate-2.5 {
113: execsql {
114: INSERT INTO t1 VALUES(2, randomblob(35*1024));
115: PRAGMA wal_checkpoint;
116: INSERT INTO t1 VALUES(3, randomblob(128));
117: DELETE FROM t1 WHERE a = 2;
118: VACUUM;
119: }
120: file size test.db
121: } [expr 64*1024]
122:
123: do_test fallocate-2.6 {
124: sqlite3 db2 test.db
125: execsql { BEGIN ; SELECT count(a) FROM t1 } db2
126: execsql {
127: INSERT INTO t1 VALUES(4, randomblob(128));
128: PRAGMA wal_checkpoint;
129: }
130: file size test.db
131: } [expr 64*1024]
132:
133: do_test fallocate-2.7 {
134: execsql { SELECT count(b) FROM t1 } db2
135: } {1}
136:
137: do_test fallocate-2.8 {
138: execsql { COMMIT } db2
139: execsql { PRAGMA wal_checkpoint }
140: file size test.db
141: } [expr 32*1024]
142: }
143:
144:
145: finish_test
146:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>