summaryrefslogtreecommitdiffstats
path: root/test/pagesize.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/pagesize.test')
-rw-r--r--test/pagesize.test237
1 files changed, 237 insertions, 0 deletions
diff --git a/test/pagesize.test b/test/pagesize.test
new file mode 100644
index 0000000..8800530
--- /dev/null
+++ b/test/pagesize.test
@@ -0,0 +1,237 @@
+# 2004 September 2
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library.
+# This file implements tests for the page_size PRAGMA.
+#
+# $Id: pagesize.test,v 1.13 2008/08/26 21:07:27 drh Exp $
+
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+# This test script depends entirely on "PRAGMA page_size". So if this
+# pragma is not available, omit the whole file.
+ifcapable !pager_pragmas {
+ finish_test
+ return
+}
+
+do_test pagesize-1.1 {
+ execsql {PRAGMA page_size}
+} 1024
+ifcapable {explain} {
+ do_test pagesize-1.2 {
+ catch {execsql {EXPLAIN PRAGMA page_size}}
+ } 0
+}
+do_test pagesize-1.3 {
+ execsql {
+ CREATE TABLE t1(a);
+ PRAGMA page_size=2048;
+ PRAGMA page_size;
+ }
+} 1024
+
+do_test pagesize-1.4 {
+ db close
+ forcedelete test.db
+ sqlite3 db test.db
+ execsql {
+ PRAGMA page_size=511;
+ PRAGMA page_size;
+ }
+} 1024
+do_test pagesize-1.5 {
+ execsql {
+ PRAGMA page_size=512;
+ PRAGMA page_size;
+ }
+} 512
+if {![info exists SQLITE_MAX_PAGE_SIZE] || $SQLITE_MAX_PAGE_SIZE>=8192} {
+ do_test pagesize-1.6 {
+ execsql {
+ PRAGMA page_size=8192;
+ PRAGMA page_size;
+ }
+ } 8192
+ do_test pagesize-1.7 {
+ execsql {
+ PRAGMA page_size=65537;
+ PRAGMA page_size;
+ }
+ } 8192
+ do_test pagesize-1.8 {
+ execsql {
+ PRAGMA page_size=1234;
+ PRAGMA page_size
+ }
+ } 8192
+}
+foreach PGSZ {512 2048 4096 8192} {
+ if {[info exists SQLITE_MAX_PAGE_SIZE]
+ && $SQLITE_MAX_PAGE_SIZE<$PGSZ} continue
+ ifcapable memorydb {
+ do_test pagesize-2.$PGSZ.0.1 {
+ db close
+ sqlite3 db :memory:
+ execsql "PRAGMA page_size=$PGSZ;"
+ execsql {PRAGMA page_size}
+ } $PGSZ
+ do_test pagesize-2.$PGSZ.0.2 {
+ execsql {CREATE TABLE t1(x UNIQUE, y UNIQUE, z UNIQUE)}
+ execsql {PRAGMA page_size}
+ } $PGSZ
+ do_test pagesize-2.$PGSZ.0.3 {
+ execsql {
+ INSERT INTO t1 VALUES(1,2,3);
+ INSERT INTO t1 VALUES(2,3,4);
+ SELECT * FROM t1;
+ }
+ } {1 2 3 2 3 4}
+ }
+ do_test pagesize-2.$PGSZ.1 {
+ db close
+ forcedelete test.db
+ sqlite3 db test.db
+ execsql "PRAGMA page_size=$PGSZ"
+ execsql {
+ CREATE TABLE t1(x);
+ PRAGMA page_size;
+ }
+ } $PGSZ
+ do_test pagesize-2.$PGSZ.2 {
+ db close
+ sqlite3 db test.db
+ execsql {
+ PRAGMA page_size
+ }
+ } $PGSZ
+ do_test pagesize-2.$PGSZ.3 {
+ file size test.db
+ } [expr {$PGSZ*($AUTOVACUUM?3:2)}]
+ ifcapable {vacuum} {
+ do_test pagesize-2.$PGSZ.4 {
+ execsql {VACUUM}
+ } {}
+ }
+ integrity_check pagesize-2.$PGSZ.5
+ do_test pagesize-2.$PGSZ.6 {
+ db close
+ sqlite3 db test.db
+ execsql {PRAGMA page_size}
+ } $PGSZ
+ do_test pagesize-2.$PGSZ.7 {
+ execsql {
+ INSERT INTO t1 VALUES(randstr(10,9000));
+ INSERT INTO t1 VALUES(randstr(10,9000));
+ INSERT INTO t1 VALUES(randstr(10,9000));
+ BEGIN;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ SELECT count(*) FROM t1;
+ }
+ } 48
+ do_test pagesize-2.$PGSZ.8 {
+ execsql {
+ ROLLBACK;
+ SELECT count(*) FROM t1;
+ }
+ } 3
+ integrity_check pagesize-2.$PGSZ.9
+ do_test pagesize-2.$PGSZ.10 {
+ db close
+ sqlite3 db test.db
+ execsql {PRAGMA page_size}
+ } $PGSZ
+ do_test pagesize-2.$PGSZ.11 {
+ execsql {
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ INSERT INTO t1 SELECT x||x FROM t1;
+ SELECT count(*) FROM t1;
+ }
+ } 192
+ do_test pagesize-2.$PGSZ.12 {
+ execsql {
+ BEGIN;
+ DELETE FROM t1 WHERE rowid%5!=0;
+ SELECT count(*) FROM t1;
+ }
+ } 38
+ do_test pagesize-2.$PGSZ.13 {
+ execsql {
+ ROLLBACK;
+ SELECT count(*) FROM t1;
+ }
+ } 192
+ integrity_check pagesize-2.$PGSZ.14
+ do_test pagesize-2.$PGSZ.15 {
+ execsql {DELETE FROM t1 WHERE rowid%5!=0}
+ ifcapable {vacuum} {execsql VACUUM}
+ execsql {SELECT count(*) FROM t1}
+ } 38
+ do_test pagesize-2.$PGSZ.16 {
+ execsql {DROP TABLE t1}
+ ifcapable {vacuum} {execsql VACUUM}
+ } {}
+ integrity_check pagesize-2.$PGSZ.17
+
+ db close
+ forcedelete test.db
+ sqlite3 db test.db
+ do_test pagesize-2.$PGSZ.30 {
+ execsql "
+ CREATE TABLE t1(x);
+ PRAGMA temp.page_size=$PGSZ;
+ CREATE TEMP TABLE t2(y);
+ PRAGMA main.page_size;
+ PRAGMA temp.page_size;
+ "
+ } [list 1024 $PGSZ]
+
+ db close
+ forcedelete test.db
+ sqlite3 db test.db
+ do_test pagesize-2.$PGSZ.40 {
+ execsql "
+ PRAGMA page_size=$PGSZ;
+ CREATE TABLE t1(x);
+ CREATE TEMP TABLE t2(y);
+ PRAGMA main.page_size;
+ PRAGMA temp.page_size;
+ "
+ } [list $PGSZ $PGSZ]
+}
+
+reset_db
+do_execsql_test pagesize-3.1 {
+ BEGIN;
+ SELECT * FROM sqlite_master;
+ PRAGMA page_size=2048;
+ PRAGMA main.page_size;
+} {1024}
+do_execsql_test pagesize-3.2 {
+ CREATE TABLE t1(x);
+ COMMIT;
+}
+do_execsql_test pagesize-3.3 {
+ BEGIN;
+ PRAGMA page_size = 2048;
+ COMMIT;
+ PRAGMA main.page_size;
+} {1024}
+
+finish_test