# 2011 July 11
#
# The author disclaims copyright to this source code.  In place of
# a legal notice, here is a blessing:
#
#    May you do good and not evil.
#    May you find forgiveness for yourself and forgive others.
#    May you share freely, never taking more than you give.
#
#***********************************************************************
# This file implements regression tests for SQLite sessions extension.
# Specifically, it tests that sessions work when the database is modified
# using incremental blob handles.
#

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}
ifcapable !incrblob {finish_test; return}

set testprefix session6

proc do_then_apply_tcl {tcl {dbname main}} {
  proc xConflict args { return "OMIT" }
  set rc [catch {
    sqlite3session S db $dbname
    db eval "SELECT name FROM $dbname.sqlite_master WHERE type = 'table'" {
      S attach $name
    }
    eval $tcl
    sqlite3changeset_apply db2 [S changeset] xConflict
  } msg]

  catch { S delete }
  if {$rc} {error $msg}
}

test_sqlite3_log x
proc x {args} {puts $args}

forcedelete test.db2
sqlite3 db2 test.db2

do_common_sql {
  CREATE TABLE t1(a PRIMARY KEY, b);
  CREATE TABLE t2(c PRIMARY KEY, d);
}

# Test a blob update.
#
do_test 1.1 {
  do_then_apply_tcl {
    db eval { INSERT INTO t1 VALUES(1, 'helloworld') }
    db eval { INSERT INTO t2 VALUES(2, 'onetwothree') }
  }
  compare_db db db2
} {}
do_test 1.2 {
  do_then_apply_tcl {
    set fd [db incrblob t1 b 1]
    puts -nonewline $fd 1234567890
    close $fd
  }
  compare_db db db2
} {}

# Test an attached database.
#
do_test 2.1 {
  forcedelete test.db3
  file copy test.db2 test.db3
  execsql { ATTACH 'test.db3' AS aux; }

  do_then_apply_tcl {
    set fd [db incrblob aux t2 d 1]
    puts -nonewline $fd fourfivesix
    close $fd
  } aux

  sqlite3 db3 test.db3
  compare_db db2 db3
} {}


db3 close
db2 close

finish_test
