| OLD | NEW | 
 | (Empty) | 
|    1 # 2004 September 2 |  | 
|    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 # This file implements tests for the page_size PRAGMA. |  | 
|   13 # |  | 
|   14 # $Id: pagesize.test,v 1.13 2008/08/26 21:07:27 drh Exp $ |  | 
|   15  |  | 
|   16  |  | 
|   17 set testdir [file dirname $argv0] |  | 
|   18 source $testdir/tester.tcl |  | 
|   19  |  | 
|   20 # This test script depends entirely on "PRAGMA page_size". So if this |  | 
|   21 # pragma is not available, omit the whole file. |  | 
|   22 ifcapable !pager_pragmas { |  | 
|   23   finish_test |  | 
|   24   return |  | 
|   25 } |  | 
|   26  |  | 
|   27 do_test pagesize-1.1 { |  | 
|   28   execsql {PRAGMA page_size} |  | 
|   29 } 1024 |  | 
|   30 ifcapable {explain} { |  | 
|   31   do_test pagesize-1.2 { |  | 
|   32     catch {execsql {EXPLAIN PRAGMA page_size}} |  | 
|   33   } 0 |  | 
|   34 } |  | 
|   35 do_test pagesize-1.3 { |  | 
|   36   execsql { |  | 
|   37     CREATE TABLE t1(a); |  | 
|   38     PRAGMA page_size=2048; |  | 
|   39     PRAGMA page_size; |  | 
|   40   } |  | 
|   41 } 1024 |  | 
|   42  |  | 
|   43 do_test pagesize-1.4 { |  | 
|   44   db close |  | 
|   45   file delete -force test.db |  | 
|   46   sqlite3 db test.db |  | 
|   47   execsql { |  | 
|   48     PRAGMA page_size=511; |  | 
|   49     PRAGMA page_size; |  | 
|   50   } |  | 
|   51 } 1024 |  | 
|   52 do_test pagesize-1.5 { |  | 
|   53   execsql { |  | 
|   54     PRAGMA page_size=512; |  | 
|   55     PRAGMA page_size; |  | 
|   56   } |  | 
|   57 } 512 |  | 
|   58 if {![info exists SQLITE_MAX_PAGE_SIZE] || $SQLITE_MAX_PAGE_SIZE>=8192} { |  | 
|   59   do_test pagesize-1.6 { |  | 
|   60     execsql { |  | 
|   61       PRAGMA page_size=8192; |  | 
|   62       PRAGMA page_size; |  | 
|   63     } |  | 
|   64   } 8192 |  | 
|   65   do_test pagesize-1.7 { |  | 
|   66     execsql { |  | 
|   67       PRAGMA page_size=65537; |  | 
|   68       PRAGMA page_size; |  | 
|   69     } |  | 
|   70   } 8192 |  | 
|   71   do_test pagesize-1.8 { |  | 
|   72     execsql { |  | 
|   73       PRAGMA page_size=1234; |  | 
|   74       PRAGMA page_size |  | 
|   75     } |  | 
|   76   } 8192 |  | 
|   77 }   |  | 
|   78 foreach PGSZ {512 2048 4096 8192} { |  | 
|   79   if {[info exists SQLITE_MAX_PAGE_SIZE] |  | 
|   80            && $SQLITE_MAX_PAGE_SIZE<$PGSZ} continue |  | 
|   81   ifcapable memorydb { |  | 
|   82     do_test pagesize-2.$PGSZ.0.1 { |  | 
|   83       db close |  | 
|   84       sqlite3 db :memory: |  | 
|   85       execsql "PRAGMA page_size=$PGSZ;" |  | 
|   86       execsql {PRAGMA page_size} |  | 
|   87     } $PGSZ |  | 
|   88     do_test pagesize-2.$PGSZ.0.2 { |  | 
|   89       execsql {CREATE TABLE t1(x UNIQUE, y UNIQUE, z UNIQUE)} |  | 
|   90       execsql {PRAGMA page_size} |  | 
|   91     } $PGSZ |  | 
|   92     do_test pagesize-2.$PGSZ.0.3 { |  | 
|   93       execsql { |  | 
|   94         INSERT INTO t1 VALUES(1,2,3); |  | 
|   95         INSERT INTO t1 VALUES(2,3,4); |  | 
|   96         SELECT * FROM t1; |  | 
|   97       } |  | 
|   98     } {1 2 3 2 3 4} |  | 
|   99   } |  | 
|  100   do_test pagesize-2.$PGSZ.1 { |  | 
|  101     db close |  | 
|  102     file delete -force test.db |  | 
|  103     sqlite3 db test.db |  | 
|  104     execsql "PRAGMA page_size=$PGSZ" |  | 
|  105     execsql { |  | 
|  106       CREATE TABLE t1(x); |  | 
|  107       PRAGMA page_size; |  | 
|  108     } |  | 
|  109   } $PGSZ |  | 
|  110   do_test pagesize-2.$PGSZ.2 { |  | 
|  111     db close |  | 
|  112     sqlite3 db test.db |  | 
|  113     execsql { |  | 
|  114       PRAGMA page_size |  | 
|  115     } |  | 
|  116   } $PGSZ |  | 
|  117   do_test pagesize-2.$PGSZ.3 { |  | 
|  118     file size test.db |  | 
|  119   } [expr {$PGSZ*($AUTOVACUUM?3:2)}] |  | 
|  120   ifcapable {vacuum} { |  | 
|  121     do_test pagesize-2.$PGSZ.4 { |  | 
|  122       execsql {VACUUM} |  | 
|  123     } {} |  | 
|  124   } |  | 
|  125   integrity_check pagesize-2.$PGSZ.5 |  | 
|  126   do_test pagesize-2.$PGSZ.6 { |  | 
|  127     db close |  | 
|  128     sqlite3 db test.db |  | 
|  129     execsql {PRAGMA page_size} |  | 
|  130   } $PGSZ |  | 
|  131   do_test pagesize-2.$PGSZ.7 { |  | 
|  132     execsql { |  | 
|  133       INSERT INTO t1 VALUES(randstr(10,9000)); |  | 
|  134       INSERT INTO t1 VALUES(randstr(10,9000)); |  | 
|  135       INSERT INTO t1 VALUES(randstr(10,9000)); |  | 
|  136       BEGIN; |  | 
|  137       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  138       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  139       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  140       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  141       SELECT count(*) FROM t1; |  | 
|  142     } |  | 
|  143   } 48 |  | 
|  144   do_test pagesize-2.$PGSZ.8 { |  | 
|  145     execsql { |  | 
|  146       ROLLBACK; |  | 
|  147       SELECT count(*) FROM t1; |  | 
|  148     } |  | 
|  149   } 3 |  | 
|  150   integrity_check pagesize-2.$PGSZ.9 |  | 
|  151   do_test pagesize-2.$PGSZ.10 { |  | 
|  152     db close |  | 
|  153     sqlite3 db test.db |  | 
|  154     execsql {PRAGMA page_size} |  | 
|  155   } $PGSZ |  | 
|  156   do_test pagesize-2.$PGSZ.11 { |  | 
|  157     execsql { |  | 
|  158       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  159       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  160       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  161       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  162       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  163       INSERT INTO t1 SELECT x||x FROM t1; |  | 
|  164       SELECT count(*) FROM t1; |  | 
|  165     } |  | 
|  166   } 192 |  | 
|  167   do_test pagesize-2.$PGSZ.12 { |  | 
|  168     execsql { |  | 
|  169       BEGIN; |  | 
|  170       DELETE FROM t1 WHERE rowid%5!=0; |  | 
|  171       SELECT count(*) FROM t1; |  | 
|  172     } |  | 
|  173   } 38 |  | 
|  174   do_test pagesize-2.$PGSZ.13 { |  | 
|  175     execsql { |  | 
|  176       ROLLBACK; |  | 
|  177       SELECT count(*) FROM t1; |  | 
|  178     } |  | 
|  179   } 192 |  | 
|  180   integrity_check pagesize-2.$PGSZ.14 |  | 
|  181   do_test pagesize-2.$PGSZ.15 { |  | 
|  182     execsql {DELETE FROM t1 WHERE rowid%5!=0} |  | 
|  183     ifcapable {vacuum} {execsql VACUUM} |  | 
|  184     execsql {SELECT count(*) FROM t1} |  | 
|  185   } 38 |  | 
|  186   do_test pagesize-2.$PGSZ.16 { |  | 
|  187     execsql {DROP TABLE t1} |  | 
|  188     ifcapable {vacuum} {execsql VACUUM} |  | 
|  189   } {} |  | 
|  190   integrity_check pagesize-2.$PGSZ.17 |  | 
|  191 } |  | 
|  192  |  | 
|  193 finish_test |  | 
| OLD | NEW |