1*dbc1e9e6Sdan# 2018 November 08 2*dbc1e9e6Sdan# 3*dbc1e9e6Sdan# The author disclaims copyright to this source code. In place of 4*dbc1e9e6Sdan# a legal notice, here is a blessing: 5*dbc1e9e6Sdan# 6*dbc1e9e6Sdan# May you do good and not evil. 7*dbc1e9e6Sdan# May you find forgiveness for yourself and forgive others. 8*dbc1e9e6Sdan# May you share freely, never taking more than you give. 9*dbc1e9e6Sdan# 10*dbc1e9e6Sdan#*********************************************************************** 11*dbc1e9e6Sdan# 12*dbc1e9e6Sdan 13*dbc1e9e6Sdanif {![info exists testdir]} { 14*dbc1e9e6Sdan set testdir [file join [file dirname [info script]] .. .. test] 15*dbc1e9e6Sdan} 16*dbc1e9e6Sdansource [file join [file dirname [info script]] session_common.tcl] 17*dbc1e9e6Sdansource $testdir/tester.tcl 18*dbc1e9e6Sdanifcapable !session {finish_test; return} 19*dbc1e9e6Sdanset testprefix changesetfuzz1 20*dbc1e9e6Sdan 21*dbc1e9e6Sdan 22*dbc1e9e6Sdanset CF [test_find_binary changesetfuzz] 23*dbc1e9e6Sdanif {$CF==""} { 24*dbc1e9e6Sdan finish_test 25*dbc1e9e6Sdan return 26*dbc1e9e6Sdan} 27*dbc1e9e6Sdan 28*dbc1e9e6Sdanproc writefile {zFile data} { 29*dbc1e9e6Sdan set fd [open $zFile w] 30*dbc1e9e6Sdan fconfigure $fd -translation binary -encoding binary 31*dbc1e9e6Sdan puts -nonewline $fd $data 32*dbc1e9e6Sdan close $fd 33*dbc1e9e6Sdan} 34*dbc1e9e6Sdan 35*dbc1e9e6Sdando_execsql_test 1.0 { 36*dbc1e9e6Sdan CREATE TABLE t1(a, b, c, d, PRIMARY KEY(c, d)); 37*dbc1e9e6Sdan CREATE TABLE t2(a INTEGER PRIMARY KEY, b, c); 38*dbc1e9e6Sdan 39*dbc1e9e6Sdan INSERT INTO t1 VALUES ('one', 'two', 'three', 'four'), 40*dbc1e9e6Sdan ('five', 'six', 'seven', 'eight'), 41*dbc1e9e6Sdan ('nine', 'ten', 'eleven', 'twelve'); 42*dbc1e9e6Sdan INSERT INTO t2 VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9); 43*dbc1e9e6Sdan} 44*dbc1e9e6Sdan 45*dbc1e9e6Sdanset C [changeset_from_sql { 46*dbc1e9e6Sdan INSERT INTO t2 VALUES(10, 11, 12); 47*dbc1e9e6Sdan DELETE FROM t2 WHERE a=1; 48*dbc1e9e6Sdan UPDATE t1 SET b='forty-five' WHERE a='one'; 49*dbc1e9e6Sdan UPDATE t1 SET a='twenty-nine', b='seventy' WHERE a='five'; 50*dbc1e9e6Sdan}] 51*dbc1e9e6Sdanwritefile c1.changeset $C 52*dbc1e9e6Sdan 53*dbc1e9e6Sdando_test 1.1 { 54*dbc1e9e6Sdan for {set j 0} {$j < 200} {incr j} { 55*dbc1e9e6Sdan forcecopy c1.changeset input.changeset 56*dbc1e9e6Sdan for {set i 0} {$i < 6} {incr i} { 57*dbc1e9e6Sdan exec $CF input.changeset $i 1 58*dbc1e9e6Sdan exec $CF input.changeset-0 59*dbc1e9e6Sdan forcecopy input.changeset-0 input.changeset 60*dbc1e9e6Sdan } 61*dbc1e9e6Sdan } 62*dbc1e9e6Sdan} {} 63*dbc1e9e6Sdan 64*dbc1e9e6Sdanset P [patchset_from_sql { 65*dbc1e9e6Sdan INSERT INTO t2 VALUES(13, 14, 15); 66*dbc1e9e6Sdan DELETE FROM t2 WHERE a=4; 67*dbc1e9e6Sdan UPDATE t1 SET b='thirteen' WHERE a='one'; 68*dbc1e9e6Sdan UPDATE t1 SET a='ninety-seven', b='twenty' WHERE a='five'; 69*dbc1e9e6Sdan}] 70*dbc1e9e6Sdanwritefile p1.patchset $P 71*dbc1e9e6Sdando_test 1.2 { 72*dbc1e9e6Sdan for {set j 0} {$j < 200} {incr j} { 73*dbc1e9e6Sdan forcecopy p1.patchset input.patchset 74*dbc1e9e6Sdan for {set i 0} {$i < 6} {incr i} { 75*dbc1e9e6Sdan exec $CF input.patchset $i 1 76*dbc1e9e6Sdan exec $CF input.patchset-0 77*dbc1e9e6Sdan forcecopy input.patchset-0 input.patchset 78*dbc1e9e6Sdan } 79*dbc1e9e6Sdan } 80*dbc1e9e6Sdan} {} 81*dbc1e9e6Sdan 82*dbc1e9e6Sdan 83*dbc1e9e6Sdanfinish_test 84*dbc1e9e6Sdan 85