Enhance the command-line completion extension to return the names of
[sqlite.git] / ext / session / sessionA.test
blob0e0a14e38a91cfc1d5eb608ac79824edd1295b1f
1 # 2013 July 04
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #***********************************************************************
12 # This file tests that filter callbacks work as required.
15 if {![info exists testdir]} {
16   set testdir [file join [file dirname [info script]] .. .. test]
17
18 source [file join [file dirname [info script]] session_common.tcl]
19 source $testdir/tester.tcl
20 ifcapable !session {finish_test; return}
21 set testprefix sessionA
24 forcedelete test.db2
25 sqlite3 db2 test.db2
26 foreach {tn db} {1 db 2 db2} {
27   do_test 1.$tn.1 {
28     execsql {
29       CREATE TABLE t1(a PRIMARY KEY, b);
30       CREATE TABLE t2(a PRIMARY KEY, b);
31       CREATE TABLE t3(a PRIMARY KEY, b);
32     } $db
33   } {}
36 proc tbl_filter {zTbl} {
37   return $::table_filter($zTbl)
40 do_test 2.1 {
41   set ::table_filter(t1) 1
42   set ::table_filter(t2) 0
43   set ::table_filter(t3) 1
45   sqlite3session S db main
46   S table_filter tbl_filter 
48   execsql {
49     INSERT INTO t1 VALUES('a', 'b');
50     INSERT INTO t2 VALUES('c', 'd');
51     INSERT INTO t3 VALUES('e', 'f');
52   }
54   set changeset [S changeset]
55   S delete
56   sqlite3changeset_apply db2 $changeset xConflict
58   execsql {
59     SELECT * FROM t1;
60     SELECT * FROM t2;
61     SELECT * FROM t3;
62   } db2
63 } {a b e f}
65 #-------------------------------------------------------------------------
66 # Test that filter callbacks passed to sqlite3changeset_apply() are 
67 # invoked correctly.
69 reset_db
70 do_execsql_test 3.1 {
71   CREATE TABLE t1(a PRIMARY KEY, b);
72   CREATE TABLE t2(x PRIMARY KEY, y);
75 do_test 3.2 {
76   execsql BEGIN
77   set ::cs [changeset_from_sql { 
78     INSERT INTO t1 VALUES(1, 2);
79     INSERT INTO t2 VALUES('x', 'y');
80   }]
81   execsql ROLLBACK
82   set {} {}
83 } {}
85 proc filter {x y} { 
86   return [string equal $x $y] 
89 do_test 3.3 {
90   sqlite3changeset_apply db $::cs {} [list filter t1]
91   execsql {
92     SELECT * FROM t1;
93     SELECT * FROM t2;
94   }
95 } {1 2}
97 do_test 3.4 {
98   execsql { DELETE FROM t1 }
99   sqlite3changeset_apply db $::cs {} [list filter t2]
100   execsql {
101     SELECT * FROM t1;
102     SELECT * FROM t2;
103   }
104 } {x y}
106 finish_test