xref: /sqlite-3.40.0/ext/session/sessionH.test (revision 9e5ecdc1)
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