1*1da57d55SToomas Soome# 2c5c4113dSnw141292# 2002 November 30 3c5c4113dSnw141292# 4c5c4113dSnw141292# The author disclaims copyright to this source code. In place of 5c5c4113dSnw141292# a legal notice, here is a blessing: 6c5c4113dSnw141292# 7c5c4113dSnw141292# May you do good and not evil. 8c5c4113dSnw141292# May you find forgiveness for yourself and forgive others. 9c5c4113dSnw141292# May you share freely, never taking more than you give. 10c5c4113dSnw141292# 11c5c4113dSnw141292#*********************************************************************** 12c5c4113dSnw141292# This file implements regression tests for SQLite library. The 13c5c4113dSnw141292# focus of this script testing the ability of SQLite to handle database 14c5c4113dSnw141292# files larger than 4GB. 15c5c4113dSnw141292# 16c5c4113dSnw141292# $Id: bigfile.test,v 1.3 2003/12/19 12:31:22 drh Exp $ 17c5c4113dSnw141292# 18c5c4113dSnw141292 19c5c4113dSnw141292set testdir [file dirname $argv0] 20c5c4113dSnw141292source $testdir/tester.tcl 21c5c4113dSnw141292 22c5c4113dSnw141292# These tests only work for Tcl version 8.4 and later. Prior to 8.4, 23c5c4113dSnw141292# Tcl was unable to handle large files. 24c5c4113dSnw141292# 25c5c4113dSnw141292scan $::tcl_version %f vx 26c5c4113dSnw141292if {$vx<8.4} return 27c5c4113dSnw141292 28c5c4113dSnw141292# This is the md5 checksum of all the data in table t1 as created 29c5c4113dSnw141292# by the first test. We will use this number to make sure that data 30c5c4113dSnw141292# never changes. 31c5c4113dSnw141292# 32c5c4113dSnw141292set MAGIC_SUM {593f1efcfdbe698c28b4b1b693f7e4cf} 33c5c4113dSnw141292 34c5c4113dSnw141292do_test bigfile-1.1 { 35c5c4113dSnw141292 execsql { 36c5c4113dSnw141292 BEGIN; 37c5c4113dSnw141292 CREATE TABLE t1(x); 38c5c4113dSnw141292 INSERT INTO t1 VALUES('abcdefghijklmnopqrstuvwxyz'); 39c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 40c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 41c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 42c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 43c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 44c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 45c5c4113dSnw141292 INSERT INTO t1 SELECT rowid || ' ' || x FROM t1; 46c5c4113dSnw141292 COMMIT; 47c5c4113dSnw141292 } 48c5c4113dSnw141292 execsql { 49c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 50c5c4113dSnw141292 } 51c5c4113dSnw141292} $::MAGIC_SUM 52c5c4113dSnw141292 53c5c4113dSnw141292# Try to create a large file - a file that is larger than 2^32 bytes. 54c5c4113dSnw141292# If this fails, it means that the system being tested does not support 55c5c4113dSnw141292# large files. So skip all of the remaining tests in this file. 56c5c4113dSnw141292# 57c5c4113dSnw141292db close 58c5c4113dSnw141292if {[catch {fake_big_file 4096 test.db}]} { 59c5c4113dSnw141292 puts "**** Unable to create a file larger than 4096 MB. *****" 60c5c4113dSnw141292 finish_test 61c5c4113dSnw141292 return 62c5c4113dSnw141292} 63c5c4113dSnw141292 64c5c4113dSnw141292do_test bigfile-1.2 { 65c5c4113dSnw141292 sqlite db test.db 66c5c4113dSnw141292 execsql { 67c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 68c5c4113dSnw141292 } 69c5c4113dSnw141292} $::MAGIC_SUM 70c5c4113dSnw141292 71c5c4113dSnw141292# The previous test may fail on some systems because they are unable 72c5c4113dSnw141292# to handle large files. If that is so, then skip all of the following 73c5c4113dSnw141292# tests. We will know the above test failed because the "db" command 74c5c4113dSnw141292# does not exist. 75c5c4113dSnw141292# 76c5c4113dSnw141292if {[llength [info command db]]>0} { 77c5c4113dSnw141292 78c5c4113dSnw141292do_test bigfile-1.3 { 79c5c4113dSnw141292 execsql { 80c5c4113dSnw141292 CREATE TABLE t2 AS SELECT * FROM t1; 81c5c4113dSnw141292 SELECT md5sum(x) FROM t2; 82c5c4113dSnw141292 } 83c5c4113dSnw141292} $::MAGIC_SUM 84c5c4113dSnw141292do_test bigfile-1.4 { 85c5c4113dSnw141292 db close 86c5c4113dSnw141292 sqlite db test.db 87c5c4113dSnw141292 execsql { 88c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 89c5c4113dSnw141292 } 90c5c4113dSnw141292} $::MAGIC_SUM 91c5c4113dSnw141292do_test bigfile-1.5 { 92c5c4113dSnw141292 execsql { 93c5c4113dSnw141292 SELECT md5sum(x) FROM t2; 94c5c4113dSnw141292 } 95c5c4113dSnw141292} $::MAGIC_SUM 96c5c4113dSnw141292 97c5c4113dSnw141292db close 98c5c4113dSnw141292if {[catch {fake_big_file 8192 test.db}]} { 99c5c4113dSnw141292 puts "**** Unable to create a file larger than 8192 MB. *****" 100c5c4113dSnw141292 finish_test 101c5c4113dSnw141292 return 102c5c4113dSnw141292} 103c5c4113dSnw141292 104c5c4113dSnw141292do_test bigfile-1.6 { 105c5c4113dSnw141292 sqlite db test.db 106c5c4113dSnw141292 execsql { 107c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 108c5c4113dSnw141292 } 109c5c4113dSnw141292} $::MAGIC_SUM 110c5c4113dSnw141292do_test bigfile-1.7 { 111c5c4113dSnw141292 execsql { 112c5c4113dSnw141292 CREATE TABLE t3 AS SELECT * FROM t1; 113c5c4113dSnw141292 SELECT md5sum(x) FROM t3; 114c5c4113dSnw141292 } 115c5c4113dSnw141292} $::MAGIC_SUM 116c5c4113dSnw141292do_test bigfile-1.8 { 117c5c4113dSnw141292 db close 118c5c4113dSnw141292 sqlite db test.db 119c5c4113dSnw141292 execsql { 120c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 121c5c4113dSnw141292 } 122c5c4113dSnw141292} $::MAGIC_SUM 123c5c4113dSnw141292do_test bigfile-1.9 { 124c5c4113dSnw141292 execsql { 125c5c4113dSnw141292 SELECT md5sum(x) FROM t2; 126c5c4113dSnw141292 } 127c5c4113dSnw141292} $::MAGIC_SUM 128c5c4113dSnw141292do_test bigfile-1.10 { 129c5c4113dSnw141292 execsql { 130c5c4113dSnw141292 SELECT md5sum(x) FROM t3; 131c5c4113dSnw141292 } 132c5c4113dSnw141292} $::MAGIC_SUM 133c5c4113dSnw141292 134c5c4113dSnw141292db close 135c5c4113dSnw141292if {[catch {fake_big_file 16384 test.db}]} { 136c5c4113dSnw141292 puts "**** Unable to create a file larger than 16384 MB. *****" 137c5c4113dSnw141292 finish_test 138c5c4113dSnw141292 return 139c5c4113dSnw141292} 140c5c4113dSnw141292 141c5c4113dSnw141292do_test bigfile-1.11 { 142c5c4113dSnw141292 sqlite db test.db 143c5c4113dSnw141292 execsql { 144c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 145c5c4113dSnw141292 } 146c5c4113dSnw141292} $::MAGIC_SUM 147c5c4113dSnw141292do_test bigfile-1.12 { 148c5c4113dSnw141292 execsql { 149c5c4113dSnw141292 CREATE TABLE t4 AS SELECT * FROM t1; 150c5c4113dSnw141292 SELECT md5sum(x) FROM t4; 151c5c4113dSnw141292 } 152c5c4113dSnw141292} $::MAGIC_SUM 153c5c4113dSnw141292do_test bigfile-1.13 { 154c5c4113dSnw141292 db close 155c5c4113dSnw141292 sqlite db test.db 156c5c4113dSnw141292 execsql { 157c5c4113dSnw141292 SELECT md5sum(x) FROM t1; 158c5c4113dSnw141292 } 159c5c4113dSnw141292} $::MAGIC_SUM 160c5c4113dSnw141292do_test bigfile-1.14 { 161c5c4113dSnw141292 execsql { 162c5c4113dSnw141292 SELECT md5sum(x) FROM t2; 163c5c4113dSnw141292 } 164c5c4113dSnw141292} $::MAGIC_SUM 165c5c4113dSnw141292do_test bigfile-1.15 { 166c5c4113dSnw141292 execsql { 167c5c4113dSnw141292 SELECT md5sum(x) FROM t3; 168c5c4113dSnw141292 } 169c5c4113dSnw141292} $::MAGIC_SUM 170c5c4113dSnw141292do_test bigfile-1.16 { 171c5c4113dSnw141292 execsql { 172c5c4113dSnw141292 SELECT md5sum(x) FROM t3; 173c5c4113dSnw141292 } 174c5c4113dSnw141292} $::MAGIC_SUM 175c5c4113dSnw141292 176c5c4113dSnw141292} ;# End of the "if( db command exists )" 177c5c4113dSnw141292 178c5c4113dSnw141292finish_test 179