Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: third_party/sqlite/src/test/trans.test

Issue 6990047: Import SQLite 3.7.6.3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/sqlite/src/test/trace2.test ('k') | third_party/sqlite/src/test/trigger3.test » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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. The 11 # This file implements regression tests for SQLite library. The
12 # focus of this script is database locks. 12 # focus of this script is database locks.
13 # 13 #
14 # $Id: trans.test,v 1.41 2009/04/28 16:37:59 danielk1977 Exp $ 14 # $Id: trans.test,v 1.41 2009/04/28 16:37:59 danielk1977 Exp $
15 15
16 16
17 set testdir [file dirname $argv0] 17 set testdir [file dirname $argv0]
18 source $testdir/tester.tcl 18 source $testdir/tester.tcl
19 19
20 # Create several tables to work with. 20 # Create several tables to work with.
21 # 21 #
22 wal_set_journal_mode
22 do_test trans-1.0 { 23 do_test trans-1.0 {
23 execsql { 24 execsql {
24 CREATE TABLE one(a int PRIMARY KEY, b text); 25 CREATE TABLE one(a int PRIMARY KEY, b text);
25 INSERT INTO one VALUES(1,'one'); 26 INSERT INTO one VALUES(1,'one');
26 INSERT INTO one VALUES(2,'two'); 27 INSERT INTO one VALUES(2,'two');
27 INSERT INTO one VALUES(3,'three'); 28 INSERT INTO one VALUES(3,'three');
28 SELECT b FROM one ORDER BY a; 29 SELECT b FROM one ORDER BY a;
29 } 30 }
30 } {one two three} 31 } {one two three}
31 integrity_check trans-1.0.1 32 integrity_check trans-1.0.1
32 do_test trans-1.1 { 33 do_test trans-1.1 {
33 execsql { 34 execsql {
34 CREATE TABLE two(a int PRIMARY KEY, b text); 35 CREATE TABLE two(a int PRIMARY KEY, b text);
35 INSERT INTO two VALUES(1,'I'); 36 INSERT INTO two VALUES(1,'I');
36 INSERT INTO two VALUES(5,'V'); 37 INSERT INTO two VALUES(5,'V');
37 INSERT INTO two VALUES(10,'X'); 38 INSERT INTO two VALUES(10,'X');
38 SELECT b FROM two ORDER BY a; 39 SELECT b FROM two ORDER BY a;
39 } 40 }
40 } {I V X} 41 } {I V X}
41 do_test trans-1.9 { 42 do_test trans-1.9 {
42 sqlite3 altdb test.db 43 sqlite3 altdb test.db
43 execsql {SELECT b FROM one ORDER BY a} altdb 44 execsql {SELECT b FROM one ORDER BY a} altdb
44 } {one two three} 45 } {one two three}
45 do_test trans-1.10 { 46 do_test trans-1.10 {
46 execsql {SELECT b FROM two ORDER BY a} altdb 47 execsql {SELECT b FROM two ORDER BY a} altdb
47 } {I V X} 48 } {I V X}
48 integrity_check trans-1.11 49 integrity_check trans-1.11
50 wal_check_journal_mode trans-1.12
49 51
50 # Basic transactions 52 # Basic transactions
51 # 53 #
52 do_test trans-2.1 { 54 do_test trans-2.1 {
53 set v [catch {execsql {BEGIN}} msg] 55 set v [catch {execsql {BEGIN}} msg]
54 lappend v $msg 56 lappend v $msg
55 } {0 {}} 57 } {0 {}}
56 do_test trans-2.2 { 58 do_test trans-2.2 {
57 set v [catch {execsql {END}} msg] 59 set v [catch {execsql {END}} msg]
58 lappend v $msg 60 lappend v $msg
(...skipping 16 matching lines...) Expand all
75 } {0 {}} 77 } {0 {}}
76 do_test trans-2.10 { 78 do_test trans-2.10 {
77 execsql { 79 execsql {
78 BEGIN; 80 BEGIN;
79 SELECT a FROM one ORDER BY a; 81 SELECT a FROM one ORDER BY a;
80 SELECT a FROM two ORDER BY a; 82 SELECT a FROM two ORDER BY a;
81 END; 83 END;
82 } 84 }
83 } {1 2 3 1 5 10} 85 } {1 2 3 1 5 10}
84 integrity_check trans-2.11 86 integrity_check trans-2.11
87 wal_check_journal_mode trans-2.12
85 88
86 # Check the locking behavior 89 # Check the locking behavior
87 # 90 #
88 do_test trans-3.1 { 91 do_test trans-3.1 {
89 execsql { 92 execsql {
90 BEGIN; 93 BEGIN;
91 UPDATE one SET a = 0 WHERE 0; 94 UPDATE one SET a = 0 WHERE 0;
92 SELECT a FROM one ORDER BY a; 95 SELECT a FROM one ORDER BY a;
93 } 96 }
94 } {1 2 3} 97 } {1 2 3}
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 } db} msg] 158 } db} msg]
156 lappend v $msg 159 lappend v $msg
157 } {0 {1 4 5 10}} 160 } {0 {1 4 5 10}}
158 do_test trans-3.14 { 161 do_test trans-3.14 {
159 set v [catch {execsql { 162 set v [catch {execsql {
160 SELECT a FROM one ORDER BY a; 163 SELECT a FROM one ORDER BY a;
161 } db} msg] 164 } db} msg]
162 lappend v $msg 165 lappend v $msg
163 } {0 {1 2 3 4}} 166 } {0 {1 2 3 4}}
164 integrity_check trans-3.15 167 integrity_check trans-3.15
168 wal_check_journal_mode trans-3.16
165 169
166 do_test trans-4.1 { 170 do_test trans-4.1 {
167 set v [catch {execsql { 171 set v [catch {execsql {
168 COMMIT; 172 COMMIT;
169 } db} msg] 173 } db} msg]
170 lappend v $msg 174 lappend v $msg
171 } {1 {cannot commit - no transaction is active}} 175 } {1 {cannot commit - no transaction is active}}
172 do_test trans-4.2 { 176 do_test trans-4.2 {
173 set v [catch {execsql { 177 set v [catch {execsql {
174 ROLLBACK; 178 ROLLBACK;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 } altdb} msg] 225 } altdb} msg]
222 lappend v $msg 226 lappend v $msg
223 } {0 {1 4 5 10}} 227 } {0 {1 4 5 10}}
224 do_test trans-4.11 { 228 do_test trans-4.11 {
225 set v [catch {execsql { 229 set v [catch {execsql {
226 SELECT a FROM one ORDER BY a; 230 SELECT a FROM one ORDER BY a;
227 } altdb} msg] 231 } altdb} msg]
228 lappend v $msg 232 lappend v $msg
229 } {0 {1 2 3 4}} 233 } {0 {1 2 3 4}}
230 integrity_check trans-4.12 234 integrity_check trans-4.12
235 wal_check_journal_mode trans-4.13
236 wal_check_journal_mode trans-4.14 altdb
231 do_test trans-4.98 { 237 do_test trans-4.98 {
232 altdb close 238 altdb close
233 execsql { 239 execsql {
234 DROP TABLE one; 240 DROP TABLE one;
235 DROP TABLE two; 241 DROP TABLE two;
236 } 242 }
237 } {} 243 } {}
238 integrity_check trans-4.99 244 integrity_check trans-4.99
239 245
240 # Check out the commit/rollback behavior of the database 246 # Check out the commit/rollback behavior of the database
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 DROP TABLE t2; 774 DROP TABLE t2;
769 ROLLBACK; 775 ROLLBACK;
770 SELECT md5sum(x,y,z) FROM t2; 776 SELECT md5sum(x,y,z) FROM t2;
771 } 777 }
772 } $checksum 778 } $checksum
773 } 779 }
774 do_test trans-7.14 { 780 do_test trans-7.14 {
775 execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master} 781 execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master}
776 } $checksum2 782 } $checksum2
777 integrity_check trans-7.15 783 integrity_check trans-7.15
784 wal_check_journal_mode trans-7.16
778 785
779 # Arrange for another process to begin modifying the database but abort 786 # Arrange for another process to begin modifying the database but abort
780 # and die in the middle of the modification. Then have this process read 787 # and die in the middle of the modification. Then have this process read
781 # the database. This process should detect the journal file and roll it 788 # the database. This process should detect the journal file and roll it
782 # back. Verify that this happens correctly. 789 # back. Verify that this happens correctly.
783 # 790 #
784 set fd [open test.tcl w] 791 set fd [open test.tcl w]
785 puts $fd { 792 puts $fd {
786 sqlite3_test_control_pending_byte 0x0010000 793 sqlite3_test_control_pending_byte 0x0010000
787 sqlite3 db test.db 794 sqlite3 db test.db
(...skipping 29 matching lines...) Expand all
817 } 824 }
818 close $fd 825 close $fd
819 do_test trans-8.4 { 826 do_test trans-8.4 {
820 catch {exec [info nameofexec] test.tcl} 827 catch {exec [info nameofexec] test.tcl}
821 execsql {SELECT md5sum(x,y,z) FROM t2} 828 execsql {SELECT md5sum(x,y,z) FROM t2}
822 } $checksum 829 } $checksum
823 do_test trans-8.5 { 830 do_test trans-8.5 {
824 execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master} 831 execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master}
825 } $checksum2 832 } $checksum2
826 integrity_check trans-8.6 833 integrity_check trans-8.6
827 834 wal_check_journal_mode trans-8.7
828 835
829 # In the following sequence of tests, compute the MD5 sum of the content 836 # In the following sequence of tests, compute the MD5 sum of the content
830 # of a table, make lots of modifications to that table, then do a rollback. 837 # of a table, make lots of modifications to that table, then do a rollback.
831 # Verify that after the rollback, the MD5 checksum is unchanged. 838 # Verify that after the rollback, the MD5 checksum is unchanged.
832 # 839 #
833 do_test trans-9.1 { 840 do_test trans-9.1 {
834 execsql { 841 execsql {
835 PRAGMA default_cache_size=10; 842 PRAGMA default_cache_size=10;
836 } 843 }
837 db close 844 db close
838 sqlite3 db test.db 845 sqlite3 db test.db
839 execsql { 846 execsql {
840 BEGIN; 847 BEGIN;
841 CREATE TABLE t3(x TEXT); 848 CREATE TABLE t3(x TEXT);
842 INSERT INTO t3 VALUES(randstr(10,400)); 849 INSERT INTO t3 VALUES(randstr(10,400));
843 INSERT INTO t3 VALUES(randstr(10,400)); 850 INSERT INTO t3 VALUES(randstr(10,400));
844 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 851 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
845 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 852 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
846 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 853 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
847 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 854 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
848 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 855 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
849 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 856 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
850 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 857 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
851 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 858 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
852 INSERT INTO t3 SELECT randstr(10,400) FROM t3; 859 INSERT INTO t3 SELECT randstr(10,400) FROM t3;
853 COMMIT; 860 COMMIT;
854 SELECT count(*) FROM t3; 861 SELECT count(*) FROM t3;
855 } 862 }
856 } {1024} 863 } {1024}
864 wal_check_journal_mode trans-9.1.1
857 865
858 # The following procedure computes a "signature" for table "t3". If 866 # The following procedure computes a "signature" for table "t3". If
859 # T3 changes in any way, the signature should change. 867 # T3 changes in any way, the signature should change.
860 # 868 #
861 # This is used to test ROLLBACK. We gather a signature for t3, then 869 # This is used to test ROLLBACK. We gather a signature for t3, then
862 # make lots of changes to t3, then rollback and take another signature. 870 # make lots of changes to t3, then rollback and take another signature.
863 # The two signatures should be the same. 871 # The two signatures should be the same.
864 # 872 #
865 proc signature {} { 873 proc signature {} {
866 return [db eval {SELECT count(*), md5sum(x) FROM t3}] 874 return [db eval {SELECT count(*), md5sum(x) FROM t3}]
867 } 875 }
868 876
869 # Repeat the following group of tests 20 times for quick testing and 877 # Repeat the following group of tests 20 times for quick testing and
870 # 40 times for full testing. Each iteration of the test makes table 878 # 40 times for full testing. Each iteration of the test makes table
871 # t3 a little larger, and thus takes a little longer, so doing 40 tests 879 # t3 a little larger, and thus takes a little longer, so doing 40 tests
872 # is more than 2.0 times slower than doing 20 tests. Considerably more. 880 # is more than 2.0 times slower than doing 20 tests. Considerably more.
873 # 881 #
874 # Also, if temporary tables are stored in memory and the test pcache 882 # Also, if temporary tables are stored in memory and the test pcache
875 # is in use, only 20 iterations. Otherwise the test pcache runs out 883 # is in use, only 20 iterations. Otherwise the test pcache runs out
876 # of page slots and SQLite reports "out of memory". 884 # of page slots and SQLite reports "out of memory".
877 # 885 #
878 if {[info exists ISQUICK] || ( 886 if {[info exists G(isquick)] || (
879 $TEMP_STORE==3 && [catch {set ::permutations_test_prefix} val]==0 && 887 $TEMP_STORE==3 && [regexp {^pcache[[:digit:]]*$} [permutation]]
880 [regexp {^pcache[[:digit:]]*$} $val]
881 ) } { 888 ) } {
882 set limit 20 889 set limit 20
883 } elseif {[info exists SOAKTEST]} { 890 } elseif {[info exists G(issoak)]} {
884 set limit 100 891 set limit 100
885 } else { 892 } else {
886 set limit 40 893 set limit 40
887 } 894 }
888 895
889 # Do rollbacks. Make sure the signature does not change. 896 # Do rollbacks. Make sure the signature does not change.
890 # 897 #
891 for {set i 2} {$i<=$limit} {incr i} { 898 for {set i 2} {$i<=$limit} {incr i} {
892 set ::sig [signature] 899 set ::sig [signature]
893 set cnt [lindex $::sig 0] 900 set cnt [lindex $::sig 0]
(...skipping 24 matching lines...) Expand all
918 ROLLBACK; 925 ROLLBACK;
919 } 926 }
920 signature 927 signature
921 } $sig 928 } $sig
922 if {$i<$limit} { 929 if {$i<$limit} {
923 do_test trans-9.$i.3-$cnt { 930 do_test trans-9.$i.3-$cnt {
924 execsql { 931 execsql {
925 INSERT INTO t3 SELECT randstr(10,400) FROM t3 WHERE random()%10==0; 932 INSERT INTO t3 SELECT randstr(10,400) FROM t3 WHERE random()%10==0;
926 } 933 }
927 } {} 934 } {}
935 catch flush_async_queue
928 if {$tcl_platform(platform)=="unix"} { 936 if {$tcl_platform(platform)=="unix"} {
929 do_test trans-9.$i.4-$cnt { 937 do_test trans-9.$i.4-$cnt {
930 expr {$sqlite_sync_count>0} 938 expr {$sqlite_sync_count>0}
931 } 1 939 } 1
932 ifcapable pager_pragmas { 940 ifcapable pager_pragmas {
933 do_test trans-9.$i.5-$cnt { 941 do_test trans-9.$i.5-$cnt {
934 expr {$sqlite_fullsync_count>0} 942 expr {$sqlite_fullsync_count>0}
935 } [expr {$i%2==0}] 943 } [expr {$i%2==0}]
936 } else { 944 } else {
937 do_test trans-9.$i.5-$cnt { 945 do_test trans-9.$i.5-$cnt {
938 expr {$sqlite_fullsync_count==0} 946 expr {$sqlite_fullsync_count==0}
939 } {1} 947 } {1}
940 } 948 }
941 } 949 }
942 } 950 }
951
952 wal_check_journal_mode trans-9.$i.6-$cnt
943 set ::pager_old_format 0 953 set ::pager_old_format 0
944 } 954 }
945 955
946 finish_test 956 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/src/test/trace2.test ('k') | third_party/sqlite/src/test/trigger3.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698