/ Check-in [c8893310]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Run trans.test and avtrans.test as part of the "wal" permutation.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | wal
Files: files | file ages | folders
SHA1: c8893310510148f7e71ede5691606b6fc1c3df4d
User & Date: dan 2010-04-27 06:49:34
Context
2010-04-27
14:37
Fix a problem with identifying a corrupt database in WAL mode. check-in: c8658da4 user: dan tags: wal
11:49
Add the xShmRelease() method to the VFS. The os_unix.c implementation of the shared memory logic is still non-functional. check-in: ed715b47 user: drh tags: wal
06:49
Run trans.test and avtrans.test as part of the "wal" permutation. check-in: c8893310 user: dan tags: wal
05:42
Fix a problem that occurs when one process causes the log-summary file to grow and then a second process attempts to read the database. check-in: b51a5f8b user: dan tags: wal
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to test/avtrans.test.

18
19
20
21
22
23
24


25
26
27
28
29
30
31
32
33
..
44
45
46
47
48
49
50

51
52
53
54
55
56
57
..
80
81
82
83
84
85
86

87
88
89
90
91
92
93
...
909
910
911
912
913
914
915

916
917
918
919

920
921
set testdir [file dirname $argv0]
source $testdir/tester.tcl


# Create several tables to work with.
#
do_test avtrans-1.0 {


  execsql {
    PRAGMA auto_vacuum=ON;
    CREATE TABLE one(a int PRIMARY KEY, b text);
    INSERT INTO one VALUES(1,'one');
    INSERT INTO one VALUES(2,'two');
    INSERT INTO one VALUES(3,'three');
    SELECT b FROM one ORDER BY a;
  }
} {one two three}
................................................................................
  sqlite3 altdb test.db
  execsql {SELECT b FROM one ORDER BY a} altdb
} {one two three}
do_test avtrans-1.10 {
  execsql {SELECT b FROM two ORDER BY a} altdb
} {I V X}
integrity_check avtrans-1.11


# Basic transactions
#
do_test avtrans-2.1 {
  set v [catch {execsql {BEGIN}} msg]
  lappend v $msg
} {0 {}}
................................................................................
    BEGIN;
    SELECT a FROM one ORDER BY a;
    SELECT a FROM two ORDER BY a;
    END;
  }
} {1 2 3 1 5 10}
integrity_check avtrans-2.11


# Check the locking behavior
#
sqlite3_soft_heap_limit 0
do_test avtrans-3.1 {
  execsql {
    BEGIN;
................................................................................
        } [expr {$i%2==0}]
      } else {
        do_test avtrans-9.$i.5-$cnt {
           expr {$sqlite_fullsync_count==0}
        } {1}
      }
    }

  }
  set ::pager_old_format 0
}
integrity_check avtrans-10.1

   
finish_test







>
>
|
<







 







>







 







>







 







>




>


18
19
20
21
22
23
24
25
26
27

28
29
30
31
32
33
34
..
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
..
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
...
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
set testdir [file dirname $argv0]
source $testdir/tester.tcl


# Create several tables to work with.
#
do_test avtrans-1.0 {
  execsql { PRAGMA auto_vacuum=ON }
  wal_set_journal_mode
  execsql { 

    CREATE TABLE one(a int PRIMARY KEY, b text);
    INSERT INTO one VALUES(1,'one');
    INSERT INTO one VALUES(2,'two');
    INSERT INTO one VALUES(3,'three');
    SELECT b FROM one ORDER BY a;
  }
} {one two three}
................................................................................
  sqlite3 altdb test.db
  execsql {SELECT b FROM one ORDER BY a} altdb
} {one two three}
do_test avtrans-1.10 {
  execsql {SELECT b FROM two ORDER BY a} altdb
} {I V X}
integrity_check avtrans-1.11
wal_check_journal_mode avtrans-1.12

# Basic transactions
#
do_test avtrans-2.1 {
  set v [catch {execsql {BEGIN}} msg]
  lappend v $msg
} {0 {}}
................................................................................
    BEGIN;
    SELECT a FROM one ORDER BY a;
    SELECT a FROM two ORDER BY a;
    END;
  }
} {1 2 3 1 5 10}
integrity_check avtrans-2.11
wal_check_journal_mode avtrans-2.12

# Check the locking behavior
#
sqlite3_soft_heap_limit 0
do_test avtrans-3.1 {
  execsql {
    BEGIN;
................................................................................
        } [expr {$i%2==0}]
      } else {
        do_test avtrans-9.$i.5-$cnt {
           expr {$sqlite_fullsync_count==0}
        } {1}
      }
    }
    wal_check_journal_mode avtrans-9.$i-6.$cnt
  }
  set ::pager_old_format 0
}
integrity_check avtrans-10.1
wal_check_journal_mode avtrans-10.2
   
