| OLD | NEW | 
 | (Empty) | 
|    1 # 2001 September 15 |  | 
|    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 tests that rollback journals for databases that use a  |  | 
|   12 # page-size other than the default page-size can be rolled back Ok. |  | 
|   13 # |  | 
|   14 # $Id: crash6.test,v 1.2 2008/04/14 15:27:19 drh Exp $ |  | 
|   15  |  | 
|   16 set testdir [file dirname $argv0] |  | 
|   17 source $testdir/tester.tcl |  | 
|   18  |  | 
|   19 ifcapable !crashtest { |  | 
|   20   finish_test |  | 
|   21   return |  | 
|   22 } |  | 
|   23  |  | 
|   24 for {set ii 0} {$ii < 10} {incr ii} { |  | 
|   25   catch {db close} |  | 
|   26   file delete -force test.db test.db-journal |  | 
|   27   crashsql -delay 2 -file test.db { |  | 
|   28     PRAGMA auto_vacuum=OFF; |  | 
|   29     PRAGMA page_size=4096; |  | 
|   30     BEGIN; |  | 
|   31     CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c; |  | 
|   32     COMMIT; |  | 
|   33     BEGIN; |  | 
|   34     CREATE TABLE def AS SELECT 1 AS d, 2 AS e, 3 AS f; |  | 
|   35     COMMIT; |  | 
|   36   } |  | 
|   37   sqlite3 db test.db |  | 
|   38   integrity_check crash6-1.$ii |  | 
|   39 } |  | 
|   40  |  | 
|   41 for {set ii 0} {$ii < 10} {incr ii} { |  | 
|   42   catch {db close} |  | 
|   43   file delete -force test.db test.db-journal |  | 
|   44   sqlite3 db test.db |  | 
|   45   execsql { |  | 
|   46     PRAGMA auto_vacuum=OFF; |  | 
|   47     PRAGMA page_size=2048; |  | 
|   48     BEGIN; |  | 
|   49     CREATE TABLE abc AS SELECT 1 AS a, 2 AS b, 3 AS c; |  | 
|   50     COMMIT; |  | 
|   51   } |  | 
|   52   db close |  | 
|   53   crashsql -delay 1 -file test.db { |  | 
|   54     INSERT INTO abc VALUES(5, 6, 7); |  | 
|   55   } |  | 
|   56   sqlite3 db test.db |  | 
|   57   integrity_check crash6-2.$ii |  | 
|   58 } |  | 
|   59  |  | 
|   60 proc signature {} { |  | 
|   61   return [db eval {SELECT count(*), md5sum(a), md5sum(b), md5sum(c) FROM abc}] |  | 
|   62 } |  | 
|   63  |  | 
|   64 # Test case for crashing during database sync with page-size values  |  | 
|   65 # from 1024 to 8192. |  | 
|   66 # |  | 
|   67 for {set ii 0} {$ii < 30} {incr ii} { |  | 
|   68   db close |  | 
|   69   file delete -force test.db |  | 
|   70   sqlite3 db test.db |  | 
|   71  |  | 
|   72   set pagesize [expr 1024 << ($ii % 4)] |  | 
|   73   if {$pagesize>$::SQLITE_MAX_PAGE_SIZE} { |  | 
|   74     set pagesize $::SQLITE_MAX_PAGE_SIZE |  | 
|   75   } |  | 
|   76   do_test crash6-3.$ii.0 { |  | 
|   77     execsql "pragma page_size = $pagesize" |  | 
|   78     execsql "pragma page_size" |  | 
|   79   } $pagesize |  | 
|   80  |  | 
|   81   do_test crash6-3.$ii.1 { |  | 
|   82    |  | 
|   83     execsql BEGIN |  | 
|   84     execsql {CREATE TABLE abc(a, b, c)} |  | 
|   85     for {set n 0} {$n < 1000} {incr n} { |  | 
|   86       execsql "INSERT INTO abc VALUES($n, [expr 2*$n], [expr 3*$n])" |  | 
|   87     } |  | 
|   88     execsql { |  | 
|   89       INSERT INTO abc SELECT * FROM abc; |  | 
|   90       INSERT INTO abc SELECT * FROM abc; |  | 
|   91       INSERT INTO abc SELECT * FROM abc; |  | 
|   92       INSERT INTO abc SELECT * FROM abc; |  | 
|   93       INSERT INTO abc SELECT * FROM abc; |  | 
|   94     } |  | 
|   95     execsql COMMIT |  | 
|   96     expr ([file size test.db] / 1024) > 450 |  | 
|   97   } {1} |  | 
|   98  |  | 
|   99   set sig [signature] |  | 
|  100   db close |  | 
|  101  |  | 
|  102   do_test crash6-3.$ii.2 { |  | 
|  103      crashsql -file test.db " |  | 
|  104        BEGIN; |  | 
|  105        SELECT random() FROM abc LIMIT $ii; |  | 
|  106        INSERT INTO abc SELECT randstr(10,10), 0, 0 FROM abc WHERE random()%2==0; |  | 
|  107        DELETE FROM abc WHERE random()%2!=0; |  | 
|  108        COMMIT; |  | 
|  109      " |  | 
|  110   } {1 {child process exited abnormally}} |  | 
|  111  |  | 
|  112   do_test crash6-3.$ii.3 { |  | 
|  113     sqlite3 db test.db |  | 
|  114     signature |  | 
|  115   } $sig |  | 
|  116 }  |  | 
|  117  |  | 
|  118 finish_test |  | 
| OLD | NEW |