| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
| 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 |
|
|