modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/session/sessionA.test (about)

     1  # 2013 July 04
     2  #
     3  # The author disclaims copyright to this source code.  In place of
     4  # a legal notice, here is a blessing:
     5  #
     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.
     9  #
    10  #***********************************************************************
    11  #
    12  # This file tests that filter callbacks work as required.
    13  #
    14  
    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
    22  
    23  
    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    } {}
    34  }
    35  
    36  proc tbl_filter {zTbl} {
    37    return $::table_filter($zTbl)
    38  }
    39  
    40  do_test 2.1 {
    41    set ::table_filter(t1) 1
    42    set ::table_filter(t2) 0
    43    set ::table_filter(t3) 1
    44  
    45    sqlite3session S db main
    46    S table_filter tbl_filter 
    47  
    48    execsql {
    49      INSERT INTO t1 VALUES('a', 'b');
    50      INSERT INTO t2 VALUES('c', 'd');
    51      INSERT INTO t3 VALUES('e', 'f');
    52    }
    53  
    54    set changeset [S changeset]
    55    S delete
    56    sqlite3changeset_apply db2 $changeset xConflict
    57  
    58    execsql {
    59      SELECT * FROM t1;
    60      SELECT * FROM t2;
    61      SELECT * FROM t3;
    62    } db2
    63  } {a b e f}
    64  
    65  #-------------------------------------------------------------------------
    66  # Test that filter callbacks passed to sqlite3changeset_apply() are 
    67  # invoked correctly.
    68  #
    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);
    73  }
    74  
    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  } {}
    84  
    85  proc filter {x y} { 
    86    return [string equal $x $y] 
    87  }
    88  
    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}
    96  
    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}
   105  
   106  finish_test