1: # 2002 November 30
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. The
12: # focus of this script testing the ability of SQLite to handle database
13: # files larger than 4GB.
14: #
15: # $Id: bigfile.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
16: #
17:
18: set testdir [file dirname $argv0]
19: source $testdir/tester.tcl
20:
21: # Do not use a codec for this file, as the database is manipulated using
22: # external methods (the [fake_big_file] and [hexio_write] commands).
23: #
24: do_not_use_codec
25:
26: # If SQLITE_DISABLE_LFS is defined, omit this file.
27: ifcapable !lfs {
28: finish_test
29: return
30: }
31:
32: # These tests only work for Tcl version 8.4 and later. Prior to 8.4,
33: # Tcl was unable to handle large files.
34: #
35: scan $::tcl_version %f vx
36: if {$vx<8.4} return
37:
38: # Mac OS X does not handle large files efficiently. So skip this test
39: # on that platform.
40: if {$tcl_platform(os)=="Darwin"} return
41:
42: # This is the md5 checksum of all the data in table t1 as created
43: # by the first test. We will use this number to make sure that data
44: # never changes.
45: #
46: set MAGIC_SUM {593f1efcfdbe698c28b4b1b693f7e4cf}
47:
48: do_test bigfile-1.1 {
49: execsql {
50: BEGIN;
51: CREATE TABLE t1(x);
52: INSERT INTO t1 VALUES('abcdefghijklmnopqrstuvwxyz');
53: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
54: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
55: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
56: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
57: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
58: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
59: INSERT INTO t1 SELECT rowid || ' ' || x FROM t1;
60: COMMIT;
61: }
62: execsql {
63: SELECT md5sum(x) FROM t1;
64: }
65: } $::MAGIC_SUM
66:
67: # Try to create a large file - a file that is larger than 2^32 bytes.
68: # If this fails, it means that the system being tested does not support
69: # large files. So skip all of the remaining tests in this file.
70: #
71: db close
72: if {[catch {fake_big_file 4096 [pwd]/test.db} msg]} {
73: puts "**** Unable to create a file larger than 4096 MB. *****"
74: finish_test
75: return
76: }
77: hexio_write test.db 28 00000000
78:
79: do_test bigfile-1.2 {
80: sqlite3 db test.db
81: execsql {
82: SELECT md5sum(x) FROM t1;
83: }
84: } $::MAGIC_SUM
85:
86: # The previous test may fail on some systems because they are unable
87: # to handle large files. If that is so, then skip all of the following
88: # tests. We will know the above test failed because the "db" command
89: # does not exist.
90: #
91: if {[llength [info command db]]<=0} {
92: puts "**** Large file support appears to be broken. *****"
93: finish_test
94: return
95: }
96:
97: do_test bigfile-1.3 {
98: execsql {
99: CREATE TABLE t2 AS SELECT * FROM t1;
100: SELECT md5sum(x) FROM t2;
101: }
102: } $::MAGIC_SUM
103: do_test bigfile-1.4 {
104: db close
105: sqlite3 db test.db
106: execsql {
107: SELECT md5sum(x) FROM t1;
108: }
109: } $::MAGIC_SUM
110:
111: db close
112: if {[catch {fake_big_file 8192 [pwd]/test.db}]} {
113: puts "**** Unable to create a file larger than 8192 MB. *****"
114: finish_test
115: return
116: }
117: hexio_write test.db 28 00000000
118:
119: do_test bigfile-1.5 {
120: sqlite3 db test.db
121: execsql {
122: SELECT md5sum(x) FROM t1;
123: }
124: } $::MAGIC_SUM
125: do_test bigfile-1.6 {
126: sqlite3 db test.db
127: execsql {
128: SELECT md5sum(x) FROM t2;
129: }
130: } $::MAGIC_SUM
131: do_test bigfile-1.7 {
132: execsql {
133: CREATE TABLE t3 AS SELECT * FROM t1;
134: SELECT md5sum(x) FROM t3;
135: }
136: } $::MAGIC_SUM
137: do_test bigfile-1.8 {
138: db close
139: sqlite3 db test.db
140: execsql {
141: SELECT md5sum(x) FROM t1;
142: }
143: } $::MAGIC_SUM
144: do_test bigfile-1.9 {
145: execsql {
146: SELECT md5sum(x) FROM t2;
147: }
148: } $::MAGIC_SUM
149:
150: db close
151: if {[catch {fake_big_file 16384 [pwd]/test.db}]} {
152: puts "**** Unable to create a file larger than 16384 MB. *****"
153: finish_test
154: return
155: }
156: hexio_write test.db 28 00000000
157:
158: do_test bigfile-1.10 {
159: sqlite3 db test.db
160: execsql {
161: SELECT md5sum(x) FROM t1;
162: }
163: } $::MAGIC_SUM
164: do_test bigfile-1.11 {
165: sqlite3 db test.db
166: execsql {
167: SELECT md5sum(x) FROM t2;
168: }
169: } $::MAGIC_SUM
170: do_test bigfile-1.12 {
171: sqlite3 db test.db
172: execsql {
173: SELECT md5sum(x) FROM t3;
174: }
175: } $::MAGIC_SUM
176: do_test bigfile-1.13 {
177: execsql {
178: CREATE TABLE t4 AS SELECT * FROM t1;
179: SELECT md5sum(x) FROM t4;
180: }
181: } $::MAGIC_SUM
182: do_test bigfile-1.14 {
183: db close
184: sqlite3 db test.db
185: execsql {
186: SELECT md5sum(x) FROM t1;
187: }
188: } $::MAGIC_SUM
189: do_test bigfile-1.15 {
190: execsql {
191: SELECT md5sum(x) FROM t2;
192: }
193: } $::MAGIC_SUM
194: do_test bigfile-1.16 {
195: execsql {
196: SELECT md5sum(x) FROM t3;
197: }
198: } $::MAGIC_SUM
199:
200: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>