finish_test

Changes to test/permutations.test.

759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
run_tests "wal" -description {
  Run tests with journal_mode=WAL
} -initialize {
  set ::savepoint6_iterations 100
} -shutdown {
  unset -nocomplain ::savepoint6_iterations
} -include {
  savepoint.test
  savepoint2.test
  savepoint6.test
}

# End of tests
#############################################################################

if {$::perm::testmode eq "targets"} { puts "" ; exit }








|
|
<







759
760
761
762
763
764
765
766
767

768
769
770
771
772
773
774
run_tests "wal" -description {
  Run tests with journal_mode=WAL
} -initialize {
  set ::savepoint6_iterations 100
} -shutdown {
  unset -nocomplain ::savepoint6_iterations
} -include {
  savepoint.test     savepoint2.test     savepoint6.test
  trans.test         avtrans.test

}

# End of tests
#############################################################################

if {$::perm::testmode eq "targets"} { puts "" ; exit }

Changes to test/trans.test.

15
16
17
18
19
20
21

22
23
24
25
26
27
28
..
42
43
44
45
46
47
48

49
50
51
52
53
54
55
..
78
79
80
81
82
83
84

85
86
87
88
89
90
91
...
158
159
160
161
162
163
164

165
166
167
168
169
170
171
...
224
225
226
227
228
229
230


231
232
233
234
235
236
237
...
771
772
773
774
775
776
777

778
779
780
781
782
783
784
...
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
...
850
851
852
853
854
855
856

857
858
859
860
861
862
863
...
936
937
938
939
940
941
942


943
944
945
946


set testdir [file dirname $argv0]
source $testdir/tester.tcl

# Create several tables to work with.
#

do_test trans-1.0 {
  execsql {
    CREATE TABLE one(a int PRIMARY KEY, b text);
    INSERT INTO one VALUES(1,'one');
    INSERT INTO one VALUES(2,'two');
    INSERT INTO one VALUES(3,'three');
    SELECT b FROM one ORDER BY a;
................................................................................
  sqlite3 altdb test.db
  execsql {SELECT b FROM one ORDER BY a} altdb
} {one two three}
do_test trans-1.10 {
  execsql {SELECT b FROM two ORDER BY a} altdb
} {I V X}
integrity_check trans-1.11


# Basic transactions
#
do_test trans-2.1 {
  set v [catch {execsql {BEGIN}} msg]
  lappend v $msg
} {0 {}}
................................................................................
    BEGIN;
    SELECT a FROM one ORDER BY a;
    SELECT a FROM two ORDER BY a;
    END;
  }
} {1 2 3 1 5 10}
integrity_check trans-2.11


# Check the locking behavior
#
do_test trans-3.1 {
  execsql {
    BEGIN;
    UPDATE one SET a = 0 WHERE 0;
................................................................................
do_test trans-3.14 {
  set v [catch {execsql {
    SELECT a FROM one ORDER BY a;
  } db} msg]
  lappend v $msg
} {0 {1 2 3 4}}
integrity_check trans-3.15


do_test trans-4.1 {
  set v [catch {execsql {
    COMMIT;
  } db} msg]
  lappend v $msg
} {1 {cannot commit - no transaction is active}}
................................................................................
do_test trans-4.11 {
  set v [catch {execsql {
    SELECT a FROM one ORDER BY a;
  } altdb} msg]
  lappend v $msg
} {0 {1 2 3 4}}
integrity_check trans-4.12


do_test trans-4.98 {
  altdb close
  execsql {
    DROP TABLE one;
    DROP TABLE two;
  }
} {}
................................................................................
    }
  } $checksum
}
do_test trans-7.14 {
  execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master}
} $checksum2
integrity_check trans-7.15


# Arrange for another process to begin modifying the database but abort
# and die in the middle of the modification.  Then have this process read
# the database.  This process should detect the journal file and roll it
# back.  Verify that this happens correctly.
#
set fd [open test.tcl w]
................................................................................
  catch {exec [info nameofexec] test.tcl}
  execsql {SELECT md5sum(x,y,z) FROM t2}
} $checksum
do_test trans-8.5 {
  execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master}
} $checksum2
integrity_check trans-8.6


# In the following sequence of tests, compute the MD5 sum of the content
# of a table, make lots of modifications to that table, then do a rollback.
# Verify that after the rollback, the MD5 checksum is unchanged.
#
do_test trans-9.1 {
  execsql {
................................................................................
    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
    COMMIT;
    SELECT count(*) FROM t3;
  }
} {1024}


