| OLD | NEW |
| 1 # 2001 September 15 | 1 # 2001 September 15 |
| 2 # | 2 # |
| 3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
| 4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
| 5 # | 5 # |
| 6 # May you do good and not evil. | 6 # May you do good and not evil. |
| 7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
| 8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
| 9 # | 9 # |
| 10 #*********************************************************************** | 10 #*********************************************************************** |
| 11 # This file implements regression tests for SQLite library. This | 11 # This file implements regression tests for SQLite library. This |
| 12 # file is a copy of "trans.test" modified to run under autovacuum mode. | 12 # file is a copy of "trans.test" modified to run under autovacuum mode. |
| 13 # the point is to stress the autovacuum logic and try to get it to fail. | 13 # the point is to stress the autovacuum logic and try to get it to fail. |
| 14 # | 14 # |
| 15 # $Id: avtrans.test,v 1.6 2007/09/12 17:01:45 danielk1977 Exp $ | 15 # $Id: avtrans.test,v 1.6 2007/09/12 17:01:45 danielk1977 Exp $ |
| 16 | 16 |
| 17 | 17 |
| 18 set testdir [file dirname $argv0] | 18 set testdir [file dirname $argv0] |
| 19 source $testdir/tester.tcl | 19 source $testdir/tester.tcl |
| 20 | 20 |
| 21 | 21 |
| 22 # Create several tables to work with. | 22 # Create several tables to work with. |
| 23 # | 23 # |
| 24 do_test avtrans-1.0 { | 24 do_test avtrans-1.0 { |
| 25 execsql { | 25 execsql { PRAGMA auto_vacuum=ON } |
| 26 PRAGMA auto_vacuum=ON; | 26 wal_set_journal_mode |
| 27 execsql { |
| 27 CREATE TABLE one(a int PRIMARY KEY, b text); | 28 CREATE TABLE one(a int PRIMARY KEY, b text); |
| 28 INSERT INTO one VALUES(1,'one'); | 29 INSERT INTO one VALUES(1,'one'); |
| 29 INSERT INTO one VALUES(2,'two'); | 30 INSERT INTO one VALUES(2,'two'); |
| 30 INSERT INTO one VALUES(3,'three'); | 31 INSERT INTO one VALUES(3,'three'); |
| 31 SELECT b FROM one ORDER BY a; | 32 SELECT b FROM one ORDER BY a; |
| 32 } | 33 } |
| 33 } {one two three} | 34 } {one two three} |
| 34 do_test avtrans-1.1 { | 35 do_test avtrans-1.1 { |
| 35 execsql { | 36 execsql { |
| 36 CREATE TABLE two(a int PRIMARY KEY, b text); | 37 CREATE TABLE two(a int PRIMARY KEY, b text); |
| 37 INSERT INTO two VALUES(1,'I'); | 38 INSERT INTO two VALUES(1,'I'); |
| 38 INSERT INTO two VALUES(5,'V'); | 39 INSERT INTO two VALUES(5,'V'); |
| 39 INSERT INTO two VALUES(10,'X'); | 40 INSERT INTO two VALUES(10,'X'); |
| 40 SELECT b FROM two ORDER BY a; | 41 SELECT b FROM two ORDER BY a; |
| 41 } | 42 } |
| 42 } {I V X} | 43 } {I V X} |
| 43 do_test avtrans-1.9 { | 44 do_test avtrans-1.9 { |
| 44 sqlite3 altdb test.db | 45 sqlite3 altdb test.db |
| 45 execsql {SELECT b FROM one ORDER BY a} altdb | 46 execsql {SELECT b FROM one ORDER BY a} altdb |
| 46 } {one two three} | 47 } {one two three} |
| 47 do_test avtrans-1.10 { | 48 do_test avtrans-1.10 { |
| 48 execsql {SELECT b FROM two ORDER BY a} altdb | 49 execsql {SELECT b FROM two ORDER BY a} altdb |
| 49 } {I V X} | 50 } {I V X} |
| 50 integrity_check avtrans-1.11 | 51 integrity_check avtrans-1.11 |
| 52 wal_check_journal_mode avtrans-1.12 |
| 51 | 53 |
| 52 # Basic transactions | 54 # Basic transactions |
| 53 # | 55 # |
| 54 do_test avtrans-2.1 { | 56 do_test avtrans-2.1 { |
| 55 set v [catch {execsql {BEGIN}} msg] | 57 set v [catch {execsql {BEGIN}} msg] |
| 56 lappend v $msg | 58 lappend v $msg |
| 57 } {0 {}} | 59 } {0 {}} |
| 58 do_test avtrans-2.2 { | 60 do_test avtrans-2.2 { |
| 59 set v [catch {execsql {END}} msg] | 61 set v [catch {execsql {END}} msg] |
| 60 lappend v $msg | 62 lappend v $msg |
| (...skipping 16 matching lines...) Expand all Loading... |
| 77 } {0 {}} | 79 } {0 {}} |
| 78 do_test avtrans-2.10 { | 80 do_test avtrans-2.10 { |
| 79 execsql { | 81 execsql { |
| 80 BEGIN; | 82 BEGIN; |
| 81 SELECT a FROM one ORDER BY a; | 83 SELECT a FROM one ORDER BY a; |
| 82 SELECT a FROM two ORDER BY a; | 84 SELECT a FROM two ORDER BY a; |
| 83 END; | 85 END; |
| 84 } | 86 } |
| 85 } {1 2 3 1 5 10} | 87 } {1 2 3 1 5 10} |
| 86 integrity_check avtrans-2.11 | 88 integrity_check avtrans-2.11 |
| 89 wal_check_journal_mode avtrans-2.12 |
| 87 | 90 |
| 88 # Check the locking behavior | 91 # Check the locking behavior |
| 89 # | 92 # |
| 90 sqlite3_soft_heap_limit 0 | 93 sqlite3_soft_heap_limit 0 |
| 91 do_test avtrans-3.1 { | 94 do_test avtrans-3.1 { |
| 92 execsql { | 95 execsql { |
| 93 BEGIN; | 96 BEGIN; |
| 94 UPDATE one SET a = 0 WHERE 0; | 97 UPDATE one SET a = 0 WHERE 0; |
| 95 SELECT a FROM one ORDER BY a; | 98 SELECT a FROM one ORDER BY a; |
| 96 } | 99 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 SELECT a FROM two ORDER BY a; | 158 SELECT a FROM two ORDER BY a; |
| 156 } db} msg] | 159 } db} msg] |
| 157 lappend v $msg | 160 lappend v $msg |
| 158 } {0 {1 4 5 10}} | 161 } {0 {1 4 5 10}} |
| 159 do_test avtrans-3.14 { | 162 do_test avtrans-3.14 { |
| 160 set v [catch {execsql { | 163 set v [catch {execsql { |
| 161 SELECT a FROM one ORDER BY a; | 164 SELECT a FROM one ORDER BY a; |
| 162 } db} msg] | 165 } db} msg] |
| 163 lappend v $msg | 166 lappend v $msg |
| 164 } {0 {1 2 3 4}} | 167 } {0 {1 2 3 4}} |
| 165 sqlite3_soft_heap_limit $soft_limit | 168 sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) |
| 166 integrity_check avtrans-3.15 | 169 integrity_check avtrans-3.15 |
| 167 | 170 |
| 168 do_test avtrans-4.1 { | 171 do_test avtrans-4.1 { |
| 169 set v [catch {execsql { | 172 set v [catch {execsql { |
| 170 COMMIT; | 173 COMMIT; |
| 171 } db} msg] | 174 } db} msg] |
| 172 lappend v $msg | 175 lappend v $msg |
| 173 } {1 {cannot commit - no transaction is active}} | 176 } {1 {cannot commit - no transaction is active}} |
| 174 do_test avtrans-4.2 { | 177 do_test avtrans-4.2 { |
| 175 set v [catch {execsql { | 178 set v [catch {execsql { |
| (...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 # | 850 # |
| 848 proc signature {} { | 851 proc signature {} { |
| 849 return [db eval {SELECT count(*), md5sum(x) FROM t3}] | 852 return [db eval {SELECT count(*), md5sum(x) FROM t3}] |
| 850 } | 853 } |
| 851 | 854 |
| 852 # Repeat the following group of tests 20 times for quick testing and | 855 # Repeat the following group of tests 20 times for quick testing and |
| 853 # 40 times for full testing. Each iteration of the test makes table | 856 # 40 times for full testing. Each iteration of the test makes table |
| 854 # t3 a little larger, and thus takes a little longer, so doing 40 tests | 857 # t3 a little larger, and thus takes a little longer, so doing 40 tests |
| 855 # is more than 2.0 times slower than doing 20 tests. Considerably more. | 858 # is more than 2.0 times slower than doing 20 tests. Considerably more. |
| 856 # | 859 # |
| 857 if {[info exists ISQUICK]} { | 860 if {[info exists G(isquick)]} { |
| 858 set limit 20 | 861 set limit 20 |
| 859 } else { | 862 } else { |
| 860 set limit 40 | 863 set limit 40 |
| 861 } | 864 } |
| 862 | 865 |
| 863 # Do rollbacks. Make sure the signature does not change. | 866 # Do rollbacks. Make sure the signature does not change. |
| 864 # | 867 # |
| 865 for {set i 2} {$i<=$limit} {incr i} { | 868 for {set i 2} {$i<=$limit} {incr i} { |
| 866 set ::sig [signature] | 869 set ::sig [signature] |
| 867 set cnt [lindex $::sig 0] | 870 set cnt [lindex $::sig 0] |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 ifcapable pager_pragmas { | 909 ifcapable pager_pragmas { |
| 907 do_test avtrans-9.$i.5-$cnt { | 910 do_test avtrans-9.$i.5-$cnt { |
| 908 expr {$sqlite_fullsync_count>0} | 911 expr {$sqlite_fullsync_count>0} |
| 909 } [expr {$i%2==0}] | 912 } [expr {$i%2==0}] |
| 910 } else { | 913 } else { |
| 911 do_test avtrans-9.$i.5-$cnt { | 914 do_test avtrans-9.$i.5-$cnt { |
| 912 expr {$sqlite_fullsync_count==0} | 915 expr {$sqlite_fullsync_count==0} |
| 913 } {1} | 916 } {1} |
| 914 } | 917 } |
| 915 } | 918 } |
| 919 wal_check_journal_mode avtrans-9.$i-6.$cnt |
| 916 } | 920 } |
| 917 set ::pager_old_format 0 | 921 set ::pager_old_format 0 |
| 918 } | 922 } |
| 919 integrity_check avtrans-10.1 | 923 integrity_check avtrans-10.1 |
| 924 wal_check_journal_mode avtrans-10.2 |
| 920 | 925 |
| 921 finish_test | 926 finish_test |
| OLD | NEW |