xref: /sqlite-3.40.0/test/savepoint4.test (revision 488af099)
1# 2008 December 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#
12# $Id: savepoint4.test,v 1.1 2008/12/19 16:31:12 danielk1977 Exp $
13
14set testdir [file dirname $argv0]
15source $testdir/tester.tcl
16
17
18proc signature {} {
19  return [db eval {SELECT count(*), md5sum(x) FROM t3}]
20}
21
22expr srand(0)
23
24do_test savepoint4-1 {
25  execsql {
26    PRAGMA cache_size=10;
27    BEGIN;
28    CREATE TABLE t3(x TEXT);
29    INSERT INTO t3 VALUES(randstr(10,400));
30    INSERT INTO t3 VALUES(randstr(10,400));
31    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
32    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
33    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
34    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
35    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
36    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
37    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
38    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
39    INSERT INTO t3 SELECT randstr(10,400) FROM t3;
40    COMMIT;
41    SELECT count(*) FROM t3;
42  }
43} {1024}
44
45
46unset -nocomplain ::sig
47
48for {set ii 1} {$ii<25} {incr ii} {
49  set ::sig [signature]
50
51  set crashed 1
52  for {set iDelay 1} {$crashed} {incr iDelay} {
53    do_test savepoint4-$ii.1.$iDelay {
54      set ret [crashsql -delay $iDelay -file test.db-journal {
55        PRAGMA cache_size = 20;
56        SAVEPOINT one;
57          DELETE FROM t3 WHERE random()%2==0;
58          SAVEPOINT two;
59            INSERT INTO t3 SELECT randstr(10,10)||x FROM t3;
60           ROLLBACK TO two;
61            UPDATE t3 SET x = randstr(10, 400) WHERE random()%10;
62          RELEASE two;
63        ROLLBACK TO one;
64      }]
65      signature
66    } $::sig
67    set crashed [lindex $ret 0]
68    integrity_check savepoint4-$ii.1.$iDelay.integrity
69  }
70
71  do_test savepoint4-$ii.2 {
72    execsql {
73      DELETE FROM t3 WHERE random()%10==0;
74      INSERT INTO t3 SELECT randstr(10,10)||x FROM t3 WHERE random()%9==0;
75    }
76  } {}
77}
78
79finish_test
80
81