| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| |
|
| | if {![info exists testdir]} { |
| | set testdir [file join [file dirname [info script]] .. .. test] |
| | } |
| | source [file join [file dirname [info script]] session_common.tcl] |
| | source $testdir/tester.tcl |
| | ifcapable !session {finish_test; return} |
| | set testprefix sessionF |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | do_execsql_test 1.0 { |
| | CREATE TABLE t3(e PRIMARY KEY, f); |
| | CREATE TABLE t1(a PRIMARY KEY, b); |
| | CREATE TABLE t2(c PRIMARY KEY, d); |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | foreach {tn setup result} { |
| | 1 { |
| | S attach * |
| | } { |
| | {INSERT t2 0 X. {} {i 2 t two}} |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | {INSERT t3 0 X. {} {i 3 t three}} |
| | } |
| |
|
| | 2 { |
| | S attach t1 |
| | S attach * |
| | } { |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | {INSERT t2 0 X. {} {i 2 t two}} |
| | {INSERT t3 0 X. {} {i 3 t three}} |
| | } |
| |
|
| | 3 { |
| | S attach t3 |
| | S attach t2 |
| | S attach t1 |
| | } { |
| | {INSERT t3 0 X. {} {i 3 t three}} |
| | {INSERT t2 0 X. {} {i 2 t two}} |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | } |
| | } { |
| | execsql { |
| | DELETE FROM t1; |
| | DELETE FROM t2; |
| | DELETE FROM t3; |
| | } |
| | sqlite3session S db main |
| | eval $setup |
| |
|
| | do_execsql_test 1.$tn.1 { |
| | INSERT INTO t2 VALUES(2, 'two'); |
| | INSERT INTO t1 VALUES(1, 'one'); |
| | INSERT INTO t3 VALUES(3, 'three'); |
| | } |
| |
|
| | do_changeset_test 1.1.$tn.2 S $result |
| | do_patchset_test 1.1.$tn.3 S $result |
| |
|
| | S delete |
| | } |
| |
|
| | foreach {tn setup result} { |
| | 1 { |
| | S attach * |
| | } { |
| | {INSERT t2 0 X. {} {i 4 t four}} |
| | {INSERT t2 0 X. {} {i 5 t five}} |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | {INSERT t3 0 X. {} {i 6 t six}} |
| | } |
| |
|
| | 2 { |
| | S attach t1 |
| | S attach * |
| | } { |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | {INSERT t2 0 X. {} {i 4 t four}} |
| | {INSERT t2 0 X. {} {i 5 t five}} |
| | {INSERT t3 0 X. {} {i 6 t six}} |
| | } |
| |
|
| | 3 { |
| | S attach t3 |
| | S attach t2 |
| | S attach t1 |
| | } { |
| | {INSERT t3 0 X. {} {i 6 t six}} |
| | {INSERT t2 0 X. {} {i 4 t four}} |
| | {INSERT t2 0 X. {} {i 5 t five}} |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | } |
| | } { |
| | execsql { |
| | DELETE FROM t1; |
| | DELETE FROM t2; |
| | DELETE FROM t3; |
| | } |
| | sqlite3session S db main |
| | eval $setup |
| |
|
| | do_execsql_test 1.$tn.1 { |
| | INSERT INTO t2 VALUES(2, 'two'); |
| | INSERT INTO t1 VALUES(1, 'one'); |
| | DELETE FROM t2; |
| | INSERT INTO t2 VALUES(4, 'four'); |
| | INSERT INTO t2 VALUES(5, 'five'); |
| | INSERT INTO t3 VALUES(6, 'six'); |
| | } |
| |
|
| | do_changeset_test 1.2.$tn.2 S $result |
| | do_patchset_test 1.2.$tn.2 S $result |
| |
|
| | S delete |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | foreach {tn setup result} { |
| | 1 { |
| | S attach * |
| | } { |
| | {DELETE t2 0 X. {i 4 t four} {}} |
| | {DELETE t2 0 X. {i 5 t five} {}} |
| | {DELETE t1 0 X. {i 1 t one} {}} |
| | {DELETE t3 0 X. {i 6 t six} {}} |
| | } |
| |
|
| | 2 { |
| | S attach t1 |
| | S attach * |
| | } { |
| | {DELETE t1 0 X. {i 1 t one} {}} |
| | {DELETE t2 0 X. {i 4 t four} {}} |
| | {DELETE t2 0 X. {i 5 t five} {}} |
| | {DELETE t3 0 X. {i 6 t six} {}} |
| | } |
| |
|
| | 3 { |
| | S attach t3 |
| | S attach t2 |
| | S attach t1 |
| | } { |
| | {DELETE t3 0 X. {i 6 t six} {}} |
| | {DELETE t2 0 X. {i 4 t four} {}} |
| | {DELETE t2 0 X. {i 5 t five} {}} |
| | {DELETE t1 0 X. {i 1 t one} {}} |
| | } |
| | } { |
| | execsql { |
| | DELETE FROM t1; |
| | DELETE FROM t2; |
| | DELETE FROM t3; |
| | } |
| | sqlite3session S db main |
| | eval $setup |
| |
|
| | do_execsql_test 1.$tn.1 { |
| | INSERT INTO t2 VALUES(2, 'two'); |
| | INSERT INTO t1 VALUES(1, 'one'); |
| | DELETE FROM t2; |
| | INSERT INTO t2 VALUES(4, 'four'); |
| | INSERT INTO t2 VALUES(5, 'five'); |
| | INSERT INTO t3 VALUES(6, 'six'); |
| | } |
| |
|
| | do_changeset_invert_test 2.$tn.2 S $result |
| |
|
| | S delete |
| | } |
| |
|
| | |
| | |
| | |
| | foreach {tn setup1 sql1 setup2 sql2 result} { |
| | 1 { |
| | S attach * |
| | } { |
| | INSERT INTO t1 VALUES(1, 'one'); |
| | INSERT INTO t2 VALUES(2, 'two'); |
| | } { |
| | S attach t2 |
| | S attach t1 |
| | } { |
| | INSERT INTO t1 VALUES(3, 'three'); |
| | INSERT INTO t2 VALUES(4, 'four'); |
| | } { |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | {INSERT t1 0 X. {} {i 3 t three}} |
| | {INSERT t2 0 X. {} {i 2 t two}} |
| | {INSERT t2 0 X. {} {i 4 t four}} |
| | } |
| |
|
| | 1 { |
| | S attach t2 |
| | S attach t1 |
| | } { |
| | INSERT INTO t1 VALUES(1, 'one'); |
| | INSERT INTO t2 VALUES(2, 'two'); |
| | } { |
| | S attach * |
| | } { |
| | INSERT INTO t1 VALUES(3, 'three'); |
| | INSERT INTO t2 VALUES(4, 'four'); |
| | } { |
| | {INSERT t2 0 X. {} {i 2 t two}} |
| | {INSERT t2 0 X. {} {i 4 t four}} |
| | {INSERT t1 0 X. {} {i 1 t one}} |
| | {INSERT t1 0 X. {} {i 3 t three}} |
| | } |
| |
|
| | 1 { |
| | S attach * |
| | } { |
| | INSERT INTO t2 VALUES(2, 'two'); |
| | } { |
| | S attach * |
| | } { |
| | INSERT INTO t1 VALUES(3, 'three'); |
| | INSERT INTO t2 VALUES(4, 'four'); |
| | INSERT INTO t3 VALUES(5, 'five'); |
| | } { |
| | {INSERT t2 0 X. {} {i 2 t two}} |
| | {INSERT t2 0 X. {} {i 4 t four}} |
| | {INSERT t1 0 X. {} {i 3 t three}} |
| | {INSERT t3 0 X. {} {i 5 t five}} |
| | } |
| |
|
| | } { |
| | execsql { |
| | DELETE FROM t1; |
| | DELETE FROM t2; |
| | DELETE FROM t3; |
| | } |
| | sqlite3session S db main |
| | eval $setup1 |
| | execsql $sql1 |
| | set c1 [S changeset] |
| | S delete |
| |
|
| | sqlite3session S db main |
| | eval $setup2 |
| | execsql $sql2 |
| | set c2 [S changeset] |
| | S delete |
| |
|
| | set res [list] |
| | sqlite3session_foreach x [sqlite3changeset_concat $c1 $c2] { |
| | lappend res $x |
| | } |
| |
|
| | do_test 3.$tn { set res } [list {*}$result] |
| | } |
| |
|
| |
|
| | finish_test |
| |
|