Index: Tests/session.eagle ================================================================== --- Tests/session.eagle +++ Tests/session.eagle @@ -187,15 +187,15 @@ return false } ############################################################################### -proc createTheSchema { db } { - sql execute $db { - CREATE TABLE t1(x INTEGER PRIMARY KEY, y TEXT); - CREATE TABLE t2(x INTEGER PRIMARY KEY, y TEXT); - } +proc createTheSchema { db databaseName } { + sql execute $db [subst { + CREATE TABLE ${databaseName}.t1(x INTEGER PRIMARY KEY, y TEXT); + CREATE TABLE ${databaseName}.t2(x INTEGER PRIMARY KEY, y TEXT); + }] } ############################################################################### proc makeSomeChanges { db table types random {rowId ""} {count 5} } { @@ -342,19 +342,19 @@ set fileName(1) [getChangeSetFileName 1] set fileName(2) [getChangeSetFileName 2] cleanupSomeText } -body { - createTheSchema $db - makeSomeChanges $db t1 [list insert] true + createTheSchema $db main + makeSomeChanges $db t1 [list insert insert] false set connection [getDbConnection] set session [$connection -alias CreateSession main] $session AttachTable null - makeSomeChanges $db t1 [list insert update delete] true + makeSomeChanges $db t1 [list insert update delete] false set rawData [createChangeSetForSession $session] object removeref $rawData set stream(1) [object create -alias \ @@ -367,16 +367,22 @@ System.IO.FileStream $fileName(2) Create Write] $session -alias CreateChangeSet $stream(2) $stream(2) Flush; $stream(2) Close + set stream(3) [object create -alias \ + System.IO.FileStream $fileName(2) Open Read] + + set changeSet [$connection -alias CreateChangeSet $stream(3) null] + list [expr {[file size $fileName(1)] > 0}] \ - [string equal [readFile $fileName(1)] [readFile $fileName(2)]] + [string equal [readFile $fileName(1)] [readFile $fileName(2)]] \ + [changeSetToString $changeSet true] [$stream(3) Close] } -cleanup { cleanupSomeText - unset -nocomplain stream rawData byteArray session + unset -nocomplain changeSet stream rawData byteArray session freeDbConnection unset -nocomplain connection @@ -386,21 +392,32 @@ cleanupDb $fileName(0) unset -nocomplain db fileName } -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ System.Data.SQLite SQLiteInterop\ -defineConstant.System.Data.SQLite.INTEROP_SESSION_EXTENSION} -result \ -{True True}} +defineConstant.System.Data.SQLite.INTEROP_SESSION_EXTENSION} -result {True True\ +{{TableName t1 NumberOfColumns 2 OperationCode Delete Indirect False\ +PrimaryKeyColumns {[True, False]} OldValue 0 1 NewValue 0 \ +ConflictValue 0 OldValue 1 {"inserted: Alpha Bravo Charlie Delta\ +Echo"} NewValue 1 ConflictValue 1 } {TableName t1\ +NumberOfColumns 2 OperationCode Update Indirect False PrimaryKeyColumns {[True,\ +False]} OldValue 0 2 NewValue 0 ConflictValue 0 \ +OldValue 1 {"inserted: Foxtrot Golf Hotel India Juliet"} NewValue 1 {"updated:\ +Papa Quebec Romeo Sierra Tango"} ConflictValue 1 } {TableName t1\ +NumberOfColumns 2 OperationCode Insert Indirect False PrimaryKeyColumns {[True,\ +False]} OldValue 0 NewValue 0 3 ConflictValue 0 \ +OldValue 1 NewValue 1 {"inserted: Kilo Lima Mike November Oscar"}\ +ConflictValue 1 }} {}}} ############################################################################### runTest {test session-1.2 {session change set enumeration} -setup { setupDb [set fileName session-1.2.db] cleanupSomeText } -body { - createTheSchema $db + createTheSchema $db main makeSomeChanges $db t1 [list insert insert insert] false set connection [getDbConnection] set session [$connection -alias CreateSession main] @@ -468,11 +485,11 @@ runTest {test session-1.3 {session enabled/disabled state} -setup { setupDb [set fileName session-1.3.db] cleanupSomeText } -body { - createTheSchema $db + createTheSchema $db main makeSomeChanges $db t1 [list insert] false set connection [getDbConnection] set session [$connection -alias CreateSession main] @@ -527,11 +544,11 @@ runTest {test session-1.4 {session direct/indirect state} -setup { setupDb [set fileName session-1.4.db] cleanupSomeText } -body { - createTheSchema $db + createTheSchema $db main makeSomeChanges $db t1 [list insert] false set connection [getDbConnection] set session [$connection -alias CreateSession main] @@ -585,11 +602,11 @@ runTest {test session-1.5 {session table filter} -setup { setupDb [set fileName session-1.5.db] cleanupSomeText } -body { - createTheSchema $db + createTheSchema $db main makeSomeChanges $db t1 [list insert] false set connection [getDbConnection] set session [$connection -alias CreateSession main] @@ -659,11 +676,11 @@ runTest {test session-1.6 {combine and apply change sets} -setup { setupDb [set fileName session-1.6.db] cleanupSomeText } -body { - createTheSchema $db + createTheSchema $db main makeSomeChanges $db t1 [list insert insert] false set connection [getDbConnection] set rawData(1) [captureChangeSetRawData $connection main null { @@ -715,10 +732,63 @@ False]} OldValue 0 NewValue 0 3 ConflictValue 0 \ OldValue 1 NewValue 1 {"inserted: Papa Quebec Romeo Sierra Tango"}\ ConflictValue 1 }} Data {1 {inserted: Kilo Lima Mike November\ Oscar} 2 {inserted: Foxtrot Golf Hotel India Juliet} 3 {inserted: Papa Quebec\ Romeo Sierra Tango}}}} + +############################################################################### + +runTest {test session-1.7 {differences between tables} -setup { + setupDb [set fileName session-1.7.db] + + cleanupSomeText +} -body { + createTheSchema $db main + makeSomeChanges $db t1 [list insert insert] false + + set result [list] + + lappend result [sql execute -execute reader -format list $db \ + {SELECT x, y FROM t1 ORDER BY x;}] + + createTheSchema $db temp + sql execute $db {INSERT INTO temp.t1 SELECT * FROM main.t1;} + makeSomeChanges $db temp.t1 [list insert insert] false + + set connection [getDbConnection] + + set session [$connection -alias CreateSession main] + $session AttachTable null + $session LoadDifferencesFromTable temp t1 + + lappend result [sql execute -execute reader -format list $db \ + {SELECT x, y FROM t1 ORDER BY x;}] +} -cleanup { + cleanupSomeText + + unset -nocomplain result session + + freeDbConnection + + unset -nocomplain connection + + cleanupDb $fileName + + unset -nocomplain db fileName +} -constraints {eagle command.object monoBug28 command.sql compile.DATA SQLite\ +System.Data.SQLite SQLiteInterop\ +defineConstant.System.Data.SQLite.INTEROP_SESSION_EXTENSION} -result {{1\ +{inserted: Alpha Bravo Charlie Delta Echo} 2 {inserted: Foxtrot Golf Hotel\ +India Juliet}} {1 {inserted: Alpha Bravo Charlie Delta Echo} 2 {inserted:\ +Foxtrot Golf Hotel India Juliet} 3 {inserted: Kilo Lima Mike November Oscar} 4\ +{inserted: Papa Quebec Romeo Sierra Tango}}}} + +############################################################################### + + + + ############################################################################### rename conflictCallback "" rename tableFilterCallbackT1 ""