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

     1  # 2011 July 11
     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  # This file implements regression tests for SQLite sessions extension.
    12  # Specifically, it tests that sessions work when the database is modified
    13  # using incremental blob handles.
    14  #
    15  
    16  if {![info exists testdir]} {
    17    set testdir [file join [file dirname [info script]] .. .. test]
    18  } 
    19  source [file join [file dirname [info script]] session_common.tcl]
    20  source $testdir/tester.tcl
    21  ifcapable !session {finish_test; return}
    22  
    23  set testprefix session6
    24  
    25  proc do_then_apply_tcl {tcl {dbname main}} {
    26    proc xConflict args { return "OMIT" }
    27    set rc [catch {
    28      sqlite3session S db $dbname
    29      db eval "SELECT name FROM $dbname.sqlite_master WHERE type = 'table'" {
    30        S attach $name
    31      }
    32      eval $tcl
    33      sqlite3changeset_apply db2 [S changeset] xConflict
    34    } msg]
    35  
    36    catch { S delete }
    37    if {$rc} {error $msg}
    38  }
    39  
    40  test_sqlite3_log x
    41  proc x {args} {puts $args}
    42  
    43  forcedelete test.db2
    44  sqlite3 db2 test.db2
    45  
    46  do_common_sql {
    47    CREATE TABLE t1(a PRIMARY KEY, b);
    48    CREATE TABLE t2(c PRIMARY KEY, d);
    49  }
    50  
    51  # Test a blob update.
    52  #
    53  do_test 1.1 {
    54    do_then_apply_tcl {
    55      db eval { INSERT INTO t1 VALUES(1, 'helloworld') }
    56      db eval { INSERT INTO t2 VALUES(2, 'onetwothree') }
    57    }
    58    compare_db db db2
    59  } {}
    60  do_test 1.2 {
    61    do_then_apply_tcl {
    62      set fd [db incrblob t1 b 1]
    63      puts -nonewline $fd 1234567890
    64      close $fd
    65    }
    66    compare_db db db2
    67  } {}
    68  
    69  # Test an attached database.
    70  #
    71  do_test 2.1 {
    72    forcedelete test.db3
    73    file copy test.db2 test.db3
    74    execsql { ATTACH 'test.db3' AS aux; }
    75  
    76    do_then_apply_tcl {
    77      set fd [db incrblob aux t2 d 1]
    78      puts -nonewline $fd fourfivesix
    79      close $fd
    80    } aux
    81  
    82    sqlite3 db3 test.db3
    83    compare_db db2 db3
    84  } {}
    85  
    86  
    87  db3 close
    88  db2 close
    89  
    90  finish_test