# The following procedure computes a "signature" for table "t3".  If
# T3 changes in any way, the signature should change.  
#
# This is used to test ROLLBACK.  We gather a signature for t3, then
# make lots of changes to t3, then rollback and take another signature.
# The two signatures should be the same.
................................................................................
      } else {
        do_test trans-9.$i.5-$cnt {
          expr {$sqlite_fullsync_count==0}
        } {1}
      }
    }
  }


  set ::pager_old_format 0
}
   
finish_test







>







 







>







 







>







 







>







 







>
>







 







>







 







|







 







>







 







>
>




15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
..
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
...
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
...
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
...
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
...
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
...
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
...
944
945
946
947
948
949
950
951
952
953
954
955
956


set testdir [file dirname $argv0]
source $testdir/tester.tcl

# Create several tables to work with.
#
wal_set_journal_mode
do_test trans-1.0 {
  execsql {
    CREATE TABLE one(a int PRIMARY KEY, b text);
    INSERT INTO one VALUES(1,'one');
    INSERT INTO one VALUES(2,'two');
    INSERT INTO one VALUES(3,'three');
    SELECT b FROM one ORDER BY a;
................................................................................
  sqlite3 altdb test.db
  execsql {SELECT b FROM one ORDER BY a} altdb
} {one two three}
do_test trans-1.10 {
  execsql {SELECT b FROM two ORDER BY a} altdb
} {I V X}
integrity_check trans-1.11
wal_check_journal_mode trans-1.12

# Basic transactions
#
do_test trans-2.1 {
  set v [catch {execsql {BEGIN}} msg]
  lappend v $msg
} {0 {}}
................................................................................
    BEGIN;
    SELECT a FROM one ORDER BY a;
    SELECT a FROM two ORDER BY a;
    END;
  }
} {1 2 3 1 5 10}
integrity_check trans-2.11
wal_check_journal_mode trans-2.12

# Check the locking behavior
#
do_test trans-3.1 {
  execsql {
    BEGIN;
    UPDATE one SET a = 0 WHERE 0;
................................................................................
do_test trans-3.14 {
  set v [catch {execsql {
    SELECT a FROM one ORDER BY a;
  } db} msg]
  lappend v $msg
} {0 {1 2 3 4}}
integrity_check trans-3.15
wal_check_journal_mode trans-3.16

do_test trans-4.1 {
  set v [catch {execsql {
    COMMIT;
  } db} msg]
  lappend v $msg
} {1 {cannot commit - no transaction is active}}
................................................................................
do_test trans-4.11 {
  set v [catch {execsql {
    SELECT a FROM one ORDER BY a;
  } altdb} msg]
  lappend v $msg
} {0 {1 2 3 4}}
integrity_check trans-4.12
wal_check_journal_mode trans-4.13
wal_check_journal_mode trans-4.14 altdb
do_test trans-4.98 {
  altdb close
  execsql {
    DROP TABLE one;
    DROP TABLE two;
  }
} {}
................................................................................
    }
  } $checksum
}
do_test trans-7.14 {
  execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master}
} $checksum2
integrity_check trans-7.15
wal_check_journal_mode trans-7.16

# Arrange for another process to begin modifying the database but abort
# and die in the middle of the modification.  Then have this process read
# the database.  This process should detect the journal file and roll it
# back.  Verify that this happens correctly.
#
set fd [open test.tcl w]
................................................................................
  catch {exec [info nameofexec] test.tcl}
  execsql {SELECT md5sum(x,y,z) FROM t2}
} $checksum
do_test trans-8.5 {
  execsql {SELECT md5sum(type,name,tbl_name,rootpage,sql) FROM sqlite_master}
} $checksum2
integrity_check trans-8.6
wal_check_journal_mode trans-8.7

# In the following sequence of tests, compute the MD5 sum of the content
# of a table, make lots of modifications to that table, then do a rollback.
# Verify that after the rollback, the MD5 checksum is unchanged.
#
do_test trans-9.1 {
  execsql {
................................................................................
    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
    COMMIT;
    SELECT count(*) FROM t3;
  }
} {1024}
wal_check_journal_mode trans-9.1.1

# The following procedure computes a "signature" for table "t3".  If
# T3 changes in any way, the signature should change.  
#
# This is used to test ROLLBACK.  We gather a signature for t3, then
# make lots of changes to t3, then rollback and take another signature.
# The two signatures should be the same.
................................................................................
      } else {
        do_test trans-9.$i.5-$cnt {
          expr {$sqlite_fullsync_count==0}
        } {1}
      }
    }
  }

  wal_check_journal_mode trans-9.$i.6-$cnt
  set ::pager_old_format 0
}
   
finish_test