161c758b5Sdan# 2018 January 18 261c758b5Sdan# 361c758b5Sdan# The author disclaims copyright to this source code. In place of 461c758b5Sdan# a legal notice, here is a blessing: 561c758b5Sdan# 661c758b5Sdan# May you do good and not evil. 761c758b5Sdan# May you find forgiveness for yourself and forgive others. 861c758b5Sdan# May you share freely, never taking more than you give. 961c758b5Sdan# 1061c758b5Sdan#*********************************************************************** 1161c758b5Sdan# 1261c758b5Sdan 1361c758b5Sdanif {![info exists testdir]} { 1461c758b5Sdan set testdir [file join [file dirname [info script]] .. .. test] 1561c758b5Sdan} 1661c758b5Sdansource [file join [file dirname [info script]] session_common.tcl] 1761c758b5Sdansource $testdir/tester.tcl 1861c758b5Sdanifcapable !session {finish_test; return} 1961c758b5Sdanset testprefix sessionH 2061c758b5Sdan 2161c758b5Sdanforcedelete test.db2 2261c758b5Sdansqlite3 db2 test.db2 2361c758b5Sdan 2461c758b5Sdando_test 1.0 { 2561c758b5Sdan do_common_sql { 2661c758b5Sdan CREATE TABLE t1(a, b, c, PRIMARY KEY(a, b)); 2761c758b5Sdan } 2861c758b5Sdan do_then_apply_sql { 2961c758b5Sdan WITH s(i) AS ( 3061c758b5Sdan VALUES(1) UNION ALL SELECT i+1 FROM s WHERe i<10000 3161c758b5Sdan ) 3261c758b5Sdan INSERT INTO t1 SELECT 'abcde', randomblob(16), i FROM s; 3361c758b5Sdan } 3461c758b5Sdan compare_db db db2 3561c758b5Sdan} {} 3661c758b5Sdan 37*9e5ecdc1Sdan#------------------------------------------------------------------------ 38*9e5ecdc1Sdandb2 close 39*9e5ecdc1Sdanreset_db 40*9e5ecdc1Sdan 41*9e5ecdc1Sdando_execsql_test 2.0 { 42*9e5ecdc1Sdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c); 43*9e5ecdc1Sdan INSERT INTO main.t1 VALUES(1, 2, 3), (4, 5, 6), (7, 8, 9); 44*9e5ecdc1Sdan} 45*9e5ecdc1Sdan 46*9e5ecdc1Sdando_test 2.1 { 47*9e5ecdc1Sdan sqlite3session S db main 48*9e5ecdc1Sdan S attach * 49*9e5ecdc1Sdan db eval { 50*9e5ecdc1Sdan BEGIN; 51*9e5ecdc1Sdan INSERT INTO t1 VALUES(10, 11, 12); 52*9e5ecdc1Sdan DELETE FROM t1 WHERE a=1; 53*9e5ecdc1Sdan UPDATE t1 SET b='five', c='six' WHERE a=4; 54*9e5ecdc1Sdan } 55*9e5ecdc1Sdan 56*9e5ecdc1Sdan set C [S changeset] 57*9e5ecdc1Sdan db eval ROLLBACK 58*9e5ecdc1Sdan S delete 59*9e5ecdc1Sdan set {} {} 60*9e5ecdc1Sdan} {} 61*9e5ecdc1Sdan 62*9e5ecdc1Sdando_execsql_test 2.2 { 63*9e5ecdc1Sdan CREATE TEMP TABLE t1(a INTEGER PRIMARY KEY, b, c); 64*9e5ecdc1Sdan INSERT INTO temp.t1 VALUES(1, 2, 3), (4, 5, 6), (7, 8, 9); 65*9e5ecdc1Sdan} 66*9e5ecdc1Sdan 67*9e5ecdc1Sdanset ::conflict [list] 68*9e5ecdc1Sdanproc xConflict {args} { lappend ::conflict $args ; return "" } 69*9e5ecdc1Sdando_test 2.3 { 70*9e5ecdc1Sdan sqlite3changeset_apply db $C xConflict 71*9e5ecdc1Sdan set ::conflict 72*9e5ecdc1Sdan} {} 73*9e5ecdc1Sdando_execsql_test 2.4 { 74*9e5ecdc1Sdan SELECT * FROM main.t1; 75*9e5ecdc1Sdan SELECT '****'; 76*9e5ecdc1Sdan SELECT * FROM temp.t1; 77*9e5ecdc1Sdan} { 78*9e5ecdc1Sdan 4 five six 7 8 9 10 11 12 79*9e5ecdc1Sdan **** 80*9e5ecdc1Sdan 1 2 3 4 5 6 7 8 9 81*9e5ecdc1Sdan} 82*9e5ecdc1Sdan 8361c758b5Sdan 8461c758b5Sdanfinish_test 85