System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 8f8209ad0edabbd729b187756ead8cf5247af639:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 73 65 73 73 69 6f 6e 2e 65 61  .#..# session.ea
0060: 67 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69  gle --..#..# Wri
0070: 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74  tten by Joe Mist
0080: 61 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61  achkin...# Relea
0090: 73 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69  sed to the publi
00a0: 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74  c domain, use at
00b0: 20 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d   your own risk!.
00c0: 0a 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  .#..############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 23 0d 0a 0d 0a 70 61 63 6b 61 67 65 20 72  ###....package r
0120: 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 70 61  equire Eagle..pa
0130: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
0140: 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 70 61 63  gle.Library..pac
0150: 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67  kage require Eag
0160: 6c 65 2e 54 65 73 74 0d 0a 0d 0a 72 75 6e 54 65  le.Test....runTe
0170: 73 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23  stPrologue....##
0180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
01d0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
01e0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
01f0: 69 74 65 2e 54 65 73 74 0d 0a 72 75 6e 53 51 4c  ite.Test..runSQL
0200: 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 0d  iteTestPrologue.
0210: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 0d 0a 0d 0a 70 72 6f 63 20 67 65 74 53 6f  ##....proc getSo
0270: 6d 65 54 65 78 74 20 7b 20 72 61 6e 64 6f 6d 20  meText { random 
0280: 63 6f 75 6e 74 20 7d 20 7b 0d 0a 20 20 73 65 74  count } {..  set
0290: 20 69 74 65 6d 73 20 5b 6c 69 73 74 20 5c 0d 0a   items [list \..
02a0: 20 20 20 20 20 20 41 6c 70 68 61 20 42 72 61 76        Alpha Brav
02b0: 6f 20 43 68 61 72 6c 69 65 20 44 65 6c 74 61 20  o Charlie Delta 
02c0: 45 63 68 6f 20 46 6f 78 74 72 6f 74 20 47 6f 6c  Echo Foxtrot Gol
02d0: 66 20 48 6f 74 65 6c 20 5c 0d 0a 20 20 20 20 20  f Hotel \..     
02e0: 20 49 6e 64 69 61 20 4a 75 6c 69 65 74 20 4b 69   India Juliet Ki
02f0: 6c 6f 20 4c 69 6d 61 20 4d 69 6b 65 20 4e 6f 76  lo Lima Mike Nov
0300: 65 6d 62 65 72 20 4f 73 63 61 72 20 50 61 70 61  ember Oscar Papa
0310: 20 5c 0d 0a 20 20 20 20 20 20 51 75 65 62 65 63   \..      Quebec
0320: 20 52 6f 6d 65 6f 20 53 69 65 72 72 61 20 54 61   Romeo Sierra Ta
0330: 6e 67 6f 20 55 6e 69 66 6f 72 6d 20 56 69 63 74  ngo Uniform Vict
0340: 6f 72 20 57 68 69 73 6b 65 79 20 58 2d 72 61 79  or Whiskey X-ray
0350: 20 5c 0d 0a 20 20 20 20 20 20 59 61 6e 6b 65 65   \..      Yankee
0360: 20 5a 75 6c 75 5d 0d 0a 0d 0a 20 20 69 66 20 7b   Zulu]....  if {
0370: 21 24 72 61 6e 64 6f 6d 7d 20 74 68 65 6e 20 7b  !$random} then {
0380: 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 73  ..    variable s
0390: 6f 6d 65 5f 74 65 78 74 5f 69 6e 64 65 78 0d 0a  ome_text_index..
03a0: 0d 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
03b0: 20 65 78 69 73 74 73 20 73 6f 6d 65 5f 74 65 78   exists some_tex
03c0: 74 5f 69 6e 64 65 78 5d 7d 20 74 68 65 6e 20 7b  t_index]} then {
03d0: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 6d 65  ..      set some
03e0: 5f 74 65 78 74 5f 69 6e 64 65 78 20 30 0d 0a 20  _text_index 0.. 
03f0: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73     }..  }....  s
0400: 65 74 20 6c 65 6e 67 74 68 20 5b 6c 6c 65 6e 67  et length [lleng
0410: 74 68 20 24 69 74 65 6d 73 5d 0d 0a 20 20 73 65  th $items]..  se
0420: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
0430: 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  ...  for {set i 
0440: 30 7d 20 7b 24 69 20 3c 20 24 63 6f 75 6e 74 7d  0} {$i < $count}
0450: 20 7b 69 6e 63 72 20 69 7d 20 7b 0d 0a 20 20 20   {incr i} {..   
0460: 20 69 66 20 7b 24 72 61 6e 64 6f 6d 7d 20 74 68   if {$random} th
0470: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20  en {..      set 
0480: 69 74 65 6d 20 5b 6c 69 6e 64 65 78 20 24 69 74  item [lindex $it
0490: 65 6d 73 20 5b 65 78 70 72 20 7b 69 6e 74 28 72  ems [expr {int(r
04a0: 61 6e 64 28 29 20 2a 20 24 6c 65 6e 67 74 68 29  and() * $length)
04b0: 7d 5d 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20  }]]..    } else 
04c0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 69 74 65  {..      set ite
04d0: 6d 20 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 73  m [lindex $items
04e0: 20 24 73 6f 6d 65 5f 74 65 78 74 5f 69 6e 64 65   $some_text_inde
04f0: 78 5d 0d 0a 20 20 20 20 20 20 69 6e 63 72 20 73  x]..      incr s
0500: 6f 6d 65 5f 74 65 78 74 5f 69 6e 64 65 78 0d 0a  ome_text_index..
0510: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 6f 6d  ..      if {$som
0520: 65 5f 74 65 78 74 5f 69 6e 64 65 78 20 3e 3d 20  e_text_index >= 
0530: 24 6c 65 6e 67 74 68 7d 20 74 68 65 6e 20 7b 0d  $length} then {.
0540: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 6d  .        set som
0550: 65 5f 74 65 78 74 5f 69 6e 64 65 78 20 30 0d 0a  e_text_index 0..
0560: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
0570: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
0580: 73 75 6c 74 20 24 69 74 65 6d 0d 0a 20 20 7d 0d  sult $item..  }.
0590: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73  ...  return $res
05a0: 75 6c 74 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23  ult..}....######
05b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05f0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f  #########....pro
0600: 63 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78  c cleanupSomeTex
0610: 74 20 7b 7d 20 7b 0d 0a 20 20 76 61 72 69 61 62  t {} {..  variab
0620: 6c 65 20 73 6f 6d 65 5f 74 65 78 74 5f 69 6e 64  le some_text_ind
0630: 65 78 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ex..  unset -noc
0640: 6f 6d 70 6c 61 69 6e 20 73 6f 6d 65 5f 74 65 78  omplain some_tex
0650: 74 5f 69 6e 64 65 78 0d 0a 7d 0d 0a 0d 0a 23 23  t_index..}....##
0660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
06b0: 0a 70 72 6f 63 20 66 6f 72 44 69 73 70 6c 61 79  .proc forDisplay
06c0: 20 7b 20 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72   { object member
06d0: 20 7d 20 7b 0d 0a 20 20 73 65 74 20 69 73 41 72   } {..  set isAr
06e0: 72 61 79 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 69  ray false....  i
06f0: 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64  f {[isObjectHand
0700: 6c 65 20 24 6f 62 6a 65 63 74 5d 20 26 26 20 24  le $object] && $
0710: 6f 62 6a 65 63 74 20 6e 65 20 22 6e 75 6c 6c 22  object ne "null"
0720: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65  } then {..    se
0730: 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20  t value [object 
0740: 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 2d  invoke -create -
0750: 2d 20 24 6f 62 6a 65 63 74 20 24 6d 65 6d 62 65  - $object $membe
0760: 72 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 69  r]....    if {[i
0770: 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76  sObjectHandle $v
0780: 61 6c 75 65 5d 20 26 26 20 24 76 61 6c 75 65 20  alue] && $value 
0790: 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20  ne "null"} then 
07a0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 41  {..      set isA
07b0: 72 72 61 79 20 5b 6f 62 6a 65 63 74 20 69 6e 76  rray [object inv
07c0: 6f 6b 65 20 2d 2d 20 24 76 61 6c 75 65 20 47 65  oke -- $value Ge
07d0: 74 54 79 70 65 2e 49 73 41 72 72 61 79 5d 0d 0a  tType.IsArray]..
07e0: 20 20 20 20 7d 0d 0a 20 20 7d 20 65 6c 73 65 20      }..  } else 
07f0: 7b 0d 0a 20 20 20 20 73 65 74 20 76 61 6c 75 65  {..    set value
0800: 20 6e 75 6c 6c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20   null..  }....  
0810: 69 66 20 7b 24 69 73 41 72 72 61 79 7d 20 74 68  if {$isArray} th
0820: 65 6e 20 7b 0d 0a 20 20 20 20 72 65 74 75 72 6e  en {..    return
0830: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
0840: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
0850: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 70 61  c \..        -pa
0860: 72 61 6d 65 74 65 72 74 79 70 65 73 20 41 72 72  rametertypes Arr
0870: 61 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ay System.Data.S
0880: 51 4c 69 74 65 2e 48 65 6c 70 65 72 4d 65 74 68  QLite.HelperMeth
0890: 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 54  ods \..        T
08a0: 6f 44 69 73 70 6c 61 79 53 74 72 69 6e 67 20 24  oDisplayString $
08b0: 76 61 6c 75 65 5d 0d 0a 20 20 7d 20 65 6c 73 65  value]..  } else
08c0: 20 7b 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b   {..    return [
08d0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
08e0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
08f0: 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65  \..        Syste
0900: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 48 65  m.Data.SQLite.He
0910: 6c 70 65 72 4d 65 74 68 6f 64 73 20 54 6f 44 69  lperMethods ToDi
0920: 73 70 6c 61 79 53 74 72 69 6e 67 20 24 76 61 6c  splayString $val
0930: 75 65 5d 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d 0a 23  ue]..  }..}....#
0940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0990: 0d 0a 70 72 6f 63 20 63 72 65 61 74 65 4d 65 6d  ..proc createMem
09a0: 6f 72 79 43 68 61 6e 67 65 53 65 74 46 6f 72 43  oryChangeSetForC
09b0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e  onnection { conn
09c0: 65 63 74 69 6f 6e 20 72 61 77 44 61 74 61 20 7d  ection rawData }
09d0: 20 7b 0d 0a 20 20 69 66 20 7b 5b 69 73 4f 62 6a   {..  if {[isObj
09e0: 65 63 74 48 61 6e 64 6c 65 20 24 63 6f 6e 6e 65  ectHandle $conne
09f0: 63 74 69 6f 6e 5d 20 26 26 20 24 63 6f 6e 6e 65  ction] && $conne
0a00: 63 74 69 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d  ction ne "null"}
0a10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 72 65 74   then {..    ret
0a20: 75 72 6e 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e  urn [$connection
0a30: 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..     
0a40: 20 20 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20     -objectflags 
0a50: 2b 4e 6f 52 65 74 75 72 6e 52 65 66 65 72 65 6e  +NoReturnReferen
0a60: 63 65 20 43 72 65 61 74 65 43 68 61 6e 67 65 53  ce CreateChangeS
0a70: 65 74 20 24 72 61 77 44 61 74 61 5d 0d 0a 20 20  et $rawData]..  
0a80: 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 75  }....  return nu
0a90: 6c 6c 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  ll..}....#######
0aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ae0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63  ########....proc
0af0: 20 63 72 65 61 74 65 4d 65 6d 6f 72 79 43 68 61   createMemoryCha
0b00: 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69 6f 6e  ngeSetForSession
0b10: 20 7b 20 73 65 73 73 69 6f 6e 20 7b 70 61 74 63   { session {patc
0b20: 68 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  h false} } {..  
0b30: 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e  if {[isObjectHan
0b40: 64 6c 65 20 24 73 65 73 73 69 6f 6e 5d 20 26 26  dle $session] &&
0b50: 20 24 73 65 73 73 69 6f 6e 20 6e 65 20 22 6e 75   $session ne "nu
0b60: 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ll"} then {..   
0b70: 20 73 65 74 20 62 79 74 65 41 72 72 61 79 20 6e   set byteArray n
0b80: 75 6c 6c 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 24  ull....    if {$
0b90: 70 61 74 63 68 7d 20 74 68 65 6e 20 7b 0d 0a 20  patch} then {.. 
0ba0: 20 20 20 20 20 24 73 65 73 73 69 6f 6e 20 2d 61       $session -a
0bb0: 6c 69 61 73 20 43 72 65 61 74 65 50 61 74 63 68  lias CreatePatch
0bc0: 53 65 74 20 62 79 74 65 41 72 72 61 79 0d 0a 20  Set byteArray.. 
0bd0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
0be0: 20 20 20 24 73 65 73 73 69 6f 6e 20 2d 61 6c 69     $session -ali
0bf0: 61 73 20 43 72 65 61 74 65 43 68 61 6e 67 65 53  as CreateChangeS
0c00: 65 74 20 62 79 74 65 41 72 72 61 79 0d 0a 20 20  et byteArray..  
0c10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72    }....    retur
0c20: 6e 20 5b 63 72 65 61 74 65 42 79 74 65 41 72 72  n [createByteArr
0c30: 61 79 20 5b 61 72 72 61 79 54 6f 4c 69 73 74 20  ay [arrayToList 
0c40: 62 79 74 65 41 72 72 61 79 5d 5d 0d 0a 20 20 7d  byteArray]]..  }
0c50: 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 6e 75 6c  ....  return nul
0c60: 6c 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  l..}....########
0c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cb0: 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20  #######....proc 
0cc0: 77 72 69 74 65 52 61 77 44 61 74 61 54 6f 46 69  writeRawDataToFi
0cd0: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 72 61  le { fileName ra
0ce0: 77 44 61 74 61 20 7d 20 7b 0d 0a 20 20 69 66 20  wData } {..  if 
0cf0: 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65  {[isObjectHandle
0d00: 20 24 72 61 77 44 61 74 61 5d 20 26 26 20 24 72   $rawData] && $r
0d10: 61 77 44 61 74 61 20 6e 65 20 22 6e 75 6c 6c 22  awData ne "null"
0d20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65  } then {..    se
0d30: 74 20 73 74 72 65 61 6d 20 5b 6f 62 6a 65 63 74  t stream [object
0d40: 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
0d50: 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d  ..        System
0d60: 2e 49 4f 2e 46 69 6c 65 53 74 72 65 61 6d 20 24  .IO.FileStream $
0d70: 66 69 6c 65 4e 61 6d 65 20 43 72 65 61 74 65 20  fileName Create 
0d80: 57 72 69 74 65 5d 0d 0a 0d 0a 20 20 20 20 24 73  Write]....    $s
0d90: 74 72 65 61 6d 20 57 72 69 74 65 20 24 72 61 77  tream Write $raw
0da0: 44 61 74 61 20 30 20 5b 24 72 61 77 44 61 74 61  Data 0 [$rawData
0db0: 20 4c 65 6e 67 74 68 5d 0d 0a 20 20 20 20 24 73   Length]..    $s
0dc0: 74 72 65 61 6d 20 46 6c 75 73 68 3b 20 24 73 74  tream Flush; $st
0dd0: 72 65 61 6d 20 43 6c 6f 73 65 0d 0a 0d 0a 20 20  ream Close....  
0de0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true.. 
0df0: 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 66   }....  return f
0e00: 61 6c 73 65 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23  alse..}....#####
0e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72  ##########....pr
0e60: 6f 63 20 6f 70 65 6e 53 74 72 65 61 6d 43 68 61  oc openStreamCha
0e70: 6e 67 65 53 65 74 46 6f 72 43 6f 6e 6e 65 63 74  ngeSetForConnect
0e80: 69 6f 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63  ion {..        c
0e90: 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 70 75 74 46  onnection inputF
0ea0: 69 6c 65 4e 61 6d 65 20 6f 75 74 70 75 74 46 69  ileName outputFi
0eb0: 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20  leName {varName 
0ec0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 69 66 20 7b 5b  ""} } {..  if {[
0ed0: 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  isObjectHandle $
0ee0: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 24  connection] && $
0ef0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 20 22 6e  connection ne "n
0f00: 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ull"} then {..  
0f10: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
0f20: 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e  ngth $varName] >
0f30: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
0f40: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa
0f50: 6d 65 20 73 74 61 74 65 0d 0a 20 20 20 20 7d 0d  me state..    }.
0f60: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69  ...    if {[stri
0f70: 6e 67 20 6c 65 6e 67 74 68 20 24 69 6e 70 75 74  ng length $input
0f80: 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  FileName] > 0} t
0f90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  hen {..      set
0fa0: 20 73 74 61 74 65 28 69 6e 70 75 74 53 74 72 65   state(inputStre
0fb0: 61 6d 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  am) [object crea
0fc0: 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  te -alias \..   
0fd0: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 49 4f         System.IO
0fe0: 2e 46 69 6c 65 53 74 72 65 61 6d 20 24 69 6e 70  .FileStream $inp
0ff0: 75 74 46 69 6c 65 4e 61 6d 65 20 4f 70 65 6e 20  utFileName Open 
1000: 52 65 61 64 5d 0d 0a 20 20 20 20 7d 20 65 6c 73  Read]..    } els
1010: 65 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73  e {..      set s
1020: 74 61 74 65 28 69 6e 70 75 74 53 74 72 65 61 6d  tate(inputStream
1030: 29 20 6e 75 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d  ) null..    }...
1040: 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  .    if {[string
1050: 20 6c 65 6e 67 74 68 20 24 6f 75 74 70 75 74 46   length $outputF
1060: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
1070: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20  en {..      set 
1080: 73 74 61 74 65 28 6f 75 74 70 75 74 53 74 72 65  state(outputStre
1090: 61 6d 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  am) [object crea
10a0: 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  te -alias \..   
10b0: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 49 4f         System.IO
10c0: 2e 46 69 6c 65 53 74 72 65 61 6d 20 24 6f 75 74  .FileStream $out
10d0: 70 75 74 46 69 6c 65 4e 61 6d 65 20 43 72 65 61  putFileName Crea
10e0: 74 65 20 57 72 69 74 65 5d 0d 0a 20 20 20 20 7d  te Write]..    }
10f0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 73   else {..      s
1100: 65 74 20 73 74 61 74 65 28 6f 75 74 70 75 74 53  et state(outputS
1110: 74 72 65 61 6d 29 20 6e 75 6c 6c 0d 0a 20 20 20  tream) null..   
1120: 20 7d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 73 74   }....    set st
1130: 61 74 65 28 63 68 61 6e 67 65 53 65 74 29 20 5b  ate(changeSet) [
1140: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 61 6c 69  $connection -ali
1150: 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 43 72  as \..        Cr
1160: 65 61 74 65 43 68 61 6e 67 65 53 65 74 20 24 73  eateChangeSet $s
1170: 74 61 74 65 28 69 6e 70 75 74 53 74 72 65 61 6d  tate(inputStream
1180: 29 20 24 73 74 61 74 65 28 6f 75 74 70 75 74 53  ) $state(outputS
1190: 74 72 65 61 6d 29 5d 0d 0a 0d 0a 20 20 20 20 72  tream)]....    r
11a0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 7d 0d  eturn true..  }.
11b0: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 66 61 6c 73  ...  return fals
11c0: 65 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  e..}....########
11d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1210: 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20  #######....proc 
1220: 77 72 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67  writeStreamChang
1230: 65 53 65 74 46 6f 72 53 65 73 73 69 6f 6e 20 7b  eSetForSession {
1240: 20 73 65 73 73 69 6f 6e 20 66 69 6c 65 4e 61 6d   session fileNam
1250: 65 20 7b 70 61 74 63 68 20 66 61 6c 73 65 7d 20  e {patch false} 
1260: 7d 20 7b 0d 0a 20 20 69 66 20 7b 5b 69 73 4f 62  } {..  if {[isOb
1270: 6a 65 63 74 48 61 6e 64 6c 65 20 24 73 65 73 73  jectHandle $sess
1280: 69 6f 6e 5d 20 26 26 20 24 73 65 73 73 69 6f 6e  ion] && $session
1290: 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e   ne "null"} then
12a0: 20 7b 0d 0a 20 20 20 20 73 65 74 20 73 74 72 65   {..    set stre
12b0: 61 6d 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74  am [object creat
12c0: 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20  e -alias \..    
12d0: 20 20 20 20 53 79 73 74 65 6d 2e 49 4f 2e 46 69      System.IO.Fi
12e0: 6c 65 53 74 72 65 61 6d 20 24 66 69 6c 65 4e 61  leStream $fileNa
12f0: 6d 65 20 43 72 65 61 74 65 20 57 72 69 74 65 5d  me Create Write]
1300: 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 24 70 61 74  ....    if {$pat
1310: 63 68 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ch} then {..    
1320: 20 20 24 73 65 73 73 69 6f 6e 20 2d 61 6c 69 61    $session -alia
1330: 73 20 43 72 65 61 74 65 50 61 74 63 68 53 65 74  s CreatePatchSet
1340: 20 24 73 74 72 65 61 6d 0d 0a 20 20 20 20 7d 20   $stream..    } 
1350: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 24 73  else {..      $s
1360: 65 73 73 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72  ession -alias Cr
1370: 65 61 74 65 43 68 61 6e 67 65 53 65 74 20 24 73  eateChangeSet $s
1380: 74 72 65 61 6d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tream..    }....
1390: 20 20 20 20 24 73 74 72 65 61 6d 20 46 6c 75 73      $stream Flus
13a0: 68 3b 20 24 73 74 72 65 61 6d 20 43 6c 6f 73 65  h; $stream Close
13b0: 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 74  ....    return t
13c0: 72 75 65 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65  rue..  }....  re
13d0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 7d 0d 0a 0d  turn false..}...
13e0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
13f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1430: 0d 0a 0d 0a 70 72 6f 63 20 63 68 61 6e 67 65 53  ....proc changeS
1440: 65 74 46 69 6c 65 54 6f 53 74 72 69 6e 67 20 7b  etFileToString {
1450: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 69 6c 65   connection file
1460: 4e 61 6d 65 20 69 6e 63 6c 75 64 65 56 61 6c 75  Name includeValu
1470: 65 73 20 7d 20 7b 0d 0a 20 20 73 65 74 20 72 65  es } {..  set re
1480: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
1490: 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61   if {[isObjectHa
14a0: 6e 64 6c 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  ndle $connection
14b0: 5d 20 26 26 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  ] && $connection
14c0: 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e   ne "null"} then
14d0: 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 6f 70 65   {..    if {[ope
14e0: 6e 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74  nStreamChangeSet
14f0: 46 6f 72 43 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d  ForConnection \.
1500: 0a 20 20 20 20 20 20 20 20 24 63 6f 6e 6e 65 63  .        $connec
1510: 74 69 6f 6e 20 24 66 69 6c 65 4e 61 6d 65 20 22  tion $fileName "
1520: 22 20 73 74 61 74 65 5d 7d 20 74 68 65 6e 20 7b  " state]} then {
1530: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
1540: 63 68 61 6e 67 65 53 65 74 54 6f 53 74 72 69 6e  changeSetToStrin
1550: 67 20 24 73 74 61 74 65 28 63 68 61 6e 67 65 53  g $state(changeS
1560: 65 74 29 20 24 69 6e 63 6c 75 64 65 56 61 6c 75  et) $includeValu
1570: 65 73 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  es]..    }..  }.
1580: 0a 0d 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73  ...  return $res
1590: 75 6c 74 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23  ult..}....######
15a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f  #########....pro
15f0: 63 20 6d 65 74 61 64 61 74 61 49 74 65 6d 54 6f  c metadataItemTo
1600: 53 74 72 69 6e 67 20 7b 20 69 74 65 6d 20 69 6e  String { item in
1610: 63 6c 75 64 65 56 61 6c 75 65 73 20 7d 20 7b 0d  cludeValues } {.
1620: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
1630: 69 73 74 5d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69  ist]....  if {[i
1640: 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 69  sObjectHandle $i
1650: 74 65 6d 5d 20 26 26 20 24 69 74 65 6d 20 6e 65  tem] && $item ne
1660: 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d   "null"} then {.
1670: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
1680: 75 6c 74 20 54 61 62 6c 65 4e 61 6d 65 20 5b 24  ult TableName [$
1690: 69 74 65 6d 20 54 61 62 6c 65 4e 61 6d 65 5d 0d  item TableName].
16a0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
16b0: 75 6c 74 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75  ult NumberOfColu
16c0: 6d 6e 73 20 5b 24 69 74 65 6d 20 4e 75 6d 62 65  mns [$item Numbe
16d0: 72 4f 66 43 6f 6c 75 6d 6e 73 5d 0d 0a 20 20 20  rOfColumns]..   
16e0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
16f0: 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 5b 24  OperationCode [$
1700: 69 74 65 6d 20 4f 70 65 72 61 74 69 6f 6e 43 6f  item OperationCo
1710: 64 65 5d 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64  de]..    lappend
1720: 20 72 65 73 75 6c 74 20 49 6e 64 69 72 65 63 74   result Indirect
1730: 20 5b 24 69 74 65 6d 20 49 6e 64 69 72 65 63 74   [$item Indirect
1740: 5d 0d 0a 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64  ]....    lappend
1750: 20 72 65 73 75 6c 74 20 50 72 69 6d 61 72 79 4b   result PrimaryK
1760: 65 79 43 6f 6c 75 6d 6e 73 20 5c 0d 0a 20 20 20  eyColumns \..   
1770: 20 20 20 20 20 5b 66 6f 72 44 69 73 70 6c 61 79       [forDisplay
1780: 20 24 69 74 65 6d 20 50 72 69 6d 61 72 79 4b 65   $item PrimaryKe
1790: 79 43 6f 6c 75 6d 6e 73 5d 0d 0a 0d 0a 20 20 20  yColumns]....   
17a0: 20 69 66 20 7b 24 69 6e 63 6c 75 64 65 56 61 6c   if {$includeVal
17b0: 75 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ues} then {..   
17c0: 20 20 20 73 65 74 20 6e 75 6d 62 65 72 4f 66 43     set numberOfC
17d0: 6f 6c 75 6d 6e 73 20 5b 24 69 74 65 6d 20 4e 75  olumns [$item Nu
17e0: 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 5d 0d 0a  mberOfColumns]..
17f0: 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74  ..      for {set
1800: 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65   index 0} {$inde
1810: 78 20 3c 20 24 6e 75 6d 62 65 72 4f 66 43 6f 6c  x < $numberOfCol
1820: 75 6d 6e 73 7d 20 7b 69 6e 63 72 20 69 6e 64 65  umns} {incr inde
1830: 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  x} {..        se
1840: 74 20 6f 6c 64 56 61 6c 75 65 20 5b 24 69 74 65  t oldValue [$ite
1850: 6d 20 47 65 74 4f 6c 64 56 61 6c 75 65 20 24 69  m GetOldValue $i
1860: 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ndex]....       
1870: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
1880: 4f 6c 64 56 61 6c 75 65 20 24 69 6e 64 65 78 20  OldValue $index 
1890: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
18a0: 66 6f 72 44 69 73 70 6c 61 79 20 24 6f 6c 64 56  forDisplay $oldV
18b0: 61 6c 75 65 20 47 65 74 4f 62 6a 65 63 74 5d 0d  alue GetObject].
18c0: 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e  ...        set n
18d0: 65 77 56 61 6c 75 65 20 5b 24 69 74 65 6d 20 47  ewValue [$item G
18e0: 65 74 4e 65 77 56 61 6c 75 65 20 24 69 6e 64 65  etNewValue $inde
18f0: 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61  x]....        la
1900: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 4e 65 77  ppend result New
1910: 56 61 6c 75 65 20 24 69 6e 64 65 78 20 5c 0d 0a  Value $index \..
1920: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72              [for
1930: 44 69 73 70 6c 61 79 20 24 6e 65 77 56 61 6c 75  Display $newValu
1940: 65 20 47 65 74 4f 62 6a 65 63 74 5d 0d 0a 0d 0a  e GetObject]....
1950: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66          set conf
1960: 6c 69 63 74 56 61 6c 75 65 20 5b 24 69 74 65 6d  lictValue [$item
1970: 20 47 65 74 43 6f 6e 66 6c 69 63 74 56 61 6c 75   GetConflictValu
1980: 65 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20  e $index]....   
1990: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
19a0: 75 6c 74 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75  ult ConflictValu
19b0: 65 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20  e $index \..    
19c0: 20 20 20 20 20 20 20 20 5b 66 6f 72 44 69 73 70          [forDisp
19d0: 6c 61 79 20 24 63 6f 6e 66 6c 69 63 74 56 61 6c  lay $conflictVal
19e0: 75 65 20 47 65 74 4f 62 6a 65 63 74 5d 0d 0a 20  ue GetObject].. 
19f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
1a00: 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 24   }....  return $
1a10: 72 65 73 75 6c 74 0d 0a 7d 0d 0a 0d 0a 23 23 23  result..}....###
1a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a60: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1a70: 70 72 6f 63 20 63 68 61 6e 67 65 53 65 74 54 6f  proc changeSetTo
1a80: 53 74 72 69 6e 67 20 7b 20 63 68 61 6e 67 65 53  String { changeS
1a90: 65 74 20 69 6e 63 6c 75 64 65 56 61 6c 75 65 73  et includeValues
1aa0: 20 7d 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75   } {..  set resu
1ab0: 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 69  lt [list]....  i
1ac0: 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64  f {[isObjectHand
1ad0: 6c 65 20 24 63 68 61 6e 67 65 53 65 74 5d 20 26  le $changeSet] &
1ae0: 26 20 24 63 68 61 6e 67 65 53 65 74 20 6e 65 20  & $changeSet ne 
1af0: 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a  "null"} then {..
1b00: 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
1b10: 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24  ch -alias item $
1b20: 63 68 61 6e 67 65 53 65 74 20 7b 0d 0a 20 20 20  changeSet {..   
1b30: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
1b40: 74 20 5b 6d 65 74 61 64 61 74 61 49 74 65 6d 54  t [metadataItemT
1b50: 6f 53 74 72 69 6e 67 20 24 69 74 65 6d 20 24 69  oString $item $i
1b60: 6e 63 6c 75 64 65 56 61 6c 75 65 73 5d 0d 0a 20  ncludeValues].. 
1b70: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72     }..  }....  r
1b80: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 7d  eturn $result..}
1b90: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
1ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be0: 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 6d 61 74 63  ###....proc matc
1bf0: 68 53 65 73 73 69 6f 6e 20 7b 20 63 6f 6e 6e 65  hSession { conne
1c00: 63 74 69 6f 6e 20 73 65 73 73 69 6f 6e 20 65 78  ction session ex
1c10: 70 72 20 7d 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  pr } {..  if {[i
1c20: 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 73  sObjectHandle $s
1c30: 65 73 73 69 6f 6e 5d 20 26 26 20 24 73 65 73 73  ession] && $sess
1c40: 69 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74  ion ne "null"} t
1c50: 68 65 6e 20 7b 0d 0a 20 20 20 20 69 66 20 7b 21  hen {..    if {!
1c60: 5b 24 73 65 73 73 69 6f 6e 20 49 73 45 6d 70 74  [$session IsEmpt
1c70: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..    
1c80: 20 20 73 65 74 20 72 61 77 44 61 74 61 20 5b 63    set rawData [c
1c90: 72 65 61 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  reateMemoryChang
1ca0: 65 53 65 74 46 6f 72 53 65 73 73 69 6f 6e 20 24  eSetForSession $
1cb0: 73 65 73 73 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20  session]....    
1cc0: 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48    if {[isObjectH
1cd0: 61 6e 64 6c 65 20 24 72 61 77 44 61 74 61 5d 20  andle $rawData] 
1ce0: 26 26 20 24 72 61 77 44 61 74 61 20 6e 65 20 22  && $rawData ne "
1cf0: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {.. 
1d00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6d         return [m
1d10: 61 74 63 68 43 68 61 6e 67 65 53 65 74 20 5b 73  atchChangeSet [s
1d20: 65 74 20 63 68 61 6e 67 65 53 65 74 20 5c 0d 0a  et changeSet \..
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 63 6f              [$co
1d40: 6e 6e 65 63 74 69 6f 6e 20 2d 61 6c 69 61 73 20  nnection -alias 
1d50: 43 72 65 61 74 65 43 68 61 6e 67 65 53 65 74 20  CreateChangeSet 
1d60: 24 72 61 77 44 61 74 61 5d 5d 20 24 65 78 70 72  $rawData]] $expr
1d70: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..    
1d80: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75  }..  }....  retu
1d90: 72 6e 20 66 61 6c 73 65 0d 0a 7d 0d 0a 0d 0a 23  rn false..}....#
1da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1df0: 0d 0a 70 72 6f 63 20 6d 61 74 63 68 43 68 61 6e  ..proc matchChan
1e00: 67 65 53 65 74 20 7b 20 63 68 61 6e 67 65 53 65  geSet { changeSe
1e10: 74 20 65 78 70 72 20 7d 20 7b 0d 0a 20 20 69 66  t expr } {..  if
1e20: 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c   {[isObjectHandl
1e30: 65 20 24 63 68 61 6e 67 65 53 65 74 5d 20 26 26  e $changeSet] &&
1e40: 20 24 63 68 61 6e 67 65 53 65 74 20 6e 65 20 22   $changeSet ne "
1e50: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {.. 
1e60: 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
1e70: 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 63  h -alias item $c
1e80: 68 61 6e 67 65 53 65 74 20 7b 0d 0a 20 20 20 20  hangeSet {..    
1e90: 20 20 69 66 20 7b 5b 65 78 70 72 20 24 65 78 70    if {[expr $exp
1ea0: 72 5d 7d 20 74 68 65 6e 20 7b 72 65 74 75 72 6e  r]} then {return
1eb0: 20 74 72 75 65 7d 0d 0a 20 20 20 20 7d 0d 0a 20   true}..    }.. 
1ec0: 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 66   }....  return f
1ed0: 61 6c 73 65 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23  alse..}....#####
1ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f20: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72  ##########....pr
1f30: 6f 63 20 63 72 65 61 74 65 54 68 65 53 63 68 65  oc createTheSche
1f40: 6d 61 20 7b 20 64 62 20 64 61 74 61 62 61 73 65  ma { db database
1f50: 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 73 71 6c 20  Name } {..  sql 
1f60: 65 78 65 63 75 74 65 20 24 64 62 20 5b 73 75 62  execute $db [sub
1f70: 73 74 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45  st {..    CREATE
1f80: 20 54 41 42 4c 45 20 24 7b 64 61 74 61 62 61 73   TABLE ${databas
1f90: 65 4e 61 6d 65 7d 2e 74 31 28 78 20 49 4e 54 45  eName}.t1(x INTE
1fa0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
1fb0: 20 79 20 54 45 58 54 29 3b 0d 0a 20 20 20 20 43   y TEXT);..    C
1fc0: 52 45 41 54 45 20 54 41 42 4c 45 20 24 7b 64 61  REATE TABLE ${da
1fd0: 74 61 62 61 73 65 4e 61 6d 65 7d 2e 74 32 28 78  tabaseName}.t2(x
1fe0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1ff0: 20 4b 45 59 2c 20 79 20 54 45 58 54 29 3b 0d 0a   KEY, y TEXT);..
2000: 20 20 7d 5d 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23    }]..}....#####
2010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2050: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72  ##########....pr
2060: 6f 63 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67  oc makeSomeChang
2070: 65 73 20 7b 20 64 62 20 74 61 62 6c 65 20 74 79  es { db table ty
2080: 70 65 73 20 7b 72 6f 77 49 64 20 22 22 7d 20 7b  pes {rowId ""} {
2090: 63 6f 75 6e 74 20 35 7d 20 7d 20 7b 0d 0a 20 20  count 5} } {..  
20a0: 66 6f 72 65 61 63 68 20 74 79 70 65 20 24 74 79  foreach type $ty
20b0: 70 65 73 20 7b 0d 0a 20 20 20 20 73 77 69 74 63  pes {..    switc
20c0: 68 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 24 74 79  h -nocase -- $ty
20d0: 70 65 20 7b 0d 0a 20 20 20 20 20 20 69 6e 73 65  pe {..      inse
20e0: 72 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  rt {..        se
20f0: 74 20 74 65 78 74 20 5b 61 70 70 65 6e 64 41 72  t text [appendAr
2100: 67 73 20 22 69 6e 73 65 72 74 65 64 3a 20 22 20  gs "inserted: " 
2110: 5b 67 65 74 53 6f 6d 65 54 65 78 74 20 66 61 6c  [getSomeText fal
2120: 73 65 20 24 63 6f 75 6e 74 5d 5d 0d 0a 0d 0a 20  se $count]].... 
2130: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
2140: 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73  ng is integer -s
2150: 74 72 69 63 74 20 24 72 6f 77 49 64 5d 7d 20 74  trict $rowId]} t
2160: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
2170: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
2180: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 20   [subst {..     
2190: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
21a0: 54 4f 20 24 7b 74 61 62 6c 65 7d 28 78 2c 20 79  TO ${table}(x, y
21b0: 29 20 56 41 4c 55 45 53 28 3f 2c 20 3f 29 3b 0d  ) VALUES(?, ?);.
21c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 5d 20 5b 6c  .          }] [l
21d0: 69 73 74 20 70 61 72 61 6d 31 20 49 6e 74 33 32  ist param1 Int32
21e0: 20 24 72 6f 77 49 64 5d 20 5b 6c 69 73 74 20 70   $rowId] [list p
21f0: 61 72 61 6d 32 20 53 74 72 69 6e 67 20 24 74 65  aram2 String $te
2200: 78 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  xt]..        } e
2210: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
2220: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
2230: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 20   [subst {..     
2240: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
2250: 54 4f 20 24 7b 74 61 62 6c 65 7d 28 79 29 20 56  TO ${table}(y) V
2260: 41 4c 55 45 53 28 3f 29 3b 0d 0a 20 20 20 20 20  ALUES(?);..     
2270: 20 20 20 20 20 7d 5d 20 5b 6c 69 73 74 20 70 61       }] [list pa
2280: 72 61 6d 31 20 53 74 72 69 6e 67 20 24 74 65 78  ram1 String $tex
2290: 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t]..        }.. 
22a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 75 70       }..      up
22b0: 64 61 74 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  date {..        
22c0: 73 65 74 20 74 65 78 74 20 5b 61 70 70 65 6e 64  set text [append
22d0: 41 72 67 73 20 22 75 70 64 61 74 65 64 3a 20 22  Args "updated: "
22e0: 20 5b 67 65 74 53 6f 6d 65 54 65 78 74 20 66 61   [getSomeText fa
22f0: 6c 73 65 20 24 63 6f 75 6e 74 5d 5d 0d 0a 0d 0a  lse $count]]....
2300: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
2310: 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d  ing is integer -
2320: 73 74 72 69 63 74 20 24 72 6f 77 49 64 5d 7d 20  strict $rowId]} 
2330: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
2340: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
2350: 62 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  b [subst {..    
2360: 20 20 20 20 20 20 20 20 55 50 44 41 54 45 20 24          UPDATE $
2370: 7b 74 61 62 6c 65 7d 20 53 45 54 20 79 20 3d 20  {table} SET y = 
2380: 3f 20 57 48 45 52 45 20 78 20 3d 20 3f 3b 0d 0a  ? WHERE x = ?;..
2390: 20 20 20 20 20 20 20 20 20 20 7d 5d 20 5b 6c 69            }] [li
23a0: 73 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67  st param1 String
23b0: 20 24 74 65 78 74 5d 20 5b 6c 69 73 74 20 70 61   $text] [list pa
23c0: 72 61 6d 32 20 49 6e 74 33 32 20 24 72 6f 77 49  ram2 Int32 $rowI
23d0: 64 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  d]..        } el
23e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..          
23f0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
2400: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 20 20  [subst {..      
2410: 20 20 20 20 20 20 55 50 44 41 54 45 20 24 7b 74        UPDATE ${t
2420: 61 62 6c 65 7d 20 53 45 54 20 79 20 3d 20 3f 20  able} SET y = ? 
2430: 57 48 45 52 45 20 78 20 4e 4f 54 20 49 4e 20 28  WHERE x NOT IN (
2440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2450: 28 53 45 4c 45 43 54 20 4d 49 4e 28 78 29 20 46  (SELECT MIN(x) F
2460: 52 4f 4d 20 24 7b 74 61 62 6c 65 7d 29 2c 20 28  ROM ${table}), (
2470: 53 45 4c 45 43 54 20 4d 41 58 28 78 29 20 46 52  SELECT MAX(x) FR
2480: 4f 4d 20 24 7b 74 61 62 6c 65 7d 29 0d 0a 20 20  OM ${table})..  
2490: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20 20            );..  
24a0: 20 20 20 20 20 20 20 20 7d 5d 20 5b 6c 69 73 74          }] [list
24b0: 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24   param1 String $
24c0: 74 65 78 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d  text]..        }
24d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
24e0: 20 64 65 6c 65 74 65 20 7b 0d 0a 20 20 20 20 20   delete {..     
24f0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69     if {[string i
2500: 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63  s integer -stric
2510: 74 20 24 72 6f 77 49 64 5d 7d 20 74 68 65 6e 20  t $rowId]} then 
2520: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  {..          sql
2530: 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 73 75   execute $db [su
2540: 62 73 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  bst {..         
2550: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 24     DELETE FROM $
2560: 7b 74 61 62 6c 65 7d 20 57 48 45 52 45 20 78 20  {table} WHERE x 
2570: 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = ?;..          
2580: 7d 5d 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20  }] [list param1 
2590: 49 6e 74 33 32 20 24 72 6f 77 49 64 5d 0d 0a 20  Int32 $rowId].. 
25a0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
25b0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 65  .          sql e
25c0: 78 65 63 75 74 65 20 24 64 62 20 5b 73 75 62 73  xecute $db [subs
25d0: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t {..           
25e0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 24 7b 74   DELETE FROM ${t
25f0: 61 62 6c 65 7d 20 57 48 45 52 45 20 78 20 3d 20  able} WHERE x = 
2600: 28 53 45 4c 45 43 54 20 4d 49 4e 28 78 29 20 46  (SELECT MIN(x) F
2610: 52 4f 4d 20 24 7b 74 61 62 6c 65 7d 29 3b 0d 0a  ROM ${table});..
2620: 20 20 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20            }]..  
2630: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
2640: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 0d  ..    }..  }..}.
2650: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
2660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26a0: 23 23 0d 0a 0d 0a 70 72 6f 63 20 63 61 70 74 75  ##....proc captu
26b0: 72 65 43 68 61 6e 67 65 53 65 74 52 61 77 44 61  reChangeSetRawDa
26c0: 74 61 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ta { connection 
26d0: 64 61 74 61 62 61 73 65 4e 61 6d 65 20 74 61 62  databaseName tab
26e0: 6c 65 4e 61 6d 65 20 73 63 72 69 70 74 20 7d 20  leName script } 
26f0: 7b 0d 0a 20 20 69 66 20 7b 21 5b 69 73 4f 62 6a  {..  if {![isObj
2700: 65 63 74 48 61 6e 64 6c 65 20 24 63 6f 6e 6e 65  ectHandle $conne
2710: 63 74 69 6f 6e 5d 20 7c 7c 20 24 63 6f 6e 6e 65  ction] || $conne
2720: 63 74 69 6f 6e 20 65 71 20 22 6e 75 6c 6c 22 7d  ction eq "null"}
2730: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72   then {..    err
2740: 6f 72 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  or "connection i
2750: 73 20 69 6e 76 61 6c 69 64 22 0d 0a 20 20 7d 0d  s invalid"..  }.
2760: 0a 0d 0a 20 20 73 65 74 20 73 65 73 73 69 6f 6e  ...  set session
2770: 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 61   [$connection -a
2780: 6c 69 61 73 20 43 72 65 61 74 65 53 65 73 73 69  lias CreateSessi
2790: 6f 6e 20 24 64 61 74 61 62 61 73 65 4e 61 6d 65  on $databaseName
27a0: 5d 0d 0a 20 20 24 73 65 73 73 69 6f 6e 20 41 74  ]..  $session At
27b0: 74 61 63 68 54 61 62 6c 65 20 24 74 61 62 6c 65  tachTable $table
27c0: 4e 61 6d 65 0d 0a 0d 0a 20 20 69 66 20 7b 21 5b  Name....  if {![
27d0: 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  isObjectHandle $
27e0: 73 65 73 73 69 6f 6e 5d 20 7c 7c 20 24 73 65 73  session] || $ses
27f0: 73 69 6f 6e 20 65 71 20 22 6e 75 6c 6c 22 7d 20  sion eq "null"} 
2800: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f  then {..    erro
2810: 72 20 22 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  r "cannot create
2820: 20 73 65 73 73 69 6f 6e 22 0d 0a 20 20 7d 0d 0a   session"..  }..
2830: 0d 0a 20 20 63 61 74 63 68 20 7b 75 70 6c 65 76  ..  catch {uplev
2840: 65 6c 20 31 20 24 73 63 72 69 70 74 7d 0d 0a 20  el 1 $script}.. 
2850: 20 72 65 74 75 72 6e 20 5b 63 72 65 61 74 65 4d   return [createM
2860: 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 46 6f  emoryChangeSetFo
2870: 72 53 65 73 73 69 6f 6e 20 24 73 65 73 73 69 6f  rSession $sessio
2880: 6e 5d 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  n]..}....#######
2890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28d0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63  ########....proc
28e0: 20 63 61 70 74 75 72 65 43 68 61 6e 67 65 53 65   captureChangeSe
28f0: 74 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20  tFile {..       
2900: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 61 74 61   connection data
2910: 62 61 73 65 4e 61 6d 65 20 74 61 62 6c 65 4e 61  baseName tableNa
2920: 6d 65 20 73 63 72 69 70 74 20 66 69 6c 65 4e 61  me script fileNa
2930: 6d 65 20 7d 20 7b 0d 0a 20 20 69 66 20 7b 21 5b  me } {..  if {![
2940: 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  isObjectHandle $
2950: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 7c 7c 20 24  connection] || $
2960: 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 71 20 22 6e  connection eq "n
2970: 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ull"} then {..  
2980: 20 20 65 72 72 6f 72 20 22 63 6f 6e 6e 65 63 74    error "connect
2990: 69 6f 6e 20 69 73 20 69 6e 76 61 6c 69 64 22 0d  ion is invalid".
29a0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 65  .  }....  set se
29b0: 73 73 69 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74 69  ssion [$connecti
29c0: 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61 74 65  on -alias Create
29d0: 53 65 73 73 69 6f 6e 20 24 64 61 74 61 62 61 73  Session $databas
29e0: 65 4e 61 6d 65 5d 0d 0a 20 20 24 73 65 73 73 69  eName]..  $sessi
29f0: 6f 6e 20 41 74 74 61 63 68 54 61 62 6c 65 20 24  on AttachTable $
2a00: 74 61 62 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 69  tableName....  i
2a10: 66 20 7b 21 5b 69 73 4f 62 6a 65 63 74 48 61 6e  f {![isObjectHan
2a20: 64 6c 65 20 24 73 65 73 73 69 6f 6e 5d 20 7c 7c  dle $session] ||
2a30: 20 24 73 65 73 73 69 6f 6e 20 65 71 20 22 6e 75   $session eq "nu
2a40: 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ll"} then {..   
2a50: 20 65 72 72 6f 72 20 22 63 61 6e 6e 6f 74 20 63   error "cannot c
2a60: 72 65 61 74 65 20 73 65 73 73 69 6f 6e 22 0d 0a  reate session"..
2a70: 20 20 7d 0d 0a 0d 0a 20 20 63 61 74 63 68 20 7b    }....  catch {
2a80: 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70  uplevel 1 $scrip
2a90: 74 7d 0d 0a 20 20 77 72 69 74 65 53 74 72 65 61  t}..  writeStrea
2aa0: 6d 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73  mChangeSetForSes
2ab0: 73 69 6f 6e 20 24 73 65 73 73 69 6f 6e 20 24 66  sion $session $f
2ac0: 69 6c 65 4e 61 6d 65 0d 0a 7d 0d 0a 0d 0a 23 23  ileName..}....##
2ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
2b20: 0a 70 72 6f 63 20 67 65 74 43 68 61 6e 67 65 53  .proc getChangeS
2b30: 65 74 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 73 75  etFileName { {su
2b40: 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  ffix ""} } {..  
2b50: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69  return [file joi
2b60: 6e 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74 54  n \..      [getT
2b70: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72  emporaryDirector
2b80: 79 5d 20 5b 61 70 70 65 6e 64 41 72 67 73 20 63  y] [appendArgs c
2b90: 68 61 6e 67 65 73 20 24 73 75 66 66 69 78 20 2e  hanges $suffix .
2ba0: 62 69 6e 5d 5d 0d 0a 7d 0d 0a 0d 0a 23 23 23 23  bin]]..}....####
2bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bf0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70  ###########....p
2c00: 72 6f 63 20 61 72 72 61 79 54 6f 4c 69 73 74 20  roc arrayToList 
2c10: 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20  { varName } {.. 
2c20: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
2c30: 74 5d 0d 0a 0d 0a 20 20 75 70 76 61 72 20 31 20  t]....  upvar 1 
2c40: 24 76 61 72 4e 61 6d 65 20 61 72 72 61 79 0d 0a  $varName array..
2c50: 0d 0a 20 20 69 66 20 7b 5b 61 72 72 61 79 20 65  ..  if {[array e
2c60: 78 69 73 74 73 20 61 72 72 61 79 5d 7d 20 74 68  xists array]} th
2c70: 65 6e 20 7b 0d 0a 20 20 20 20 66 6f 72 65 61 63  en {..    foreac
2c80: 68 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 2d 69  h name [lsort -i
2c90: 6e 74 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61  nteger [array na
2ca0: 6d 65 73 20 61 72 72 61 79 5d 5d 20 7b 0d 0a 20  mes array]] {.. 
2cb0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
2cc0: 75 6c 74 20 24 61 72 72 61 79 28 24 6e 61 6d 65  ult $array($name
2cd0: 29 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  )..    }..  }...
2ce0: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c  .  return $resul
2cf0: 74 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  t..}....########
2d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d40: 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20  #######....proc 
2d50: 63 72 65 61 74 65 42 79 74 65 41 72 72 61 79 20  createByteArray 
2d60: 7b 20 6c 69 73 74 20 7d 20 7b 0d 0a 20 20 73 65  { list } {..  se
2d70: 74 20 6c 65 6e 67 74 68 20 5b 6c 6c 65 6e 67 74  t length [llengt
2d80: 68 20 24 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 65  h $list]....  se
2d90: 74 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74  t result [object
2da0: 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
2db0: 0d 0a 20 20 20 20 20 20 2d 6f 62 6a 65 63 74 66  ..      -objectf
2dc0: 6c 61 67 73 20 2b 4e 6f 52 65 74 75 72 6e 52 65  lags +NoReturnRe
2dd0: 66 65 72 65 6e 63 65 20 53 79 73 74 65 6d 2e 42  ference System.B
2de0: 79 74 65 5c 5b 5c 5d 20 24 6c 65 6e 67 74 68 5d  yte\[\] $length]
2df0: 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  ....  for {set i
2e00: 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20  ndex 0} {$index 
2e10: 3c 20 24 6c 65 6e 67 74 68 7d 20 7b 69 6e 63 72  < $length} {incr
2e20: 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 73   index} {..    s
2e30: 65 74 20 65 6c 65 6d 65 6e 74 20 5b 6c 69 6e 64  et element [lind
2e40: 65 78 20 24 6c 69 73 74 20 24 69 6e 64 65 78 5d  ex $list $index]
2e50: 0d 0a 20 20 20 20 73 65 74 20 76 61 6c 75 65 20  ..    set value 
2e60: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
2e70: 63 72 65 61 74 65 20 42 79 74 65 20 50 61 72 73  create Byte Pars
2e80: 65 20 24 65 6c 65 6d 65 6e 74 5d 0d 0a 20 20 20  e $element]..   
2e90: 20 24 72 65 73 75 6c 74 20 53 65 74 56 61 6c 75   $result SetValu
2ea0: 65 20 24 76 61 6c 75 65 20 24 69 6e 64 65 78 0d  e $value $index.
2eb0: 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
2ec0: 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 20 72   NOTE: Prevent r
2ed0: 65 74 75 72 6e 69 6e 67 2c 20 77 68 69 63 68 20  eturning, which 
2ee0: 75 6e 73 65 74 73 20 61 6c 6c 20 6c 6f 63 61 6c  unsets all local
2ef0: 20 76 61 72 69 61 62 6c 65 73 2c 0d 0a 20 20 23   variables,..  #
2f00: 20 20 20 20 20 20 20 66 72 6f 6d 20 63 61 75 73         from caus
2f10: 69 6e 67 20 74 68 65 20 62 79 74 65 20 61 72 72  ing the byte arr
2f20: 61 79 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20  ay object to be 
2f30: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 23 0d 0a  disposed...  #..
2f40: 20 20 6f 62 6a 65 63 74 20 61 64 64 72 65 66 20    object addref 
2f50: 24 72 65 73 75 6c 74 3b 20 6f 62 6a 65 63 74 20  $result; object 
2f60: 61 64 64 72 65 66 20 24 72 65 73 75 6c 74 3b 20  addref $result; 
2f70: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result..
2f80: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
2f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2fd0: 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 74 61 62  ####....proc tab
2fe0: 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b  leFilterCallback
2ff0: 54 31 20 7b 20 63 6c 69 65 6e 74 44 61 74 61 20  T1 { clientData 
3000: 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 6c 61 70 70  name } {..  lapp
3010: 65 6e 64 20 3a 3a 63 61 6c 6c 62 61 63 6b 52 65  end ::callbackRe
3020: 73 75 6c 74 73 20 5b 6f 62 6a 65 63 74 20 69 6e  sults [object in
3030: 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 5c 0d 0a  voke -create \..
3040: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 42 6f 6f        System.Boo
3050: 6c 65 61 6e 20 50 61 72 73 65 20 5b 65 78 70 72  lean Parse [expr
3060: 20 7b 5b 24 6e 61 6d 65 20 54 6f 53 74 72 69 6e   {[$name ToStrin
3070: 67 5d 20 69 6e 20 5b 6c 69 73 74 20 74 31 5d 7d  g] in [list t1]}
3080: 5d 5d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 5b  ]]....  return [
3090: 6c 69 6e 64 65 78 20 24 3a 3a 63 61 6c 6c 62 61  lindex $::callba
30a0: 63 6b 52 65 73 75 6c 74 73 20 65 6e 64 5d 0d 0a  ckResults end]..
30b0: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
30c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
30f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3100: 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 63 6f 6e  ####....proc con
3110: 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 20 7b 20  flictCallback { 
3120: 63 6c 69 65 6e 74 44 61 74 61 20 74 79 70 65 20  clientData type 
3130: 69 74 65 6d 20 7d 20 7b 0d 0a 20 20 73 65 74 20  item } {..  set 
3140: 72 65 73 75 6c 74 20 41 62 6f 72 74 0d 0a 0d 0a  result Abort....
3150: 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48    if {[isObjectH
3160: 61 6e 64 6c 65 20 24 69 74 65 6d 5d 20 26 26 20  andle $item] && 
3170: 24 69 74 65 6d 20 6e 65 20 22 6e 75 6c 6c 22 7d  $item ne "null"}
3180: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74   then {..    set
3190: 20 72 65 73 75 6c 74 20 4f 6d 69 74 0d 0a 0d 0a   result Omit....
31a0: 20 20 20 20 69 66 20 7b 5b 24 69 74 65 6d 20 4f      if {[$item O
31b0: 70 65 72 61 74 69 6f 6e 43 6f 64 65 5d 20 6e 65  perationCode] ne
31c0: 20 22 44 65 6c 65 74 65 22 7d 20 74 68 65 6e 20   "Delete"} then 
31d0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73  {..      if {[is
31e0: 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 74 79  ObjectHandle $ty
31f0: 70 65 5d 20 26 26 20 24 74 79 70 65 20 6e 65 20  pe] && $type ne 
3200: 22 6e 75 6c 6c 22 20 26 26 20 5c 0d 0a 20 20 20  "null" && \..   
3210: 20 20 20 20 20 20 20 5b 24 74 79 70 65 20 54 6f         [$type To
3220: 53 74 72 69 6e 67 5d 20 69 6e 20 5b 6c 69 73 74  String] in [list
3230: 20 44 61 74 61 20 43 6f 6e 66 6c 69 63 74 5d 7d   Data Conflict]}
3240: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
3250: 20 73 65 74 20 72 65 73 75 6c 74 20 52 65 70 6c   set result Repl
3260: 61 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ace..      }..  
3270: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 6c 61    }..  }....  la
3280: 70 70 65 6e 64 20 3a 3a 63 61 6c 6c 62 61 63 6b  ppend ::callback
3290: 52 65 73 75 6c 74 73 20 5b 6f 62 6a 65 63 74 20  Results [object 
32a0: 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 45  invoke -create E
32b0: 6e 75 6d 20 50 61 72 73 65 20 5c 0d 0a 20 20 20  num Parse \..   
32c0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
32d0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 68 61 6e  QLite.SQLiteChan
32e0: 67 65 53 65 74 43 6f 6e 66 6c 69 63 74 52 65 73  geSetConflictRes
32f0: 75 6c 74 20 24 72 65 73 75 6c 74 20 66 61 6c 73  ult $result fals
3300: 65 5d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e 20 5b  e]....  return [
3310: 6c 69 6e 64 65 78 20 24 3a 3a 63 61 6c 6c 62 61  lindex $::callba
3320: 63 6b 52 65 73 75 6c 74 73 20 65 6e 64 5d 0d 0a  ckResults end]..
3330: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
3340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3380: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
3390: 7b 74 65 73 74 20 73 65 73 73 69 6f 6e 2d 31 2e  {test session-1.
33a0: 31 20 7b 62 61 73 69 63 20 65 78 74 65 6e 73 69  1 {basic extensi
33b0: 6f 6e 20 75 73 61 67 65 7d 20 2d 73 65 74 75 70  on usage} -setup
33c0: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
33d0: 65 74 20 66 69 6c 65 4e 61 6d 65 28 30 29 20 73  et fileName(0) s
33e0: 65 73 73 69 6f 6e 2d 31 2e 31 2e 64 62 5d 0d 0a  ession-1.1.db]..
33f0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
3400: 28 31 29 20 5b 67 65 74 43 68 61 6e 67 65 53 65  (1) [getChangeSe
3410: 74 46 69 6c 65 4e 61 6d 65 20 31 5d 0d 0a 20 20  tFileName 1]..  
3420: 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 20  set fileName(2) 
3430: 5b 67 65 74 43 68 61 6e 67 65 53 65 74 46 69 6c  [getChangeSetFil
3440: 65 4e 61 6d 65 20 32 5d 0d 0a 0d 0a 20 20 63 6c  eName 2]....  cl
3450: 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a 7d  eanupSomeText..}
3460: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 63 72 65 61   -body {..  crea
3470: 74 65 54 68 65 53 63 68 65 6d 61 20 24 64 62 20  teTheSchema $db 
3480: 6d 61 69 6e 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65  main..  makeSome
3490: 43 68 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b  Changes $db t1 [
34a0: 6c 69 73 74 20 69 6e 73 65 72 74 20 69 6e 73 65  list insert inse
34b0: 72 74 5d 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e  rt]....  set con
34c0: 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f  nection [getDbCo
34d0: 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73  nnection]....  s
34e0: 65 74 20 73 65 73 73 69 6f 6e 20 5b 24 63 6f 6e  et session [$con
34f0: 6e 65 63 74 69 6f 6e 20 2d 61 6c 69 61 73 20 43  nection -alias C
3500: 72 65 61 74 65 53 65 73 73 69 6f 6e 20 6d 61 69  reateSession mai
3510: 6e 5d 0d 0a 20 20 24 73 65 73 73 69 6f 6e 20 41  n]..  $session A
3520: 74 74 61 63 68 54 61 62 6c 65 20 6e 75 6c 6c 0d  ttachTable null.
3530: 0a 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61  ...  makeSomeCha
3540: 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c 69 73  nges $db t1 [lis
3550: 74 20 69 6e 73 65 72 74 20 75 70 64 61 74 65 20  t insert update 
3560: 64 65 6c 65 74 65 5d 0d 0a 0d 0a 20 20 73 65 74  delete]....  set
3570: 20 72 61 77 44 61 74 61 20 5b 63 72 65 61 74 65   rawData [create
3580: 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 46  MemoryChangeSetF
3590: 6f 72 53 65 73 73 69 6f 6e 20 24 73 65 73 73 69  orSession $sessi
35a0: 6f 6e 5d 0d 0a 0d 0a 64 65 62 75 67 20 62 72 65  on]....debug bre
35b0: 61 6b 0d 0a 0d 0a 20 20 77 72 69 74 65 52 61 77  ak....  writeRaw
35c0: 44 61 74 61 54 6f 46 69 6c 65 20 24 66 69 6c 65  DataToFile $file
35d0: 4e 61 6d 65 28 31 29 20 24 72 61 77 44 61 74 61  Name(1) $rawData
35e0: 0d 0a 20 20 77 72 69 74 65 53 74 72 65 61 6d 43  ..  writeStreamC
35f0: 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69  hangeSetForSessi
3600: 6f 6e 20 24 73 65 73 73 69 6f 6e 20 24 66 69 6c  on $session $fil
3610: 65 4e 61 6d 65 28 32 29 0d 0a 20 20 6f 70 65 6e  eName(2)..  open
3620: 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 46  StreamChangeSetF
3630: 6f 72 43 6f 6e 6e 65 63 74 69 6f 6e 20 24 63 6f  orConnection $co
3640: 6e 6e 65 63 74 69 6f 6e 20 24 66 69 6c 65 4e 61  nnection $fileNa
3650: 6d 65 28 32 29 20 22 22 20 73 74 61 74 65 0d 0a  me(2) "" state..
3660: 0d 0a 20 20 6c 69 73 74 20 5b 65 78 70 72 20 7b  ..  list [expr {
3670: 5b 66 69 6c 65 20 73 69 7a 65 20 24 66 69 6c 65  [file size $file
3680: 4e 61 6d 65 28 31 29 5d 20 3e 20 30 7d 5d 20 5c  Name(1)] > 0}] \
3690: 0d 0a 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20  ..      [string 
36a0: 65 71 75 61 6c 20 5b 72 65 61 64 46 69 6c 65 20  equal [readFile 
36b0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 20 5b 72  $fileName(1)] [r
36c0: 65 61 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  eadFile $fileNam
36d0: 65 28 32 29 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  e(2)]] \..      
36e0: 5b 63 68 61 6e 67 65 53 65 74 54 6f 53 74 72 69  [changeSetToStri
36f0: 6e 67 20 24 73 74 61 74 65 28 63 68 61 6e 67 65  ng $state(change
3700: 53 65 74 29 20 74 72 75 65 5d 0d 0a 7d 20 2d 63  Set) true]..} -c
3710: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
3720: 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a 0d 0a 20  nupSomeText.... 
3730: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
3740: 69 6e 20 73 74 61 74 65 20 72 61 77 44 61 74 61  in state rawData
3750: 20 62 79 74 65 41 72 72 61 79 20 73 65 73 73 69   byteArray sessi
3760: 6f 6e 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f  on....  freeDbCo
3770: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e  nnection....  un
3780: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3790: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  connection....  
37a0: 63 6c 65 61 6e 75 70 46 69 6c 65 20 24 66 69 6c  cleanupFile $fil
37b0: 65 4e 61 6d 65 28 32 29 0d 0a 20 20 63 6c 65 61  eName(2)..  clea
37c0: 6e 75 70 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  nupFile $fileNam
37d0: 65 28 31 29 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  e(1)....  cleanu
37e0: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 28 30 29  pDb $fileName(0)
37f0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
3800: 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e  omplain db fileN
3810: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
3820: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
3830: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
3840: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
3850: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
3860: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
3870: 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49  a.SQLite SQLiteI
3880: 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43  nterop\..defineC
3890: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
38a0: 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
38b0: 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e  OP_SESSION_EXTEN
38c0: 53 49 4f 4e 7d 20 2d 72 65 73 75 6c 74 20 7b 54  SION} -result {T
38d0: 72 75 65 20 54 72 75 65 5c 0d 0a 7b 7b 54 61 62  rue True\..{{Tab
38e0: 6c 65 4e 61 6d 65 20 74 31 20 4e 75 6d 62 65 72  leName t1 Number
38f0: 4f 66 43 6f 6c 75 6d 6e 73 20 32 20 4f 70 65 72  OfColumns 2 Oper
3900: 61 74 69 6f 6e 43 6f 64 65 20 44 65 6c 65 74 65  ationCode Delete
3910: 20 49 6e 64 69 72 65 63 74 20 46 61 6c 73 65 5c   Indirect False\
3920: 0d 0a 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75  ..PrimaryKeyColu
3930: 6d 6e 73 20 7b 5b 54 72 75 65 2c 20 46 61 6c 73  mns {[True, Fals
3940: 65 5d 7d 20 4f 6c 64 56 61 6c 75 65 20 30 20 31  e]} OldValue 0 1
3950: 20 4e 65 77 56 61 6c 75 65 20 30 20 3c 6e 75 6c   NewValue 0 <nul
3960: 6c 4f 62 6a 65 63 74 3e 5c 0d 0a 43 6f 6e 66 6c  lObject>\..Confl
3970: 69 63 74 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c  ictValue 0 <null
3980: 4f 62 6a 65 63 74 3e 20 4f 6c 64 56 61 6c 75 65  Object> OldValue
3990: 20 31 20 7b 22 69 6e 73 65 72 74 65 64 3a 20 41   1 {"inserted: A
39a0: 6c 70 68 61 20 42 72 61 76 6f 20 43 68 61 72 6c  lpha Bravo Charl
39b0: 69 65 20 44 65 6c 74 61 5c 0d 0a 45 63 68 6f 22  ie Delta\..Echo"
39c0: 7d 20 4e 65 77 56 61 6c 75 65 20 31 20 3c 6e 75  } NewValue 1 <nu
39d0: 6c 6c 4f 62 6a 65 63 74 3e 20 43 6f 6e 66 6c 69  llObject> Confli
39e0: 63 74 56 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f  ctValue 1 <nullO
39f0: 62 6a 65 63 74 3e 7d 20 7b 54 61 62 6c 65 4e 61  bject>} {TableNa
3a00: 6d 65 20 74 31 5c 0d 0a 4e 75 6d 62 65 72 4f 66  me t1\..NumberOf
3a10: 43 6f 6c 75 6d 6e 73 20 32 20 4f 70 65 72 61 74  Columns 2 Operat
3a20: 69 6f 6e 43 6f 64 65 20 55 70 64 61 74 65 20 49  ionCode Update I
3a30: 6e 64 69 72 65 63 74 20 46 61 6c 73 65 20 50 72  ndirect False Pr
3a40: 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20  imaryKeyColumns 
3a50: 7b 5b 54 72 75 65 2c 5c 0d 0a 46 61 6c 73 65 5d  {[True,\..False]
3a60: 7d 20 4f 6c 64 56 61 6c 75 65 20 30 20 32 20 4e  } OldValue 0 2 N
3a70: 65 77 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f  ewValue 0 <nullO
3a80: 62 6a 65 63 74 3e 20 43 6f 6e 66 6c 69 63 74 56  bject> ConflictV
3a90: 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65  alue 0 <nullObje
3aa0: 63 74 3e 5c 0d 0a 4f 6c 64 56 61 6c 75 65 20 31  ct>\..OldValue 1
3ab0: 20 7b 22 69 6e 73 65 72 74 65 64 3a 20 46 6f 78   {"inserted: Fox
3ac0: 74 72 6f 74 20 47 6f 6c 66 20 48 6f 74 65 6c 20  trot Golf Hotel 
3ad0: 49 6e 64 69 61 20 4a 75 6c 69 65 74 22 7d 20 4e  India Juliet"} N
3ae0: 65 77 56 61 6c 75 65 20 31 20 7b 22 75 70 64 61  ewValue 1 {"upda
3af0: 74 65 64 3a 5c 0d 0a 50 61 70 61 20 51 75 65 62  ted:\..Papa Queb
3b00: 65 63 20 52 6f 6d 65 6f 20 53 69 65 72 72 61 20  ec Romeo Sierra 
3b10: 54 61 6e 67 6f 22 7d 20 43 6f 6e 66 6c 69 63 74  Tango"} Conflict
3b20: 56 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a  Value 1 <nullObj
3b30: 65 63 74 3e 7d 20 7b 54 61 62 6c 65 4e 61 6d 65  ect>} {TableName
3b40: 20 74 31 5c 0d 0a 4e 75 6d 62 65 72 4f 66 43 6f   t1\..NumberOfCo
3b50: 6c 75 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f  lumns 2 Operatio
3b60: 6e 43 6f 64 65 20 49 6e 73 65 72 74 20 49 6e 64  nCode Insert Ind
3b70: 69 72 65 63 74 20 46 61 6c 73 65 20 50 72 69 6d  irect False Prim
3b80: 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b  aryKeyColumns {[
3b90: 54 72 75 65 2c 5c 0d 0a 46 61 6c 73 65 5d 7d 20  True,\..False]} 
3ba0: 4f 6c 64 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c  OldValue 0 <null
3bb0: 4f 62 6a 65 63 74 3e 20 4e 65 77 56 61 6c 75 65  Object> NewValue
3bc0: 20 30 20 33 20 43 6f 6e 66 6c 69 63 74 56 61 6c   0 3 ConflictVal
3bd0: 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 0 <nullObject
3be0: 3e 5c 0d 0a 4f 6c 64 56 61 6c 75 65 20 31 20 3c  >\..OldValue 1 <
3bf0: 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4e 65 77 56  nullObject> NewV
3c00: 61 6c 75 65 20 31 20 7b 22 69 6e 73 65 72 74 65  alue 1 {"inserte
3c10: 64 3a 20 4b 69 6c 6f 20 4c 69 6d 61 20 4d 69 6b  d: Kilo Lima Mik
3c20: 65 20 4e 6f 76 65 6d 62 65 72 20 4f 73 63 61 72  e November Oscar
3c30: 22 7d 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c  "}\..ConflictVal
3c40: 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 1 <nullObject
3c50: 3e 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  >}}}}....#######
3c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ca0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
3cb0: 65 73 74 20 7b 74 65 73 74 20 73 65 73 73 69 6f  est {test sessio
3cc0: 6e 2d 31 2e 32 2e 31 20 7b 63 68 61 6e 67 65 20  n-1.2.1 {change 
3cd0: 73 65 74 20 72 65 61 64 2f 77 72 69 74 65 2f 69  set read/write/i
3ce0: 6e 76 65 72 74 20 28 6d 65 6d 6f 72 79 29 7d 20  nvert (memory)} 
3cf0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
3d00: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
3d10: 65 20 73 65 73 73 69 6f 6e 2d 31 2e 32 2e 31 2e  e session-1.2.1.
3d20: 64 62 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  db]....  cleanup
3d30: 53 6f 6d 65 54 65 78 74 0d 0a 7d 20 2d 62 6f 64  SomeText..} -bod
3d40: 79 20 7b 0d 0a 20 20 63 72 65 61 74 65 54 68 65  y {..  createThe
3d50: 53 63 68 65 6d 61 20 24 64 62 20 6d 61 69 6e 0d  Schema $db main.
3d60: 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67  .  makeSomeChang
3d70: 65 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20  es $db t1 [list 
3d80: 69 6e 73 65 72 74 20 69 6e 73 65 72 74 20 69 6e  insert insert in
3d90: 73 65 72 74 5d 0d 0a 0d 0a 20 20 73 65 74 20 63  sert]....  set c
3da0: 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62  onnection [getDb
3db0: 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20  Connection].... 
3dc0: 20 73 65 74 20 73 65 73 73 69 6f 6e 20 5b 24 63   set session [$c
3dd0: 6f 6e 6e 65 63 74 69 6f 6e 20 2d 61 6c 69 61 73  onnection -alias
3de0: 20 43 72 65 61 74 65 53 65 73 73 69 6f 6e 20 6d   CreateSession m
3df0: 61 69 6e 5d 0d 0a 20 20 24 73 65 73 73 69 6f 6e  ain]..  $session
3e00: 20 41 74 74 61 63 68 54 61 62 6c 65 20 6e 75 6c   AttachTable nul
3e10: 6c 0d 0a 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43  l....  makeSomeC
3e20: 68 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c  hanges $db t1 [l
3e30: 69 73 74 20 69 6e 73 65 72 74 20 75 70 64 61 74  ist insert updat
3e40: 65 20 64 65 6c 65 74 65 5d 0d 0a 0d 0a 20 20 73  e delete]....  s
3e50: 65 74 20 72 61 77 44 61 74 61 20 5b 63 72 65 61  et rawData [crea
3e60: 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65  teMemoryChangeSe
3e70: 74 46 6f 72 53 65 73 73 69 6f 6e 20 24 73 65 73  tForSession $ses
3e80: 73 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 63  sion]....  set c
3e90: 68 61 6e 67 65 53 65 74 28 31 29 20 5c 0d 0a 20  hangeSet(1) \.. 
3ea0: 20 20 20 20 20 5b 63 72 65 61 74 65 4d 65 6d 6f       [createMemo
3eb0: 72 79 43 68 61 6e 67 65 53 65 74 46 6f 72 43 6f  ryChangeSetForCo
3ec0: 6e 6e 65 63 74 69 6f 6e 20 24 63 6f 6e 6e 65 63  nnection $connec
3ed0: 74 69 6f 6e 20 24 72 61 77 44 61 74 61 5d 0d 0a  tion $rawData]..
3ee0: 0d 0a 20 20 73 65 74 20 63 68 61 6e 67 65 53 65  ..  set changeSe
3ef0: 74 28 32 29 20 5b 24 63 68 61 6e 67 65 53 65 74  t(2) [$changeSet
3f00: 28 31 29 20 2d 61 6c 69 61 73 20 49 6e 76 65 72  (1) -alias Inver
3f10: 74 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 63 68  t]....  list [ch
3f20: 61 6e 67 65 53 65 74 54 6f 53 74 72 69 6e 67 20  angeSetToString 
3f30: 24 63 68 61 6e 67 65 53 65 74 28 32 29 20 74 72  $changeSet(2) tr
3f40: 75 65 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ue]..} -cleanup 
3f50: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65  {..  cleanupSome
3f60: 54 65 78 74 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Text....  unset 
3f70: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 68 61 6e  -nocomplain chan
3f80: 67 65 53 65 74 20 72 61 77 44 61 74 61 20 62 79  geSet rawData by
3f90: 74 65 41 72 72 61 79 20 73 65 73 73 69 6f 6e 0d  teArray session.
3fa0: 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65  ...  freeDbConne
3fb0: 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74  ction....  unset
3fc0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e   -nocomplain con
3fd0: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65  nection....  cle
3fe0: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
3ff0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
4000: 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e  omplain db fileN
4010: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
4020: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
4030: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
4040: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
4050: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
4060: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
4070: 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49  a.SQLite SQLiteI
4080: 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43  nterop\..defineC
4090: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
40a0: 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
40b0: 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e  OP_SESSION_EXTEN
40c0: 53 49 4f 4e 7d 20 2d 72 65 73 75 6c 74 20 5c 0d  SION} -result \.
40d0: 0a 7b 7b 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31  .{{{TableName t1
40e0: 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73   NumberOfColumns
40f0: 20 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65   2 OperationCode
4100: 20 49 6e 73 65 72 74 20 49 6e 64 69 72 65 63 74   Insert Indirect
4110: 20 46 61 6c 73 65 5c 0d 0a 50 72 69 6d 61 72 79   False\..Primary
4120: 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75  KeyColumns {[Tru
4130: 65 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c 64 56 61  e, False]} OldVa
4140: 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 0 <nullObjec
4150: 74 3e 20 4e 65 77 56 61 6c 75 65 20 30 20 31 5c  t> NewValue 0 1\
4160: 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20  ..ConflictValue 
4170: 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4f  0 <nullObject> O
4180: 6c 64 56 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f  ldValue 1 <nullO
4190: 62 6a 65 63 74 3e 20 4e 65 77 56 61 6c 75 65 20  bject> NewValue 
41a0: 31 20 7b 22 69 6e 73 65 72 74 65 64 3a 5c 0d 0a  1 {"inserted:\..
41b0: 41 6c 70 68 61 20 42 72 61 76 6f 20 43 68 61 72  Alpha Bravo Char
41c0: 6c 69 65 20 44 65 6c 74 61 20 45 63 68 6f 22 7d  lie Delta Echo"}
41d0: 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 31   ConflictValue 1
41e0: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 7d 20 7b   <nullObject>} {
41f0: 54 61 62 6c 65 4e 61 6d 65 20 74 31 5c 0d 0a 4e  TableName t1\..N
4200: 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32  umberOfColumns 2
4210: 20 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 55   OperationCode U
4220: 70 64 61 74 65 20 49 6e 64 69 72 65 63 74 20 46  pdate Indirect F
4230: 61 6c 73 65 20 50 72 69 6d 61 72 79 4b 65 79 43  alse PrimaryKeyC
4240: 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75 65 2c 5c 0d  olumns {[True,\.
4250: 0a 46 61 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75  .False]} OldValu
4260: 65 20 30 20 32 20 4e 65 77 56 61 6c 75 65 20 30  e 0 2 NewValue 0
4270: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 43 6f   <nullObject> Co
4280: 6e 66 6c 69 63 74 56 61 6c 75 65 20 30 20 3c 6e  nflictValue 0 <n
4290: 75 6c 6c 4f 62 6a 65 63 74 3e 5c 0d 0a 4f 6c 64  ullObject>\..Old
42a0: 56 61 6c 75 65 20 31 20 7b 22 75 70 64 61 74 65  Value 1 {"update
42b0: 64 3a 20 55 6e 69 66 6f 72 6d 20 56 69 63 74 6f  d: Uniform Victo
42c0: 72 20 57 68 69 73 6b 65 79 20 58 2d 72 61 79 20  r Whiskey X-ray 
42d0: 59 61 6e 6b 65 65 22 7d 20 4e 65 77 56 61 6c 75  Yankee"} NewValu
42e0: 65 20 31 5c 0d 0a 7b 22 69 6e 73 65 72 74 65 64  e 1\..{"inserted
42f0: 3a 20 46 6f 78 74 72 6f 74 20 47 6f 6c 66 20 48  : Foxtrot Golf H
4300: 6f 74 65 6c 20 49 6e 64 69 61 20 4a 75 6c 69 65  otel India Julie
4310: 74 22 7d 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75  t"} ConflictValu
4320: 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e  e 1 <nullObject>
4330: 7d 5c 0d 0a 7b 54 61 62 6c 65 4e 61 6d 65 20 74  }\..{TableName t
4340: 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e  1 NumberOfColumn
4350: 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f 64  s 2 OperationCod
4360: 65 20 55 70 64 61 74 65 20 49 6e 64 69 72 65 63  e Update Indirec
4370: 74 20 46 61 6c 73 65 5c 0d 0a 50 72 69 6d 61 72  t False\..Primar
4380: 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72  yKeyColumns {[Tr
4390: 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c 64 56  ue, False]} OldV
43a0: 61 6c 75 65 20 30 20 33 20 4e 65 77 56 61 6c 75  alue 0 3 NewValu
43b0: 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e  e 0 <nullObject>
43c0: 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65  \..ConflictValue
43d0: 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20   0 <nullObject> 
43e0: 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22 75 70 64  OldValue 1 {"upd
43f0: 61 74 65 64 3a 20 55 6e 69 66 6f 72 6d 20 56 69  ated: Uniform Vi
4400: 63 74 6f 72 20 57 68 69 73 6b 65 79 20 58 2d 72  ctor Whiskey X-r
4410: 61 79 5c 0d 0a 59 61 6e 6b 65 65 22 7d 20 4e 65  ay\..Yankee"} Ne
4420: 77 56 61 6c 75 65 20 31 20 7b 22 69 6e 73 65 72  wValue 1 {"inser
4430: 74 65 64 3a 20 4b 69 6c 6f 20 4c 69 6d 61 20 4d  ted: Kilo Lima M
4440: 69 6b 65 20 4e 6f 76 65 6d 62 65 72 20 4f 73 63  ike November Osc
4450: 61 72 22 7d 20 43 6f 6e 66 6c 69 63 74 56 61 6c  ar"} ConflictVal
4460: 75 65 20 31 5c 0d 0a 3c 6e 75 6c 6c 4f 62 6a 65  ue 1\..<nullObje
4470: 63 74 3e 7d 20 7b 54 61 62 6c 65 4e 61 6d 65 20  ct>} {TableName 
4480: 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d  t1 NumberOfColum
4490: 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f  ns 2 OperationCo
44a0: 64 65 20 44 65 6c 65 74 65 20 49 6e 64 69 72 65  de Delete Indire
44b0: 63 74 5c 0d 0a 46 61 6c 73 65 20 50 72 69 6d 61  ct\..False Prima
44c0: 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54  ryKeyColumns {[T
44d0: 72 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c 64  rue, False]} Old
44e0: 56 61 6c 75 65 20 30 20 34 20 4e 65 77 56 61 6c  Value 0 4 NewVal
44f0: 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 0 <nullObject
4500: 3e 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75  >\..ConflictValu
4510: 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e  e 0 <nullObject>
4520: 20 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22 69 6e   OldValue 1 {"in
4530: 73 65 72 74 65 64 3a 20 50 61 70 61 20 51 75 65  serted: Papa Que
4540: 62 65 63 20 52 6f 6d 65 6f 20 53 69 65 72 72 61  bec Romeo Sierra
4550: 5c 0d 0a 54 61 6e 67 6f 22 7d 20 4e 65 77 56 61  \..Tango"} NewVa
4560: 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 1 <nullObjec
4570: 74 3e 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65  t> ConflictValue
4580: 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 7d   1 <nullObject>}
4590: 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }}}....#########
45a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45e0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
45f0: 74 20 7b 74 65 73 74 20 73 65 73 73 69 6f 6e 2d  t {test session-
4600: 31 2e 32 2e 32 20 7b 63 68 61 6e 67 65 20 73 65  1.2.2 {change se
4610: 74 20 72 65 61 64 2f 77 72 69 74 65 2f 69 6e 76  t read/write/inv
4620: 65 72 74 20 28 73 74 72 65 61 6d 29 7d 20 2d 73  ert (stream)} -s
4630: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
4640: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 28  b [set fileName(
4650: 30 29 20 73 65 73 73 69 6f 6e 2d 31 2e 32 2e 32  0) session-1.2.2
4660: 2e 64 62 5d 0d 0a 0d 0a 20 20 73 65 74 20 66 69  .db]....  set fi
4670: 6c 65 4e 61 6d 65 28 31 29 20 5b 67 65 74 43 68  leName(1) [getCh
4680: 61 6e 67 65 53 65 74 46 69 6c 65 4e 61 6d 65 20  angeSetFileName 
4690: 31 5d 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61  1]..  set fileNa
46a0: 6d 65 28 32 29 20 5b 67 65 74 43 68 61 6e 67 65  me(2) [getChange
46b0: 53 65 74 46 69 6c 65 4e 61 6d 65 20 32 5d 0d 0a  SetFileName 2]..
46c0: 0d 0a 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54  ..  cleanupSomeT
46d0: 65 78 74 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  ext..} -body {..
46e0: 20 20 63 72 65 61 74 65 54 68 65 53 63 68 65 6d    createTheSchem
46f0: 61 20 24 64 62 20 6d 61 69 6e 0d 0a 20 20 6d 61  a $db main..  ma
4700: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
4710: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
4720: 74 20 69 6e 73 65 72 74 20 69 6e 73 65 72 74 5d  t insert insert]
4730: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63  ....  set connec
4740: 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65  tion [getDbConne
4750: 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20  ction]....  set 
4760: 73 65 73 73 69 6f 6e 20 5b 24 63 6f 6e 6e 65 63  session [$connec
4770: 74 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61  tion -alias Crea
4780: 74 65 53 65 73 73 69 6f 6e 20 6d 61 69 6e 5d 0d  teSession main].
4790: 0a 20 20 24 73 65 73 73 69 6f 6e 20 41 74 74 61  .  $session Atta
47a0: 63 68 54 61 62 6c 65 20 6e 75 6c 6c 0d 0a 0d 0a  chTable null....
47b0: 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65    makeSomeChange
47c0: 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69  s $db t1 [list i
47d0: 6e 73 65 72 74 20 75 70 64 61 74 65 20 64 65 6c  nsert update del
47e0: 65 74 65 5d 0d 0a 0d 0a 20 20 77 72 69 74 65 53  ete]....  writeS
47f0: 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74 46 6f  treamChangeSetFo
4800: 72 53 65 73 73 69 6f 6e 20 24 73 65 73 73 69 6f  rSession $sessio
4810: 6e 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d 0a  n $fileName(1)..
4820: 0d 0a 20 20 6f 70 65 6e 53 74 72 65 61 6d 43 68  ..  openStreamCh
4830: 61 6e 67 65 53 65 74 46 6f 72 43 6f 6e 6e 65 63  angeSetForConnec
4840: 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 24 63  tion \..      $c
4850: 6f 6e 6e 65 63 74 69 6f 6e 20 24 66 69 6c 65 4e  onnection $fileN
4860: 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61 6d 65  ame(1) $fileName
4870: 28 32 29 20 73 74 61 74 65 0d 0a 0d 0a 20 20 24  (2) state....  $
4880: 73 74 61 74 65 28 63 68 61 6e 67 65 53 65 74 29  state(changeSet)
4890: 20 2d 61 6c 69 61 73 20 49 6e 76 65 72 74 3b 20   -alias Invert; 
48a0: 75 6e 73 65 74 20 73 74 61 74 65 0d 0a 20 20 6c  unset state..  l
48b0: 69 73 74 20 5b 63 68 61 6e 67 65 53 65 74 46 69  ist [changeSetFi
48c0: 6c 65 54 6f 53 74 72 69 6e 67 20 24 63 6f 6e 6e  leToString $conn
48d0: 65 63 74 69 6f 6e 20 24 66 69 6c 65 4e 61 6d 65  ection $fileName
48e0: 28 32 29 20 74 72 75 65 5d 0d 0a 7d 20 2d 63 6c  (2) true]..} -cl
48f0: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
4900: 75 70 53 6f 6d 65 54 65 78 74 0d 0a 0d 0a 20 20  upSomeText....  
4910: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
4920: 6e 20 73 74 61 74 65 20 62 79 74 65 41 72 72 61  n state byteArra
4930: 79 20 73 65 73 73 69 6f 6e 0d 0a 0d 0a 20 20 66  y session....  f
4940: 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d  reeDbConnection.
4950: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
4960: 6d 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f  mplain connectio
4970: 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  n....  cleanupDb
4980: 20 24 66 69 6c 65 4e 61 6d 65 28 30 29 0d 0a 0d   $fileName(0)...
4990: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
49a0: 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65  lain db fileName
49b0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
49c0: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
49d0: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
49e0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
49f0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
4a00: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
4a10: 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65  QLite SQLiteInte
4a20: 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  rop\..defineCons
4a30: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
4a40: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
4a50: 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f  SESSION_EXTENSIO
4a60: 4e 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 7b  N} -result \..{{
4a70: 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31 20 4e 75  {TableName t1 Nu
4a80: 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32 20  mberOfColumns 2 
4a90: 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 49 6e  OperationCode In
4aa0: 73 65 72 74 20 49 6e 64 69 72 65 63 74 20 46 61  sert Indirect Fa
4ab0: 6c 73 65 5c 0d 0a 50 72 69 6d 61 72 79 4b 65 79  lse\..PrimaryKey
4ac0: 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75 65 2c 20  Columns {[True, 
4ad0: 46 61 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75 65  False]} OldValue
4ae0: 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20   0 <nullObject> 
4af0: 4e 65 77 56 61 6c 75 65 20 30 20 31 5c 0d 0a 43  NewValue 0 1\..C
4b00: 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 30 20 3c  onflictValue 0 <
4b10: 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4f 6c 64 56  nullObject> OldV
4b20: 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65  alue 1 <nullObje
4b30: 63 74 3e 20 4e 65 77 56 61 6c 75 65 20 31 20 7b  ct> NewValue 1 {
4b40: 22 69 6e 73 65 72 74 65 64 3a 5c 0d 0a 41 6c 70  "inserted:\..Alp
4b50: 68 61 20 42 72 61 76 6f 20 43 68 61 72 6c 69 65  ha Bravo Charlie
4b60: 20 44 65 6c 74 61 20 45 63 68 6f 22 7d 20 43 6f   Delta Echo"} Co
4b70: 6e 66 6c 69 63 74 56 61 6c 75 65 20 31 20 3c 6e  nflictValue 1 <n
4b80: 75 6c 6c 4f 62 6a 65 63 74 3e 7d 20 7b 54 61 62  ullObject>} {Tab
4b90: 6c 65 4e 61 6d 65 20 74 31 5c 0d 0a 4e 75 6d 62  leName t1\..Numb
4ba0: 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32 20 4f 70  erOfColumns 2 Op
4bb0: 65 72 61 74 69 6f 6e 43 6f 64 65 20 55 70 64 61  erationCode Upda
4bc0: 74 65 20 49 6e 64 69 72 65 63 74 20 46 61 6c 73  te Indirect Fals
4bd0: 65 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75  e PrimaryKeyColu
4be0: 6d 6e 73 20 7b 5b 54 72 75 65 2c 5c 0d 0a 46 61  mns {[True,\..Fa
4bf0: 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75 65 20 30  lse]} OldValue 0
4c00: 20 32 20 4e 65 77 56 61 6c 75 65 20 30 20 3c 6e   2 NewValue 0 <n
4c10: 75 6c 6c 4f 62 6a 65 63 74 3e 20 43 6f 6e 66 6c  ullObject> Confl
4c20: 69 63 74 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c  ictValue 0 <null
4c30: 4f 62 6a 65 63 74 3e 5c 0d 0a 4f 6c 64 56 61 6c  Object>\..OldVal
4c40: 75 65 20 31 20 7b 22 75 70 64 61 74 65 64 3a 20  ue 1 {"updated: 
4c50: 55 6e 69 66 6f 72 6d 20 56 69 63 74 6f 72 20 57  Uniform Victor W
4c60: 68 69 73 6b 65 79 20 58 2d 72 61 79 20 59 61 6e  hiskey X-ray Yan
4c70: 6b 65 65 22 7d 20 4e 65 77 56 61 6c 75 65 20 31  kee"} NewValue 1
4c80: 5c 0d 0a 7b 22 69 6e 73 65 72 74 65 64 3a 20 46  \..{"inserted: F
4c90: 6f 78 74 72 6f 74 20 47 6f 6c 66 20 48 6f 74 65  oxtrot Golf Hote
4ca0: 6c 20 49 6e 64 69 61 20 4a 75 6c 69 65 74 22 7d  l India Juliet"}
4cb0: 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 31   ConflictValue 1
4cc0: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 7d 5c 0d   <nullObject>}\.
4cd0: 0a 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31 20 4e  .{TableName t1 N
4ce0: 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32  umberOfColumns 2
4cf0: 20 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 55   OperationCode U
4d00: 70 64 61 74 65 20 49 6e 64 69 72 65 63 74 20 46  pdate Indirect F
4d10: 61 6c 73 65 5c 0d 0a 50 72 69 6d 61 72 79 4b 65  alse\..PrimaryKe
4d20: 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75 65 2c  yColumns {[True,
4d30: 20 46 61 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75   False]} OldValu
4d40: 65 20 30 20 33 20 4e 65 77 56 61 6c 75 65 20 30  e 0 3 NewValue 0
4d50: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 5c 0d 0a   <nullObject>\..
4d60: 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 30 20  ConflictValue 0 
4d70: 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4f 6c 64  <nullObject> Old
4d80: 56 61 6c 75 65 20 31 20 7b 22 75 70 64 61 74 65  Value 1 {"update
4d90: 64 3a 20 55 6e 69 66 6f 72 6d 20 56 69 63 74 6f  d: Uniform Victo
4da0: 72 20 57 68 69 73 6b 65 79 20 58 2d 72 61 79 5c  r Whiskey X-ray\
4db0: 0d 0a 59 61 6e 6b 65 65 22 7d 20 4e 65 77 56 61  ..Yankee"} NewVa
4dc0: 6c 75 65 20 31 20 7b 22 69 6e 73 65 72 74 65 64  lue 1 {"inserted
4dd0: 3a 20 4b 69 6c 6f 20 4c 69 6d 61 20 4d 69 6b 65  : Kilo Lima Mike
4de0: 20 4e 6f 76 65 6d 62 65 72 20 4f 73 63 61 72 22   November Oscar"
4df0: 7d 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20  } ConflictValue 
4e00: 31 5c 0d 0a 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e  1\..<nullObject>
4e10: 7d 20 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31 20  } {TableName t1 
4e20: 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20  NumberOfColumns 
4e30: 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20  2 OperationCode 
4e40: 44 65 6c 65 74 65 20 49 6e 64 69 72 65 63 74 5c  Delete Indirect\
4e50: 0d 0a 46 61 6c 73 65 20 50 72 69 6d 61 72 79 4b  ..False PrimaryK
4e60: 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75 65  eyColumns {[True
4e70: 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c  , False]} OldVal
4e80: 75 65 20 30 20 34 20 4e 65 77 56 61 6c 75 65 20  ue 0 4 NewValue 
4e90: 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 5c 0d  0 <nullObject>\.
4ea0: 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 30  .ConflictValue 0
4eb0: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4f 6c   <nullObject> Ol
4ec0: 64 56 61 6c 75 65 20 31 20 7b 22 69 6e 73 65 72  dValue 1 {"inser
4ed0: 74 65 64 3a 20 50 61 70 61 20 51 75 65 62 65 63  ted: Papa Quebec
4ee0: 20 52 6f 6d 65 6f 20 53 69 65 72 72 61 5c 0d 0a   Romeo Sierra\..
4ef0: 54 61 6e 67 6f 22 7d 20 4e 65 77 56 61 6c 75 65  Tango"} NewValue
4f00: 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20   1 <nullObject> 
4f10: 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 31 20  ConflictValue 1 
4f20: 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 7d 7d 7d 7d  <nullObject>}}}}
4f30: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
4f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f80: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
4f90: 74 65 73 74 20 73 65 73 73 69 6f 6e 2d 31 2e 33  test session-1.3
4fa0: 20 7b 65 6e 61 62 6c 65 64 2f 64 69 73 61 62 6c   {enabled/disabl
4fb0: 65 64 20 73 74 61 74 65 7d 20 2d 73 65 74 75 70  ed state} -setup
4fc0: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
4fd0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 73 65 73 73  et fileName sess
4fe0: 69 6f 6e 2d 31 2e 33 2e 64 62 5d 0d 0a 0d 0a 20  ion-1.3.db].... 
4ff0: 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74   cleanupSomeText
5000: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 63  ..} -body {..  c
5010: 72 65 61 74 65 54 68 65 53 63 68 65 6d 61 20 24  reateTheSchema $
5020: 64 62 20 6d 61 69 6e 0d 0a 20 20 6d 61 6b 65 53  db main..  makeS
5030: 6f 6d 65 43 68 61 6e 67 65 73 20 24 64 62 20 74  omeChanges $db t
5040: 31 20 5b 6c 69 73 74 20 69 6e 73 65 72 74 5d 0d  1 [list insert].
5050: 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  ...  set connect
5060: 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
5070: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  tion]....  set s
5080: 65 73 73 69 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74  ession [$connect
5090: 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61 74  ion -alias Creat
50a0: 65 53 65 73 73 69 6f 6e 20 6d 61 69 6e 5d 0d 0a  eSession main]..
50b0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
50c0: 20 49 73 45 6e 61 62 6c 65 64 20 5b 24 73 65 73   IsEnabled [$ses
50d0: 73 69 6f 6e 20 49 73 45 6e 61 62 6c 65 64 5d 0d  sion IsEnabled].
50e0: 0a 0d 0a 20 20 24 73 65 73 73 69 6f 6e 20 41 74  ...  $session At
50f0: 74 61 63 68 54 61 62 6c 65 20 6e 75 6c 6c 0d 0a  tachTable null..
5100: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
5110: 20 49 73 45 6e 61 62 6c 65 64 20 5b 24 73 65 73   IsEnabled [$ses
5120: 73 69 6f 6e 20 49 73 45 6e 61 62 6c 65 64 5d 0d  sion IsEnabled].
5130: 0a 0d 0a 20 20 24 73 65 73 73 69 6f 6e 20 53 65  ...  $session Se
5140: 74 54 6f 44 69 73 61 62 6c 65 64 0d 0a 20 20 6c  tToDisabled..  l
5150: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73  append result Is
5160: 45 6e 61 62 6c 65 64 20 5b 24 73 65 73 73 69 6f  Enabled [$sessio
5170: 6e 20 49 73 45 6e 61 62 6c 65 64 5d 0d 0a 0d 0a  n IsEnabled]....
5180: 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65    makeSomeChange
5190: 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69  s $db t1 [list i
51a0: 6e 73 65 72 74 5d 0d 0a 20 20 6c 61 70 70 65 6e  nsert]..  lappen
51b0: 64 20 72 65 73 75 6c 74 20 49 73 45 6d 70 74 79  d result IsEmpty
51c0: 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 45 6d 70   [$session IsEmp
51d0: 74 79 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 61 77  ty]....  set raw
51e0: 44 61 74 61 20 5b 63 72 65 61 74 65 4d 65 6d 6f  Data [createMemo
51f0: 72 79 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65  ryChangeSetForSe
5200: 73 73 69 6f 6e 20 24 73 65 73 73 69 6f 6e 5d 0d  ssion $session].
5210: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
5220: 75 6c 74 20 4c 65 6e 67 74 68 20 5b 24 72 61 77  ult Length [$raw
5230: 44 61 74 61 20 4c 65 6e 67 74 68 5d 0d 0a 0d 0a  Data Length]....
5240: 20 20 24 73 65 73 73 69 6f 6e 20 53 65 74 54 6f    $session SetTo
5250: 45 6e 61 62 6c 65 64 0d 0a 20 20 6c 61 70 70 65  Enabled..  lappe
5260: 6e 64 20 72 65 73 75 6c 74 20 49 73 45 6e 61 62  nd result IsEnab
5270: 6c 65 64 20 5b 24 73 65 73 73 69 6f 6e 20 49 73  led [$session Is
5280: 45 6e 61 62 6c 65 64 5d 0d 0a 0d 0a 20 20 6d 61  Enabled]....  ma
5290: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
52a0: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
52b0: 74 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  t]..  lappend re
52c0: 73 75 6c 74 20 49 73 45 6d 70 74 79 20 5b 24 73  sult IsEmpty [$s
52d0: 65 73 73 69 6f 6e 20 49 73 45 6d 70 74 79 5d 0d  ession IsEmpty].
52e0: 0a 0d 0a 20 20 73 65 74 20 72 61 77 44 61 74 61  ...  set rawData
52f0: 20 5b 63 72 65 61 74 65 4d 65 6d 6f 72 79 43 68   [createMemoryCh
5300: 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69 6f  angeSetForSessio
5310: 6e 20 24 73 65 73 73 69 6f 6e 5d 0d 0a 0d 0a 20  n $session].... 
5320: 20 73 65 74 20 63 68 61 6e 67 65 53 65 74 28 31   set changeSet(1
5330: 29 20 5c 0d 0a 20 20 20 20 20 20 5b 63 72 65 61  ) \..      [crea
5340: 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65  teMemoryChangeSe
5350: 74 46 6f 72 43 6f 6e 6e 65 63 74 69 6f 6e 20 24  tForConnection $
5360: 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 72 61 77 44  connection $rawD
5370: 61 74 61 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  ata]....  lappen
5380: 64 20 72 65 73 75 6c 74 20 5b 63 68 61 6e 67 65  d result [change
5390: 53 65 74 54 6f 53 74 72 69 6e 67 20 24 63 68 61  SetToString $cha
53a0: 6e 67 65 53 65 74 28 31 29 20 66 61 6c 73 65 5d  ngeSet(1) false]
53b0: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
53c0: 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78    cleanupSomeTex
53d0: 74 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  t....  unset -no
53e0: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
53f0: 63 68 61 6e 67 65 53 65 74 20 72 61 77 44 61 74  changeSet rawDat
5400: 61 20 62 79 74 65 41 72 72 61 79 20 73 65 73 73  a byteArray sess
5410: 69 6f 6e 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43  ion....  freeDbC
5420: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
5430: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
5440: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20   connection.... 
5450: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
5460: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
5470: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66  -nocomplain db f
5480: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
5490: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
54a0: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
54b0: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
54c0: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
54d0: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
54e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
54f0: 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66  iteInterop\..def
5500: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
5510: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
5520: 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45  NTEROP_SESSION_E
5530: 58 54 45 4e 53 49 4f 4e 7d 20 2d 72 65 73 75 6c  XTENSION} -resul
5540: 74 20 7b 49 73 45 6e 61 62 6c 65 64 5c 0d 0a 54  t {IsEnabled\..T
5550: 72 75 65 20 49 73 45 6e 61 62 6c 65 64 20 54 72  rue IsEnabled Tr
5560: 75 65 20 49 73 45 6e 61 62 6c 65 64 20 46 61 6c  ue IsEnabled Fal
5570: 73 65 20 49 73 45 6d 70 74 79 20 54 72 75 65 20  se IsEmpty True 
5580: 4c 65 6e 67 74 68 20 30 20 49 73 45 6e 61 62 6c  Length 0 IsEnabl
5590: 65 64 20 54 72 75 65 5c 0d 0a 49 73 45 6d 70 74  ed True\..IsEmpt
55a0: 79 20 46 61 6c 73 65 20 7b 7b 54 61 62 6c 65 4e  y False {{TableN
55b0: 61 6d 65 20 74 31 20 4e 75 6d 62 65 72 4f 66 43  ame t1 NumberOfC
55c0: 6f 6c 75 6d 6e 73 20 32 20 4f 70 65 72 61 74 69  olumns 2 Operati
55d0: 6f 6e 43 6f 64 65 20 49 6e 73 65 72 74 20 49 6e  onCode Insert In
55e0: 64 69 72 65 63 74 5c 0d 0a 46 61 6c 73 65 20 50  direct\..False P
55f0: 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73  rimaryKeyColumns
5600: 20 7b 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d   {[True, False]}
5610: 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }}}}....########
5620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5660: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
5670: 73 74 20 7b 74 65 73 74 20 73 65 73 73 69 6f 6e  st {test session
5680: 2d 31 2e 34 20 7b 64 69 72 65 63 74 2f 69 6e 64  -1.4 {direct/ind
5690: 69 72 65 63 74 20 73 74 61 74 65 7d 20 2d 73 65  irect state} -se
56a0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
56b0: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 73   [set fileName s
56c0: 65 73 73 69 6f 6e 2d 31 2e 34 2e 64 62 5d 0d 0a  ession-1.4.db]..
56d0: 0d 0a 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54  ..  cleanupSomeT
56e0: 65 78 74 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  ext..} -body {..
56f0: 20 20 63 72 65 61 74 65 54 68 65 53 63 68 65 6d    createTheSchem
5700: 61 20 24 64 62 20 6d 61 69 6e 0d 0a 20 20 6d 61  a $db main..  ma
5710: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
5720: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
5730: 74 5d 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e  t]....  set conn
5740: 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e  ection [getDbCon
5750: 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65  nection]....  se
5760: 74 20 73 65 73 73 69 6f 6e 20 5b 24 63 6f 6e 6e  t session [$conn
5770: 65 63 74 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72  ection -alias Cr
5780: 65 61 74 65 53 65 73 73 69 6f 6e 20 6d 61 69 6e  eateSession main
5790: 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ]..  lappend res
57a0: 75 6c 74 20 49 73 49 6e 64 69 72 65 63 74 20 5b  ult IsIndirect [
57b0: 24 73 65 73 73 69 6f 6e 20 49 73 49 6e 64 69 72  $session IsIndir
57c0: 65 63 74 5d 0d 0a 0d 0a 20 20 24 73 65 73 73 69  ect]....  $sessi
57d0: 6f 6e 20 41 74 74 61 63 68 54 61 62 6c 65 20 6e  on AttachTable n
57e0: 75 6c 6c 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ull..  lappend r
57f0: 65 73 75 6c 74 20 49 73 49 6e 64 69 72 65 63 74  esult IsIndirect
5800: 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 49 6e 64   [$session IsInd
5810: 69 72 65 63 74 5d 0d 0a 0d 0a 20 20 24 73 65 73  irect]....  $ses
5820: 73 69 6f 6e 20 53 65 74 54 6f 49 6e 64 69 72 65  sion SetToIndire
5830: 63 74 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ct..  lappend re
5840: 73 75 6c 74 20 49 73 49 6e 64 69 72 65 63 74 20  sult IsIndirect 
5850: 5b 24 73 65 73 73 69 6f 6e 20 49 73 49 6e 64 69  [$session IsIndi
5860: 72 65 63 74 5d 0d 0a 0d 0a 20 20 6d 61 6b 65 53  rect]....  makeS
5870: 6f 6d 65 43 68 61 6e 67 65 73 20 24 64 62 20 74  omeChanges $db t
5880: 31 20 5b 6c 69 73 74 20 69 6e 73 65 72 74 5d 0d  1 [list insert].
5890: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
58a0: 74 20 49 73 45 6d 70 74 79 20 5b 24 73 65 73 73  t IsEmpty [$sess
58b0: 69 6f 6e 20 49 73 45 6d 70 74 79 5d 0d 0a 0d 0a  ion IsEmpty]....
58c0: 20 20 73 65 74 20 72 61 77 44 61 74 61 20 5b 63    set rawData [c
58d0: 72 65 61 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  reateMemoryChang
58e0: 65 53 65 74 46 6f 72 53 65 73 73 69 6f 6e 20 24  eSetForSession $
58f0: 73 65 73 73 69 6f 6e 5d 0d 0a 0d 0a 20 20 24 73  session]....  $s
5900: 65 73 73 69 6f 6e 20 53 65 74 54 6f 44 69 72 65  ession SetToDire
5910: 63 74 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ct..  lappend re
5920: 73 75 6c 74 20 49 73 49 6e 64 69 72 65 63 74 20  sult IsIndirect 
5930: 5b 24 73 65 73 73 69 6f 6e 20 49 73 49 6e 64 69  [$session IsIndi
5940: 72 65 63 74 5d 0d 0a 0d 0a 20 20 6d 61 6b 65 53  rect]....  makeS
5950: 6f 6d 65 43 68 61 6e 67 65 73 20 24 64 62 20 74  omeChanges $db t
5960: 31 20 5b 6c 69 73 74 20 69 6e 73 65 72 74 5d 0d  1 [list insert].
5970: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
5980: 74 20 49 73 45 6d 70 74 79 20 5b 24 73 65 73 73  t IsEmpty [$sess
5990: 69 6f 6e 20 49 73 45 6d 70 74 79 5d 0d 0a 0d 0a  ion IsEmpty]....
59a0: 20 20 73 65 74 20 72 61 77 44 61 74 61 20 5b 63    set rawData [c
59b0: 72 65 61 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67  reateMemoryChang
59c0: 65 53 65 74 46 6f 72 53 65 73 73 69 6f 6e 20 24  eSetForSession $
59d0: 73 65 73 73 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65  session]....  se
59e0: 74 20 63 68 61 6e 67 65 53 65 74 28 31 29 20 5c  t changeSet(1) \
59f0: 0d 0a 20 20 20 20 20 20 5b 63 72 65 61 74 65 4d  ..      [createM
5a00: 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 46 6f  emoryChangeSetFo
5a10: 72 43 6f 6e 6e 65 63 74 69 6f 6e 20 24 63 6f 6e  rConnection $con
5a20: 6e 65 63 74 69 6f 6e 20 24 72 61 77 44 61 74 61  nection $rawData
5a30: 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
5a40: 65 73 75 6c 74 20 5b 63 68 61 6e 67 65 53 65 74  esult [changeSet
5a50: 54 6f 53 74 72 69 6e 67 20 24 63 68 61 6e 67 65  ToString $change
5a60: 53 65 74 28 31 29 20 66 61 6c 73 65 5d 0d 0a 7d  Set(1) false]..}
5a70: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
5a80: 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a  leanupSomeText..
5a90: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
5aa0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 68 61  plain result cha
5ab0: 6e 67 65 53 65 74 20 72 61 77 44 61 74 61 20 62  ngeSet rawData b
5ac0: 79 74 65 41 72 72 61 79 20 73 65 73 73 69 6f 6e  yteArray session
5ad0: 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e  ....  freeDbConn
5ae0: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65  ection....  unse
5af0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f  t -nocomplain co
5b00: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c  nnection....  cl
5b10: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
5b20: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
5b30: 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65  complain db file
5b40: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
5b50: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
5b60: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
5b70: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
5b80: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
5b90: 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61  Lite\..System.Da
5ba0: 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65  ta.SQLite SQLite
5bb0: 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65  Interop\..define
5bc0: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
5bd0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
5be0: 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45  ROP_SESSION_EXTE
5bf0: 4e 53 49 4f 4e 7d 20 2d 72 65 73 75 6c 74 20 5c  NSION} -result \
5c00: 0d 0a 7b 49 73 49 6e 64 69 72 65 63 74 20 46 61  ..{IsIndirect Fa
5c10: 6c 73 65 20 49 73 49 6e 64 69 72 65 63 74 20 46  lse IsIndirect F
5c20: 61 6c 73 65 20 49 73 49 6e 64 69 72 65 63 74 20  alse IsIndirect 
5c30: 54 72 75 65 20 49 73 45 6d 70 74 79 20 46 61 6c  True IsEmpty Fal
5c40: 73 65 20 49 73 49 6e 64 69 72 65 63 74 5c 0d 0a  se IsIndirect\..
5c50: 46 61 6c 73 65 20 49 73 45 6d 70 74 79 20 46 61  False IsEmpty Fa
5c60: 6c 73 65 20 7b 7b 54 61 62 6c 65 4e 61 6d 65 20  lse {{TableName 
5c70: 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d  t1 NumberOfColum
5c80: 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f  ns 2 OperationCo
5c90: 64 65 20 49 6e 73 65 72 74 5c 0d 0a 49 6e 64 69  de Insert\..Indi
5ca0: 72 65 63 74 20 54 72 75 65 20 50 72 69 6d 61 72  rect True Primar
5cb0: 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72  yKeyColumns {[Tr
5cc0: 75 65 2c 20 46 61 6c 73 65 5d 7d 7d 20 7b 54 61  ue, False]}} {Ta
5cd0: 62 6c 65 4e 61 6d 65 20 74 31 20 4e 75 6d 62 65  bleName t1 Numbe
5ce0: 72 4f 66 43 6f 6c 75 6d 6e 73 5c 0d 0a 32 20 4f  rOfColumns\..2 O
5cf0: 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 49 6e 73  perationCode Ins
5d00: 65 72 74 20 49 6e 64 69 72 65 63 74 20 46 61 6c  ert Indirect Fal
5d10: 73 65 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c  se PrimaryKeyCol
5d20: 75 6d 6e 73 20 7b 5b 54 72 75 65 2c 20 46 61 6c  umns {[True, Fal
5d30: 73 65 5d 7d 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23  se]}}}}}....####
5d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d80: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
5d90: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 73 65 73  unTest {test ses
5da0: 73 69 6f 6e 2d 31 2e 35 20 7b 74 61 62 6c 65 20  sion-1.5 {table 
5db0: 66 69 6c 74 65 72 7d 20 2d 73 65 74 75 70 20 7b  filter} -setup {
5dc0: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
5dd0: 20 66 69 6c 65 4e 61 6d 65 20 73 65 73 73 69 6f   fileName sessio
5de0: 6e 2d 31 2e 35 2e 64 62 5d 0d 0a 0d 0a 20 20 63  n-1.5.db]....  c
5df0: 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a  leanupSomeText..
5e00: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 63 72 65  } -body {..  cre
5e10: 61 74 65 54 68 65 53 63 68 65 6d 61 20 24 64 62  ateTheSchema $db
5e20: 20 6d 61 69 6e 0d 0a 20 20 6d 61 6b 65 53 6f 6d   main..  makeSom
5e30: 65 43 68 61 6e 67 65 73 20 24 64 62 20 74 31 20  eChanges $db t1 
5e40: 5b 6c 69 73 74 20 69 6e 73 65 72 74 5d 0d 0a 0d  [list insert]...
5e50: 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f  .  set connectio
5e60: 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  n [getDbConnecti
5e70: 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 65 73  on]....  set ses
5e80: 73 69 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74 69 6f  sion [$connectio
5e90: 6e 20 2d 61 6c 69 61 73 20 43 72 65 61 74 65 53  n -alias CreateS
5ea0: 65 73 73 69 6f 6e 20 6d 61 69 6e 5d 0d 0a 0d 0a  ession main]....
5eb0: 20 20 24 73 65 73 73 69 6f 6e 20 2d 6d 61 72 73    $session -mars
5ec0: 68 61 6c 66 6c 61 67 73 20 2b 44 79 6e 61 6d 69  halflags +Dynami
5ed0: 63 43 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20 20  cCallback \..   
5ee0: 20 20 20 53 65 74 54 61 62 6c 65 46 69 6c 74 65     SetTableFilte
5ef0: 72 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  r tableFilterCal
5f00: 6c 62 61 63 6b 54 31 20 6e 75 6c 6c 0d 0a 0d 0a  lbackT1 null....
5f10: 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65    makeSomeChange
5f20: 73 20 24 64 62 20 74 32 20 5b 6c 69 73 74 20 69  s $db t2 [list i
5f30: 6e 73 65 72 74 5d 0d 0a 20 20 6c 61 70 70 65 6e  nsert]..  lappen
5f40: 64 20 72 65 73 75 6c 74 20 49 73 45 6d 70 74 79  d result IsEmpty
5f50: 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 45 6d 70   [$session IsEmp
5f60: 74 79 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  ty]....  lappend
5f70: 20 72 65 73 75 6c 74 20 4d 61 74 63 68 54 32 20   result MatchT2 
5f80: 5b 6d 61 74 63 68 53 65 73 73 69 6f 6e 20 24 63  [matchSession $c
5f90: 6f 6e 6e 65 63 74 69 6f 6e 20 24 73 65 73 73 69  onnection $sessi
5fa0: 6f 6e 20 7b 0d 0a 20 20 20 20 5b 24 69 74 65 6d  on {..    [$item
5fb0: 20 54 61 62 6c 65 4e 61 6d 65 5d 20 65 71 20 22   TableName] eq "
5fc0: 74 32 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6d  t2"..  }]....  m
5fd0: 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24  akeSomeChanges $
5fe0: 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65  db t1 [list inse
5ff0: 72 74 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  rt]..  lappend r
6000: 65 73 75 6c 74 20 49 73 45 6d 70 74 79 20 5b 24  esult IsEmpty [$
6010: 73 65 73 73 69 6f 6e 20 49 73 45 6d 70 74 79 5d  session IsEmpty]
6020: 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
6030: 73 75 6c 74 20 4d 61 74 63 68 54 31 20 5b 6d 61  sult MatchT1 [ma
6040: 74 63 68 53 65 73 73 69 6f 6e 20 24 63 6f 6e 6e  tchSession $conn
6050: 65 63 74 69 6f 6e 20 24 73 65 73 73 69 6f 6e 20  ection $session 
6060: 7b 0d 0a 20 20 20 20 5b 24 69 74 65 6d 20 54 61  {..    [$item Ta
6070: 62 6c 65 4e 61 6d 65 5d 20 65 71 20 22 74 31 22  bleName] eq "t1"
6080: 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 24 73 65 73  ..  }]....  $ses
6090: 73 69 6f 6e 20 53 65 74 54 61 62 6c 65 46 69 6c  sion SetTableFil
60a0: 74 65 72 20 6e 75 6c 6c 20 6e 75 6c 6c 0d 0a 0d  ter null null...
60b0: 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67  .  makeSomeChang
60c0: 65 73 20 24 64 62 20 74 32 20 5b 6c 69 73 74 20  es $db t2 [list 
60d0: 69 6e 73 65 72 74 5d 0d 0a 20 20 6c 61 70 70 65  insert]..  lappe
60e0: 6e 64 20 72 65 73 75 6c 74 20 49 73 45 6d 70 74  nd result IsEmpt
60f0: 79 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 45 6d  y [$session IsEm
6100: 70 74 79 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  pty]....  lappen
6110: 64 20 72 65 73 75 6c 74 20 4d 61 74 63 68 54 32  d result MatchT2
6120: 20 5b 6d 61 74 63 68 53 65 73 73 69 6f 6e 20 24   [matchSession $
6130: 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 73 65 73 73  connection $sess
6140: 69 6f 6e 20 7b 0d 0a 20 20 20 20 5b 24 69 74 65  ion {..    [$ite
6150: 6d 20 54 61 62 6c 65 4e 61 6d 65 5d 20 65 71 20  m TableName] eq 
6160: 22 74 32 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20  "t2"..  }]....  
6170: 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20  makeSomeChanges 
6180: 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73  $db t1 [list ins
6190: 65 72 74 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  ert]..  lappend 
61a0: 72 65 73 75 6c 74 20 49 73 45 6d 70 74 79 20 5b  result IsEmpty [
61b0: 24 73 65 73 73 69 6f 6e 20 49 73 45 6d 70 74 79  $session IsEmpty
61c0: 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
61d0: 65 73 75 6c 74 20 4d 61 74 63 68 54 31 20 5b 6d  esult MatchT1 [m
61e0: 61 74 63 68 53 65 73 73 69 6f 6e 20 24 63 6f 6e  atchSession $con
61f0: 6e 65 63 74 69 6f 6e 20 24 73 65 73 73 69 6f 6e  nection $session
6200: 20 7b 0d 0a 20 20 20 20 5b 24 69 74 65 6d 20 54   {..    [$item T
6210: 61 62 6c 65 4e 61 6d 65 5d 20 65 71 20 22 74 31  ableName] eq "t1
6220: 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 73 65 74  "..  }]....  set
6230: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
6240: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
6250: 53 6f 6d 65 54 65 78 74 0d 0a 0d 0a 20 20 75 6e  SomeText....  un
6260: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
6270: 72 65 73 75 6c 74 20 73 65 73 73 69 6f 6e 0d 0a  result session..
6280: 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  ..  freeDbConnec
6290: 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  tion....  unset 
62a0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 6e  -nocomplain conn
62b0: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61  ection....  clea
62c0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
62d0: 0a 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a 65  ...  catch {obje
62e0: 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63  ct removecallbac
62f0: 6b 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c  k tableFilterCal
6300: 6c 62 61 63 6b 54 31 7d 0d 0a 0d 0a 20 20 63 61  lbackT1}....  ca
6310: 74 63 68 20 7b 0d 0a 20 20 20 20 66 6f 72 65 61  tch {..    forea
6320: 63 68 20 63 61 6c 6c 62 61 63 6b 52 65 73 75 6c  ch callbackResul
6330: 74 20 24 63 61 6c 6c 62 61 63 6b 52 65 73 75 6c  t $callbackResul
6340: 74 73 20 7b 0d 0a 20 20 20 20 20 20 63 61 74 63  ts {..      catc
6350: 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73  h {object dispos
6360: 65 20 24 63 61 6c 6c 62 61 63 6b 52 65 73 75 6c  e $callbackResul
6370: 74 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  t}..    }..  }..
6380: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
6390: 70 6c 61 69 6e 20 63 61 6c 6c 62 61 63 6b 52 65  plain callbackRe
63a0: 73 75 6c 74 20 63 61 6c 6c 62 61 63 6b 52 65 73  sult callbackRes
63b0: 75 6c 74 73 20 64 62 20 66 69 6c 65 4e 61 6d 65  ults db fileName
63c0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
63d0: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
63e0: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
63f0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
6400: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
6410: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
6420: 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65  QLite SQLiteInte
6430: 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  rop\..defineCons
6440: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
6450: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
6460: 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f  SESSION_EXTENSIO
6470: 4e 7d 20 2d 72 65 73 75 6c 74 20 7b 49 73 45 6d  N} -result {IsEm
6480: 70 74 79 5c 0d 0a 54 72 75 65 20 4d 61 74 63 68  pty\..True Match
6490: 54 32 20 66 61 6c 73 65 20 49 73 45 6d 70 74 79  T2 false IsEmpty
64a0: 20 46 61 6c 73 65 20 4d 61 74 63 68 54 31 20 74   False MatchT1 t
64b0: 72 75 65 20 49 73 45 6d 70 74 79 20 46 61 6c 73  rue IsEmpty Fals
64c0: 65 20 4d 61 74 63 68 54 32 20 74 72 75 65 5c 0d  e MatchT2 true\.
64d0: 0a 49 73 45 6d 70 74 79 20 46 61 6c 73 65 20 4d  .IsEmpty False M
64e0: 61 74 63 68 54 31 20 74 72 75 65 7d 7d 0d 0a 0d  atchT1 true}}...
64f0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
6500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6540: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
6550: 74 20 73 65 73 73 69 6f 6e 2d 31 2e 36 2e 31 20  t session-1.6.1 
6560: 7b 63 6f 6d 62 69 6e 65 2f 61 70 70 6c 79 20 63  {combine/apply c
6570: 68 61 6e 67 65 20 73 65 74 73 20 28 6d 65 6d 6f  hange sets (memo
6580: 72 79 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ry)} -setup {.. 
6590: 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
65a0: 6c 65 4e 61 6d 65 20 73 65 73 73 69 6f 6e 2d 31  leName session-1
65b0: 2e 36 2e 31 2e 64 62 5d 0d 0a 0d 0a 20 20 63 6c  .6.1.db]....  cl
65c0: 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a 7d  eanupSomeText..}
65d0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 63 72 65 61   -body {..  crea
65e0: 74 65 54 68 65 53 63 68 65 6d 61 20 24 64 62 20  teTheSchema $db 
65f0: 6d 61 69 6e 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65  main..  makeSome
6600: 43 68 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b  Changes $db t1 [
6610: 6c 69 73 74 20 69 6e 73 65 72 74 20 69 6e 73 65  list insert inse
6620: 72 74 5d 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e  rt]....  set con
6630: 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f  nection [getDbCo
6640: 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73  nnection]....  s
6650: 65 74 20 72 61 77 44 61 74 61 28 31 29 20 5b 63  et rawData(1) [c
6660: 61 70 74 75 72 65 43 68 61 6e 67 65 53 65 74 52  aptureChangeSetR
6670: 61 77 44 61 74 61 20 24 63 6f 6e 6e 65 63 74 69  awData $connecti
6680: 6f 6e 20 6d 61 69 6e 20 6e 75 6c 6c 20 7b 0d 0a  on main null {..
6690: 20 20 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e      makeSomeChan
66a0: 67 65 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74  ges $db t1 [list
66b0: 20 64 65 6c 65 74 65 5d 20 31 0d 0a 20 20 7d 5d   delete] 1..  }]
66c0: 0d 0a 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68  ....  makeSomeCh
66d0: 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c 69  anges $db t1 [li
66e0: 73 74 20 69 6e 73 65 72 74 5d 20 31 0d 0a 0d 0a  st insert] 1....
66f0: 20 20 73 65 74 20 72 61 77 44 61 74 61 28 32 29    set rawData(2)
6700: 20 5b 63 61 70 74 75 72 65 43 68 61 6e 67 65 53   [captureChangeS
6710: 65 74 52 61 77 44 61 74 61 20 24 63 6f 6e 6e 65  etRawData $conne
6720: 63 74 69 6f 6e 20 6d 61 69 6e 20 6e 75 6c 6c 20  ction main null 
6730: 7b 0d 0a 20 20 20 20 6d 61 6b 65 53 6f 6d 65 43  {..    makeSomeC
6740: 68 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c  hanges $db t1 [l
6750: 69 73 74 20 69 6e 73 65 72 74 5d 0d 0a 20 20 7d  ist insert]..  }
6760: 5d 0d 0a 0d 0a 20 20 73 65 74 20 63 68 61 6e 67  ]....  set chang
6770: 65 53 65 74 28 31 29 20 5c 0d 0a 20 20 20 20 20  eSet(1) \..     
6780: 20 5b 63 72 65 61 74 65 4d 65 6d 6f 72 79 43 68   [createMemoryCh
6790: 61 6e 67 65 53 65 74 46 6f 72 43 6f 6e 6e 65 63  angeSetForConnec
67a0: 74 69 6f 6e 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  tion $connection
67b0: 20 24 72 61 77 44 61 74 61 28 31 29 5d 0d 0a 0d   $rawData(1)]...
67c0: 0a 20 20 73 65 74 20 63 68 61 6e 67 65 53 65 74  .  set changeSet
67d0: 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 5b 63 72  (2) \..      [cr
67e0: 65 61 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65  eateMemoryChange
67f0: 53 65 74 46 6f 72 43 6f 6e 6e 65 63 74 69 6f 6e  SetForConnection
6800: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 72 61   $connection $ra
6810: 77 44 61 74 61 28 32 29 5d 0d 0a 0d 0a 20 20 73  wData(2)]....  s
6820: 65 74 20 63 68 61 6e 67 65 53 65 74 28 33 29 20  et changeSet(3) 
6830: 5b 24 63 68 61 6e 67 65 53 65 74 28 31 29 20 2d  [$changeSet(1) -
6840: 61 6c 69 61 73 20 43 6f 6d 62 69 6e 65 57 69 74  alias CombineWit
6850: 68 20 24 63 68 61 6e 67 65 53 65 74 28 32 29 5d  h $changeSet(2)]
6860: 0d 0a 0d 0a 20 20 24 63 68 61 6e 67 65 53 65 74  ....  $changeSet
6870: 28 33 29 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67  (3) -marshalflag
6880: 73 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c 62 61  s +DynamicCallba
6890: 63 6b 20 5c 0d 0a 20 20 20 20 20 20 41 70 70 6c  ck \..      Appl
68a0: 79 20 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61  y conflictCallba
68b0: 63 6b 20 6e 75 6c 6c 0d 0a 0d 0a 20 20 6c 69 73  ck null....  lis
68c0: 74 20 5b 63 68 61 6e 67 65 53 65 74 54 6f 53 74  t [changeSetToSt
68d0: 72 69 6e 67 20 24 63 68 61 6e 67 65 53 65 74 28  ring $changeSet(
68e0: 33 29 20 74 72 75 65 5d 20 44 61 74 61 20 5c 0d  3) true] Data \.
68f0: 0a 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63  .      [sql exec
6900: 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
6910: 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74  der -format list
6920: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 7b 53   $db \..      {S
6930: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
6940: 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b 7d 5d  t1 ORDER BY x;}]
6950: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
6960: 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78    cleanupSomeTex
6970: 74 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  t....  unset -no
6980: 63 6f 6d 70 6c 61 69 6e 20 63 68 61 6e 67 65 53  complain changeS
6990: 65 74 20 72 61 77 44 61 74 61 0d 0a 0d 0a 20 20  et rawData....  
69a0: 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  freeDbConnection
69b0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
69c0: 6f 6d 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69  omplain connecti
69d0: 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  on....  cleanupD
69e0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
69f0: 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 72   catch {object r
6a00: 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 63 6f  emovecallback co
6a10: 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 7d 0d  nflictCallback}.
6a20: 0a 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20  ...  catch {..  
6a30: 20 20 66 6f 72 65 61 63 68 20 63 61 6c 6c 62 61    foreach callba
6a40: 63 6b 52 65 73 75 6c 74 20 24 63 61 6c 6c 62 61  ckResult $callba
6a50: 63 6b 52 65 73 75 6c 74 73 20 7b 0d 0a 20 20 20  ckResults {..   
6a60: 20 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74     catch {object
6a70: 20 64 69 73 70 6f 73 65 20 24 63 61 6c 6c 62 61   dispose $callba
6a80: 63 6b 52 65 73 75 6c 74 7d 0d 0a 20 20 20 20 7d  ckResult}..    }
6a90: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
6aa0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 61 6c   -nocomplain cal
6ab0: 6c 62 61 63 6b 52 65 73 75 6c 74 20 63 61 6c 6c  lbackResult call
6ac0: 62 61 63 6b 52 65 73 75 6c 74 73 20 64 62 20 66  backResults db f
6ad0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
6ae0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
6af0: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
6b00: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
6b10: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
6b20: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
6b30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
6b40: 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66  iteInterop\..def
6b50: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
6b60: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
6b70: 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45  NTEROP_SESSION_E
6b80: 58 54 45 4e 53 49 4f 4e 7d 20 2d 72 65 73 75 6c  XTENSION} -resul
6b90: 74 20 5c 0d 0a 7b 7b 7b 54 61 62 6c 65 4e 61 6d  t \..{{{TableNam
6ba0: 65 20 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c  e t1 NumberOfCol
6bb0: 75 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e  umns 2 Operation
6bc0: 43 6f 64 65 20 44 65 6c 65 74 65 20 49 6e 64 69  Code Delete Indi
6bd0: 72 65 63 74 20 46 61 6c 73 65 5c 0d 0a 50 72 69  rect False\..Pri
6be0: 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b  maryKeyColumns {
6bf0: 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f  [True, False]} O
6c00: 6c 64 56 61 6c 75 65 20 30 20 31 20 4e 65 77 56  ldValue 0 1 NewV
6c10: 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65  alue 0 <nullObje
6c20: 63 74 3e 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61  ct>\..ConflictVa
6c30: 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 0 <nullObjec
6c40: 74 3e 20 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22  t> OldValue 1 {"
6c50: 69 6e 73 65 72 74 65 64 3a 20 41 6c 70 68 61 20  inserted: Alpha 
6c60: 42 72 61 76 6f 20 43 68 61 72 6c 69 65 20 44 65  Bravo Charlie De
6c70: 6c 74 61 5c 0d 0a 45 63 68 6f 22 7d 20 4e 65 77  lta\..Echo"} New
6c80: 56 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a  Value 1 <nullObj
6c90: 65 63 74 3e 20 43 6f 6e 66 6c 69 63 74 56 61 6c  ect> ConflictVal
6ca0: 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 1 <nullObject
6cb0: 3e 7d 20 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31  >} {TableName t1
6cc0: 5c 0d 0a 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d  \..NumberOfColum
6cd0: 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f  ns 2 OperationCo
6ce0: 64 65 20 49 6e 73 65 72 74 20 49 6e 64 69 72 65  de Insert Indire
6cf0: 63 74 20 46 61 6c 73 65 20 50 72 69 6d 61 72 79  ct False Primary
6d00: 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75  KeyColumns {[Tru
6d10: 65 2c 5c 0d 0a 46 61 6c 73 65 5d 7d 20 4f 6c 64  e,\..False]} Old
6d20: 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a  Value 0 <nullObj
6d30: 65 63 74 3e 20 4e 65 77 56 61 6c 75 65 20 30 20  ect> NewValue 0 
6d40: 33 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20  3 ConflictValue 
6d50: 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 5c 0d  0 <nullObject>\.
6d60: 0a 4f 6c 64 56 61 6c 75 65 20 31 20 3c 6e 75 6c  .OldValue 1 <nul
6d70: 6c 4f 62 6a 65 63 74 3e 20 4e 65 77 56 61 6c 75  lObject> NewValu
6d80: 65 20 31 20 7b 22 69 6e 73 65 72 74 65 64 3a 20  e 1 {"inserted: 
6d90: 50 61 70 61 20 51 75 65 62 65 63 20 52 6f 6d 65  Papa Quebec Rome
6da0: 6f 20 53 69 65 72 72 61 20 54 61 6e 67 6f 22 7d  o Sierra Tango"}
6db0: 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65  \..ConflictValue
6dc0: 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 7d   1 <nullObject>}
6dd0: 7d 20 44 61 74 61 20 7b 31 20 7b 69 6e 73 65 72  } Data {1 {inser
6de0: 74 65 64 3a 20 4b 69 6c 6f 20 4c 69 6d 61 20 4d  ted: Kilo Lima M
6df0: 69 6b 65 20 4e 6f 76 65 6d 62 65 72 5c 0d 0a 4f  ike November\..O
6e00: 73 63 61 72 7d 20 32 20 7b 69 6e 73 65 72 74 65  scar} 2 {inserte
6e10: 64 3a 20 46 6f 78 74 72 6f 74 20 47 6f 6c 66 20  d: Foxtrot Golf 
6e20: 48 6f 74 65 6c 20 49 6e 64 69 61 20 4a 75 6c 69  Hotel India Juli
6e30: 65 74 7d 20 33 20 7b 69 6e 73 65 72 74 65 64 3a  et} 3 {inserted:
6e40: 20 50 61 70 61 20 51 75 65 62 65 63 5c 0d 0a 52   Papa Quebec\..R
6e50: 6f 6d 65 6f 20 53 69 65 72 72 61 20 54 61 6e 67  omeo Sierra Tang
6e60: 6f 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  o}}}}....#######
6e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6eb0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
6ec0: 65 73 74 20 7b 74 65 73 74 20 73 65 73 73 69 6f  est {test sessio
6ed0: 6e 2d 31 2e 36 2e 32 20 7b 63 6f 6d 62 69 6e 65  n-1.6.2 {combine
6ee0: 2f 61 70 70 6c 79 20 63 68 61 6e 67 65 20 73 65  /apply change se
6ef0: 74 73 20 28 73 74 72 65 61 6d 29 7d 20 2d 73 65  ts (stream)} -se
6f00: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
6f10: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 30   [set fileName(0
6f20: 29 20 73 65 73 73 69 6f 6e 2d 31 2e 36 2e 32 2e  ) session-1.6.2.
6f30: 64 62 5d 0d 0a 0d 0a 20 20 73 65 74 20 66 69 6c  db]....  set fil
6f40: 65 4e 61 6d 65 28 31 29 20 5b 67 65 74 43 68 61  eName(1) [getCha
6f50: 6e 67 65 53 65 74 46 69 6c 65 4e 61 6d 65 20 31  ngeSetFileName 1
6f60: 5d 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  ]..  set fileNam
6f70: 65 28 32 29 20 5b 67 65 74 43 68 61 6e 67 65 53  e(2) [getChangeS
6f80: 65 74 46 69 6c 65 4e 61 6d 65 20 32 5d 0d 0a 20  etFileName 2].. 
6f90: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 33 29   set fileName(3)
6fa0: 20 5b 67 65 74 43 68 61 6e 67 65 53 65 74 46 69   [getChangeSetFi
6fb0: 6c 65 4e 61 6d 65 20 33 5d 0d 0a 0d 0a 20 20 63  leName 3]....  c
6fc0: 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a  leanupSomeText..
6fd0: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 63 72 65  } -body {..  cre
6fe0: 61 74 65 54 68 65 53 63 68 65 6d 61 20 24 64 62  ateTheSchema $db
6ff0: 20 6d 61 69 6e 0d 0a 20 20 6d 61 6b 65 53 6f 6d   main..  makeSom
7000: 65 43 68 61 6e 67 65 73 20 24 64 62 20 74 31 20  eChanges $db t1 
7010: 5b 6c 69 73 74 20 69 6e 73 65 72 74 20 69 6e 73  [list insert ins
7020: 65 72 74 5d 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  ert]....  set co
7030: 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
7040: 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....  
7050: 63 61 70 74 75 72 65 43 68 61 6e 67 65 53 65 74  captureChangeSet
7060: 46 69 6c 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  File $connection
7070: 20 6d 61 69 6e 20 6e 75 6c 6c 20 7b 0d 0a 20 20   main null {..  
7080: 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65    makeSomeChange
7090: 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 64  s $db t1 [list d
70a0: 65 6c 65 74 65 5d 20 31 0d 0a 20 20 7d 20 24 66  elete] 1..  } $f
70b0: 69 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20  ileName(1)....  
70c0: 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20  makeSomeChanges 
70d0: 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73  $db t1 [list ins
70e0: 65 72 74 5d 20 31 0d 0a 0d 0a 20 20 63 61 70 74  ert] 1....  capt
70f0: 75 72 65 43 68 61 6e 67 65 53 65 74 46 69 6c 65  ureChangeSetFile
7100: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 69   $connection mai
7110: 6e 20 6e 75 6c 6c 20 7b 0d 0a 20 20 20 20 6d 61  n null {..    ma
7120: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
7130: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
7140: 74 5d 0d 0a 20 20 7d 20 24 66 69 6c 65 4e 61 6d  t]..  } $fileNam
7150: 65 28 32 29 0d 0a 0d 0a 20 20 6f 70 65 6e 53 74  e(2)....  openSt
7160: 72 65 61 6d 43 68 61 6e 67 65 53 65 74 46 6f 72  reamChangeSetFor
7170: 43 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20  Connection \..  
7180: 20 20 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20      $connection 
7190: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69  $fileName(1) $fi
71a0: 6c 65 4e 61 6d 65 28 33 29 20 73 74 61 74 65 31  leName(3) state1
71b0: 0d 0a 0d 0a 20 20 6f 70 65 6e 53 74 72 65 61 6d  ....  openStream
71c0: 43 68 61 6e 67 65 53 65 74 46 6f 72 43 6f 6e 6e  ChangeSetForConn
71d0: 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ection \..      
71e0: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 66 69 6c  $connection $fil
71f0: 65 4e 61 6d 65 28 32 29 20 22 22 20 73 74 61 74  eName(2) "" stat
7200: 65 32 0d 0a 0d 0a 20 20 24 73 74 61 74 65 31 28  e2....  $state1(
7210: 63 68 61 6e 67 65 53 65 74 29 20 43 6f 6d 62 69  changeSet) Combi
7220: 6e 65 57 69 74 68 20 24 73 74 61 74 65 32 28 63  neWith $state2(c
7230: 68 61 6e 67 65 53 65 74 29 3b 20 75 6e 73 65 74  hangeSet); unset
7240: 20 73 74 61 74 65 31 0d 0a 0d 0a 20 20 6f 70 65   state1....  ope
7250: 6e 53 74 72 65 61 6d 43 68 61 6e 67 65 53 65 74  nStreamChangeSet
7260: 46 6f 72 43 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d  ForConnection \.
7270: 0a 20 20 20 20 20 20 24 63 6f 6e 6e 65 63 74 69  .      $connecti
7280: 6f 6e 20 24 66 69 6c 65 4e 61 6d 65 28 33 29 20  on $fileName(3) 
7290: 22 22 20 73 74 61 74 65 33 0d 0a 0d 0a 20 20 24  "" state3....  $
72a0: 73 74 61 74 65 33 28 63 68 61 6e 67 65 53 65 74  state3(changeSet
72b0: 29 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73 20  ) -marshalflags 
72c0: 2b 44 79 6e 61 6d 69 63 43 61 6c 6c 62 61 63 6b  +DynamicCallback
72d0: 20 5c 0d 0a 20 20 20 20 20 20 41 70 70 6c 79 20   \..      Apply 
72e0: 63 6f 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b  conflictCallback
72f0: 20 6e 75 6c 6c 3b 20 75 6e 73 65 74 20 73 74 61   null; unset sta
7300: 74 65 33 0d 0a 0d 0a 20 20 6f 70 65 6e 53 74 72  te3....  openStr
7310: 65 61 6d 43 68 61 6e 67 65 53 65 74 46 6f 72 43  eamChangeSetForC
7320: 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20  onnection \..   
7330: 20 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 24     $connection $
7340: 66 69 6c 65 4e 61 6d 65 28 33 29 20 22 22 20 73  fileName(3) "" s
7350: 74 61 74 65 34 0d 0a 0d 0a 20 20 6c 69 73 74 20  tate4....  list 
7360: 5b 63 68 61 6e 67 65 53 65 74 54 6f 53 74 72 69  [changeSetToStri
7370: 6e 67 20 24 73 74 61 74 65 34 28 63 68 61 6e 67  ng $state4(chang
7380: 65 53 65 74 29 20 74 72 75 65 5d 20 44 61 74 61  eSet) true] Data
7390: 20 5c 0d 0a 20 20 20 20 20 20 5b 73 71 6c 20 65   \..      [sql e
73a0: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
73b0: 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
73c0: 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ist $db \..     
73d0: 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   {SELECT x, y FR
73e0: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78  OM t1 ORDER BY x
73f0: 3b 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ;}]..} -cleanup 
7400: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65  {..  cleanupSome
7410: 54 65 78 74 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Text....  unset 
7420: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 74 61 74  -nocomplain stat
7430: 65 34 20 73 74 61 74 65 33 20 73 74 61 74 65 32  e4 state3 state2
7440: 20 73 74 61 74 65 31 0d 0a 0d 0a 20 20 66 72 65   state1....  fre
7450: 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
7460: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
7470: 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  lain connection.
7480: 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
7490: 66 69 6c 65 4e 61 6d 65 28 30 29 0d 0a 0d 0a 20  fileName(0).... 
74a0: 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 72   catch {object r
74b0: 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 63 6f  emovecallback co
74c0: 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 7d 0d  nflictCallback}.
74d0: 0a 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20  ...  catch {..  
74e0: 20 20 66 6f 72 65 61 63 68 20 63 61 6c 6c 62 61    foreach callba
74f0: 63 6b 52 65 73 75 6c 74 20 24 63 61 6c 6c 62 61  ckResult $callba
7500: 63 6b 52 65 73 75 6c 74 73 20 7b 0d 0a 20 20 20  ckResults {..   
7510: 20 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74     catch {object
7520: 20 64 69 73 70 6f 73 65 20 24 63 61 6c 6c 62 61   dispose $callba
7530: 63 6b 52 65 73 75 6c 74 7d 0d 0a 20 20 20 20 7d  ckResult}..    }
7540: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
7550: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 61 6c   -nocomplain cal
7560: 6c 62 61 63 6b 52 65 73 75 6c 74 20 63 61 6c 6c  lbackResult call
7570: 62 61 63 6b 52 65 73 75 6c 74 73 20 64 62 20 66  backResults db f
7580: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
7590: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
75a0: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
75b0: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
75c0: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
75d0: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
75e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
75f0: 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66  iteInterop\..def
7600: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
7610: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
7620: 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45  NTEROP_SESSION_E
7630: 58 54 45 4e 53 49 4f 4e 7d 20 2d 72 65 73 75 6c  XTENSION} -resul
7640: 74 20 5c 0d 0a 7b 7b 7b 54 61 62 6c 65 4e 61 6d  t \..{{{TableNam
7650: 65 20 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c  e t1 NumberOfCol
7660: 75 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e  umns 2 Operation
7670: 43 6f 64 65 20 44 65 6c 65 74 65 20 49 6e 64 69  Code Delete Indi
7680: 72 65 63 74 20 46 61 6c 73 65 5c 0d 0a 50 72 69  rect False\..Pri
7690: 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b  maryKeyColumns {
76a0: 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f  [True, False]} O
76b0: 6c 64 56 61 6c 75 65 20 30 20 31 20 4e 65 77 56  ldValue 0 1 NewV
76c0: 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65  alue 0 <nullObje
76d0: 63 74 3e 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61  ct>\..ConflictVa
76e0: 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 0 <nullObjec
76f0: 74 3e 20 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22  t> OldValue 1 {"
7700: 69 6e 73 65 72 74 65 64 3a 20 41 6c 70 68 61 20  inserted: Alpha 
7710: 42 72 61 76 6f 20 43 68 61 72 6c 69 65 20 44 65  Bravo Charlie De
7720: 6c 74 61 5c 0d 0a 45 63 68 6f 22 7d 20 4e 65 77  lta\..Echo"} New
7730: 56 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a  Value 1 <nullObj
7740: 65 63 74 3e 20 43 6f 6e 66 6c 69 63 74 56 61 6c  ect> ConflictVal
7750: 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 1 <nullObject
7760: 3e 7d 20 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31  >} {TableName t1
7770: 5c 0d 0a 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d  \..NumberOfColum
7780: 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f  ns 2 OperationCo
7790: 64 65 20 49 6e 73 65 72 74 20 49 6e 64 69 72 65  de Insert Indire
77a0: 63 74 20 46 61 6c 73 65 20 50 72 69 6d 61 72 79  ct False Primary
77b0: 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75  KeyColumns {[Tru
77c0: 65 2c 5c 0d 0a 46 61 6c 73 65 5d 7d 20 4f 6c 64  e,\..False]} Old
77d0: 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a  Value 0 <nullObj
77e0: 65 63 74 3e 20 4e 65 77 56 61 6c 75 65 20 30 20  ect> NewValue 0 
77f0: 33 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20  3 ConflictValue 
7800: 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 5c 0d  0 <nullObject>\.
7810: 0a 4f 6c 64 56 61 6c 75 65 20 31 20 3c 6e 75 6c  .OldValue 1 <nul
7820: 6c 4f 62 6a 65 63 74 3e 20 4e 65 77 56 61 6c 75  lObject> NewValu
7830: 65 20 31 20 7b 22 69 6e 73 65 72 74 65 64 3a 20  e 1 {"inserted: 
7840: 50 61 70 61 20 51 75 65 62 65 63 20 52 6f 6d 65  Papa Quebec Rome
7850: 6f 20 53 69 65 72 72 61 20 54 61 6e 67 6f 22 7d  o Sierra Tango"}
7860: 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65  \..ConflictValue
7870: 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 7d   1 <nullObject>}
7880: 7d 20 44 61 74 61 20 7b 31 20 7b 69 6e 73 65 72  } Data {1 {inser
7890: 74 65 64 3a 20 4b 69 6c 6f 20 4c 69 6d 61 20 4d  ted: Kilo Lima M
78a0: 69 6b 65 20 4e 6f 76 65 6d 62 65 72 5c 0d 0a 4f  ike November\..O
78b0: 73 63 61 72 7d 20 32 20 7b 69 6e 73 65 72 74 65  scar} 2 {inserte
78c0: 64 3a 20 46 6f 78 74 72 6f 74 20 47 6f 6c 66 20  d: Foxtrot Golf 
78d0: 48 6f 74 65 6c 20 49 6e 64 69 61 20 4a 75 6c 69  Hotel India Juli
78e0: 65 74 7d 20 33 20 7b 69 6e 73 65 72 74 65 64 3a  et} 3 {inserted:
78f0: 20 50 61 70 61 20 51 75 65 62 65 63 5c 0d 0a 52   Papa Quebec\..R
7900: 6f 6d 65 6f 20 53 69 65 72 72 61 20 54 61 6e 67  omeo Sierra Tang
7910: 6f 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  o}}}}....#######
7920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7960: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
7970: 65 73 74 20 7b 74 65 73 74 20 73 65 73 73 69 6f  est {test sessio
7980: 6e 2d 31 2e 37 20 7b 64 69 66 66 65 72 65 6e 63  n-1.7 {differenc
7990: 65 73 20 62 65 74 77 65 65 6e 20 74 61 62 6c 65  es between table
79a0: 73 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  s} -setup {..  s
79b0: 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
79c0: 4e 61 6d 65 20 73 65 73 73 69 6f 6e 2d 31 2e 37  Name session-1.7
79d0: 2e 64 62 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  .db]....  cleanu
79e0: 70 53 6f 6d 65 54 65 78 74 0d 0a 7d 20 2d 62 6f  pSomeText..} -bo
79f0: 64 79 20 7b 0d 0a 20 20 63 72 65 61 74 65 54 68  dy {..  createTh
7a00: 65 53 63 68 65 6d 61 20 24 64 62 20 6d 61 69 6e  eSchema $db main
7a10: 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e  ..  makeSomeChan
7a20: 67 65 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74  ges $db t1 [list
7a30: 20 69 6e 73 65 72 74 20 69 6e 73 65 72 74 5d 0d   insert insert].
7a40: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  ...  set result 
7a50: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70  [list]....  lapp
7a60: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
7a70: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
7a80: 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
7a90: 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20 20  list $db \..    
7aa0: 20 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46    {SELECT x, y F
7ab0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
7ac0: 78 3b 7d 5d 0d 0a 0d 0a 20 20 63 72 65 61 74 65  x;}]....  create
7ad0: 54 68 65 53 63 68 65 6d 61 20 24 64 62 20 74 65  TheSchema $db te
7ae0: 6d 70 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  mp..  sql execut
7af0: 65 20 24 64 62 20 7b 49 4e 53 45 52 54 20 49 4e  e $db {INSERT IN
7b00: 54 4f 20 74 65 6d 70 2e 74 31 20 53 45 4c 45 43  TO temp.t1 SELEC
7b10: 54 20 2a 20 46 52 4f 4d 20 6d 61 69 6e 2e 74 31  T * FROM main.t1
7b20: 3b 7d 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68  ;}..  makeSomeCh
7b30: 61 6e 67 65 73 20 24 64 62 20 74 65 6d 70 2e 74  anges $db temp.t
7b40: 31 20 5b 6c 69 73 74 20 69 6e 73 65 72 74 20 69  1 [list insert i
7b50: 6e 73 65 72 74 5d 0d 0a 0d 0a 20 20 73 65 74 20  nsert]....  set 
7b60: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
7b70: 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a  bConnection]....
7b80: 20 20 73 65 74 20 73 65 73 73 69 6f 6e 20 5b 24    set session [$
7b90: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 61 6c 69 61  connection -alia
7ba0: 73 20 43 72 65 61 74 65 53 65 73 73 69 6f 6e 20  s CreateSession 
7bb0: 6d 61 69 6e 5d 0d 0a 20 20 24 73 65 73 73 69 6f  main]..  $sessio
7bc0: 6e 20 41 74 74 61 63 68 54 61 62 6c 65 20 6e 75  n AttachTable nu
7bd0: 6c 6c 0d 0a 20 20 24 73 65 73 73 69 6f 6e 20 4c  ll..  $session L
7be0: 6f 61 64 44 69 66 66 65 72 65 6e 63 65 73 46 72  oadDifferencesFr
7bf0: 6f 6d 54 61 62 6c 65 20 74 65 6d 70 20 74 31 0d  omTable temp t1.
7c00: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
7c10: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
7c20: 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
7c30: 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64   -format list $d
7c40: 62 20 5c 0d 0a 20 20 20 20 20 20 7b 53 45 4c 45  b \..      {SELE
7c50: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20  CT x, y FROM t1 
7c60: 4f 52 44 45 52 20 42 59 20 78 3b 7d 5d 0d 0a 7d  ORDER BY x;}]..}
7c70: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
7c80: 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a  leanupSomeText..
7c90: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
7ca0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 73 65 73  plain result ses
7cb0: 73 69 6f 6e 0d 0a 0d 0a 20 20 66 72 65 65 44 62  sion....  freeDb
7cc0: 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  Connection....  
7cd0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
7ce0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a  n connection....
7cf0: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
7d00: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
7d10: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20   -nocomplain db 
7d20: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
7d30: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
7d40: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
7d50: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
7d60: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
7d70: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
7d80: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51  m.Data.SQLite SQ
7d90: 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65  LiteInterop\..de
7da0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
7db0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
7dc0: 49 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f  INTEROP_SESSION_
7dd0: 45 58 54 45 4e 53 49 4f 4e 7d 20 2d 72 65 73 75  EXTENSION} -resu
7de0: 6c 74 20 7b 7b 31 5c 0d 0a 7b 69 6e 73 65 72 74  lt {{1\..{insert
7df0: 65 64 3a 20 41 6c 70 68 61 20 42 72 61 76 6f 20  ed: Alpha Bravo 
7e00: 43 68 61 72 6c 69 65 20 44 65 6c 74 61 20 45 63  Charlie Delta Ec
7e10: 68 6f 7d 20 32 20 7b 69 6e 73 65 72 74 65 64 3a  ho} 2 {inserted:
7e20: 20 46 6f 78 74 72 6f 74 20 47 6f 6c 66 20 48 6f   Foxtrot Golf Ho
7e30: 74 65 6c 5c 0d 0a 49 6e 64 69 61 20 4a 75 6c 69  tel\..India Juli
7e40: 65 74 7d 7d 20 7b 31 20 7b 69 6e 73 65 72 74 65  et}} {1 {inserte
7e50: 64 3a 20 41 6c 70 68 61 20 42 72 61 76 6f 20 43  d: Alpha Bravo C
7e60: 68 61 72 6c 69 65 20 44 65 6c 74 61 20 45 63 68  harlie Delta Ech
7e70: 6f 7d 20 32 20 7b 69 6e 73 65 72 74 65 64 3a 5c  o} 2 {inserted:\
7e80: 0d 0a 46 6f 78 74 72 6f 74 20 47 6f 6c 66 20 48  ..Foxtrot Golf H
7e90: 6f 74 65 6c 20 49 6e 64 69 61 20 4a 75 6c 69 65  otel India Julie
7ea0: 74 7d 20 33 20 7b 69 6e 73 65 72 74 65 64 3a 20  t} 3 {inserted: 
7eb0: 4b 69 6c 6f 20 4c 69 6d 61 20 4d 69 6b 65 20 4e  Kilo Lima Mike N
7ec0: 6f 76 65 6d 62 65 72 20 4f 73 63 61 72 7d 20 34  ovember Oscar} 4
7ed0: 5c 0d 0a 7b 69 6e 73 65 72 74 65 64 3a 20 50 61  \..{inserted: Pa
7ee0: 70 61 20 51 75 65 62 65 63 20 52 6f 6d 65 6f 20  pa Quebec Romeo 
7ef0: 53 69 65 72 72 61 20 54 61 6e 67 6f 7d 7d 7d 7d  Sierra Tango}}}}
7f00: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
7f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7f50: 23 23 23 0d 0a 0d 0a 72 65 6e 61 6d 65 20 63 6f  ###....rename co
7f60: 6e 66 6c 69 63 74 43 61 6c 6c 62 61 63 6b 20 22  nflictCallback "
7f70: 22 0d 0a 72 65 6e 61 6d 65 20 74 61 62 6c 65 46  "..rename tableF
7f80: 69 6c 74 65 72 43 61 6c 6c 62 61 63 6b 54 31 20  ilterCallbackT1 
7f90: 22 22 0d 0a 72 65 6e 61 6d 65 20 63 72 65 61 74  ""..rename creat
7fa0: 65 42 79 74 65 41 72 72 61 79 20 22 22 0d 0a 72  eByteArray ""..r
7fb0: 65 6e 61 6d 65 20 61 72 72 61 79 54 6f 4c 69 73  ename arrayToLis
7fc0: 74 20 22 22 0d 0a 72 65 6e 61 6d 65 20 67 65 74  t ""..rename get
7fd0: 43 68 61 6e 67 65 53 65 74 46 69 6c 65 4e 61 6d  ChangeSetFileNam
7fe0: 65 20 22 22 0d 0a 72 65 6e 61 6d 65 20 63 61 70  e ""..rename cap
7ff0: 74 75 72 65 43 68 61 6e 67 65 53 65 74 46 69 6c  tureChangeSetFil
8000: 65 20 22 22 0d 0a 72 65 6e 61 6d 65 20 63 61 70  e ""..rename cap
8010: 74 75 72 65 43 68 61 6e 67 65 53 65 74 52 61 77  tureChangeSetRaw
8020: 44 61 74 61 20 22 22 0d 0a 72 65 6e 61 6d 65 20  Data ""..rename 
8030: 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20  makeSomeChanges 
8040: 22 22 0d 0a 72 65 6e 61 6d 65 20 63 72 65 61 74  ""..rename creat
8050: 65 54 68 65 53 63 68 65 6d 61 20 22 22 0d 0a 72  eTheSchema ""..r
8060: 65 6e 61 6d 65 20 6d 61 74 63 68 43 68 61 6e 67  ename matchChang
8070: 65 53 65 74 20 22 22 0d 0a 72 65 6e 61 6d 65 20  eSet ""..rename 
8080: 6d 61 74 63 68 53 65 73 73 69 6f 6e 20 22 22 0d  matchSession "".
8090: 0a 72 65 6e 61 6d 65 20 63 68 61 6e 67 65 53 65  .rename changeSe
80a0: 74 54 6f 53 74 72 69 6e 67 20 22 22 0d 0a 72 65  tToString ""..re
80b0: 6e 61 6d 65 20 6d 65 74 61 64 61 74 61 49 74 65  name metadataIte
80c0: 6d 54 6f 53 74 72 69 6e 67 20 22 22 0d 0a 72 65  mToString ""..re
80d0: 6e 61 6d 65 20 63 68 61 6e 67 65 53 65 74 46 69  name changeSetFi
80e0: 6c 65 54 6f 53 74 72 69 6e 67 20 22 22 0d 0a 72  leToString ""..r
80f0: 65 6e 61 6d 65 20 77 72 69 74 65 53 74 72 65 61  ename writeStrea
8100: 6d 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73  mChangeSetForSes
8110: 73 69 6f 6e 20 22 22 0d 0a 72 65 6e 61 6d 65 20  sion ""..rename 
8120: 6f 70 65 6e 53 74 72 65 61 6d 43 68 61 6e 67 65  openStreamChange
8130: 53 65 74 46 6f 72 43 6f 6e 6e 65 63 74 69 6f 6e  SetForConnection
8140: 20 22 22 0d 0a 72 65 6e 61 6d 65 20 77 72 69 74   ""..rename writ
8150: 65 52 61 77 44 61 74 61 54 6f 46 69 6c 65 20 22  eRawDataToFile "
8160: 22 0d 0a 72 65 6e 61 6d 65 20 63 72 65 61 74 65  "..rename create
8170: 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65 74 46  MemoryChangeSetF
8180: 6f 72 53 65 73 73 69 6f 6e 20 22 22 0d 0a 72 65  orSession ""..re
8190: 6e 61 6d 65 20 63 72 65 61 74 65 4d 65 6d 6f 72  name createMemor
81a0: 79 43 68 61 6e 67 65 53 65 74 46 6f 72 43 6f 6e  yChangeSetForCon
81b0: 6e 65 63 74 69 6f 6e 20 22 22 0d 0a 72 65 6e 61  nection ""..rena
81c0: 6d 65 20 66 6f 72 44 69 73 70 6c 61 79 20 22 22  me forDisplay ""
81d0: 0d 0a 72 65 6e 61 6d 65 20 63 6c 65 61 6e 75 70  ..rename cleanup
81e0: 53 6f 6d 65 54 65 78 74 20 22 22 0d 0a 72 65 6e  SomeText ""..ren
81f0: 61 6d 65 20 67 65 74 53 6f 6d 65 54 65 78 74 20  ame getSomeText 
8200: 22 22 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ""....##########
8210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8250: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69  #####....runSQLi
8260: 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a  teTestEpilogue..
8270: 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65 0d  runTestEpilogue.
8280: 0a                                               .