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]
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
26 foreach {tn db} {1 db 2 db2} {
29 CREATE TABLE t1(a PRIMARY KEY, b);
30 CREATE TABLE t2(a PRIMARY KEY, b);
31 CREATE TABLE t3(a PRIMARY KEY, b);
36 proc tbl_filter {zTbl} {
37 return $::table_filter($zTbl)
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
49 INSERT INTO t1 VALUES('a', 'b');
50 INSERT INTO t2 VALUES('c', 'd');
51 INSERT INTO t3 VALUES('e', 'f');
54 set changeset [S changeset]
56 sqlite3changeset_apply db2 $changeset xConflict
65 #-------------------------------------------------------------------------
66 # Test that filter callbacks passed to sqlite3changeset_apply() are
71 CREATE TABLE t1(a PRIMARY KEY, b);
72 CREATE TABLE t2(x PRIMARY KEY, y);
77 set ::cs [changeset_from_sql {
78 INSERT INTO t1 VALUES(1, 2);
79 INSERT INTO t2 VALUES('x', 'y');
86 return [string equal $x $y]
90 sqlite3changeset_apply db $::cs {} [list filter t1]
98 execsql { DELETE FROM t1 }
99 sqlite3changeset_apply db $::cs {} [list filter t2]