System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b5b8fa366582bf5d259748b995edcce39f56cfe9:


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 43 68 61  ..proc createCha
09a0: 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69 6f 6e  ngeSetForSession
09b0: 20 7b 20 73 65 73 73 69 6f 6e 20 7d 20 7b 0d 0a   { session } {..
09c0: 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48    if {[isObjectH
09d0: 61 6e 64 6c 65 20 24 73 65 73 73 69 6f 6e 5d 20  andle $session] 
09e0: 26 26 20 24 73 65 73 73 69 6f 6e 20 6e 65 20 22  && $session ne "
09f0: 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {.. 
0a00: 20 20 20 73 65 74 20 62 79 74 65 41 72 72 61 79     set byteArray
0a10: 20 6e 75 6c 6c 0d 0a 20 20 20 20 24 73 65 73 73   null..    $sess
0a20: 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61 74  ion -alias Creat
0a30: 65 43 68 61 6e 67 65 53 65 74 20 62 79 74 65 41  eChangeSet byteA
0a40: 72 72 61 79 0d 0a 0d 0a 20 20 20 20 73 65 74 20  rray....    set 
0a50: 72 61 77 44 61 74 61 20 5b 63 72 65 61 74 65 42  rawData [createB
0a60: 79 74 65 41 72 72 61 79 20 5b 61 72 72 61 79 54  yteArray [arrayT
0a70: 6f 4c 69 73 74 20 62 79 74 65 41 72 72 61 79 5d  oList byteArray]
0a80: 5d 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 72 65  ]..    object re
0a90: 6d 6f 76 65 72 65 66 20 24 72 61 77 44 61 74 61  moveref $rawData
0aa0: 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 24  ....    return $
0ab0: 72 61 77 44 61 74 61 0d 0a 20 20 7d 0d 0a 0d 0a  rawData..  }....
0ac0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 0d 0a 7d    return null..}
0ad0: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
0ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b20: 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 63 68 61 6e  ###....proc chan
0b30: 67 65 53 65 74 54 6f 53 74 72 69 6e 67 20 7b 20  geSetToString { 
0b40: 63 68 61 6e 67 65 53 65 74 20 69 6e 63 6c 75 64  changeSet includ
0b50: 65 56 61 6c 75 65 73 20 7d 20 7b 0d 0a 20 20 73  eValues } {..  s
0b60: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
0b70: 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69 73 4f 62 6a  ....  if {[isObj
0b80: 65 63 74 48 61 6e 64 6c 65 20 24 63 68 61 6e 67  ectHandle $chang
0b90: 65 53 65 74 5d 20 26 26 20 24 63 68 61 6e 67 65  eSet] && $change
0ba0: 53 65 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74  Set ne "null"} t
0bb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63  hen {..    objec
0bc0: 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
0bd0: 20 69 74 65 6d 20 24 63 68 61 6e 67 65 53 65 74   item $changeSet
0be0: 20 7b 0d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e   {..      lappen
0bf0: 64 20 72 65 73 75 6c 74 20 54 61 62 6c 65 4e 61  d result TableNa
0c00: 6d 65 20 5b 24 69 74 65 6d 20 54 61 62 6c 65 4e  me [$item TableN
0c10: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 6c 61 70 70  ame]..      lapp
0c20: 65 6e 64 20 72 65 73 75 6c 74 20 4e 75 6d 62 65  end result Numbe
0c30: 72 4f 66 43 6f 6c 75 6d 6e 73 20 5b 24 69 74 65  rOfColumns [$ite
0c40: 6d 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e  m NumberOfColumn
0c50: 73 5d 0d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e  s]..      lappen
0c60: 64 20 72 65 73 75 6c 74 20 4f 70 65 72 61 74 69  d result Operati
0c70: 6f 6e 43 6f 64 65 20 5b 24 69 74 65 6d 20 4f 70  onCode [$item Op
0c80: 65 72 61 74 69 6f 6e 43 6f 64 65 5d 0d 0a 20 20  erationCode]..  
0c90: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
0ca0: 6c 74 20 49 6e 64 69 72 65 63 74 20 5b 24 69 74  lt Indirect [$it
0cb0: 65 6d 20 49 6e 64 69 72 65 63 74 5d 0d 0a 0d 0a  em Indirect]....
0cc0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
0cd0: 73 75 6c 74 20 50 72 69 6d 61 72 79 4b 65 79 43  sult PrimaryKeyC
0ce0: 6f 6c 75 6d 6e 73 20 5c 0d 0a 20 20 20 20 20 20  olumns \..      
0cf0: 20 20 20 20 5b 66 6f 72 44 69 73 70 6c 61 79 20      [forDisplay 
0d00: 24 69 74 65 6d 20 50 72 69 6d 61 72 79 4b 65 79  $item PrimaryKey
0d10: 43 6f 6c 75 6d 6e 73 5d 0d 0a 0d 0a 20 20 20 20  Columns]....    
0d20: 20 20 69 66 20 7b 24 69 6e 63 6c 75 64 65 56 61    if {$includeVa
0d30: 6c 75 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lues} then {..  
0d40: 20 20 20 20 20 20 73 65 74 20 6e 75 6d 62 65 72        set number
0d50: 4f 66 43 6f 6c 75 6d 6e 73 20 5b 24 69 74 65 6d  OfColumns [$item
0d60: 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73   NumberOfColumns
0d70: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  ]....        for
0d80: 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b   {set index 0} {
0d90: 24 69 6e 64 65 78 20 3c 20 24 6e 75 6d 62 65 72  $index < $number
0da0: 4f 66 43 6f 6c 75 6d 6e 73 7d 20 7b 69 6e 63 72  OfColumns} {incr
0db0: 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..     
0dc0: 20 20 20 20 20 73 65 74 20 6f 6c 64 56 61 6c 75       set oldValu
0dd0: 65 20 5b 24 69 74 65 6d 20 47 65 74 4f 6c 64 56  e [$item GetOldV
0de0: 61 6c 75 65 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a  alue $index]....
0df0: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
0e00: 64 20 72 65 73 75 6c 74 20 4f 6c 64 56 61 6c 75  d result OldValu
0e10: 65 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20  e $index \..    
0e20: 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 44 69            [forDi
0e30: 73 70 6c 61 79 20 24 6f 6c 64 56 61 6c 75 65 20  splay $oldValue 
0e40: 47 65 74 4f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20  GetObject]....  
0e50: 20 20 20 20 20 20 20 20 73 65 74 20 6e 65 77 56          set newV
0e60: 61 6c 75 65 20 5b 24 69 74 65 6d 20 47 65 74 4e  alue [$item GetN
0e70: 65 77 56 61 6c 75 65 20 24 69 6e 64 65 78 5d 0d  ewValue $index].
0e80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70  ...          lap
0e90: 70 65 6e 64 20 72 65 73 75 6c 74 20 4e 65 77 56  pend result NewV
0ea0: 61 6c 75 65 20 24 69 6e 64 65 78 20 5c 0d 0a 20  alue $index \.. 
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f               [fo
0ec0: 72 44 69 73 70 6c 61 79 20 24 6e 65 77 56 61 6c  rDisplay $newVal
0ed0: 75 65 20 47 65 74 4f 62 6a 65 63 74 5d 0d 0a 0d  ue GetObject]...
0ee0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63  .          set c
0ef0: 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 5b 24 69  onflictValue [$i
0f00: 74 65 6d 20 47 65 74 43 6f 6e 66 6c 69 63 74 56  tem GetConflictV
0f10: 61 6c 75 65 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a  alue $index]....
0f20: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
0f30: 64 20 72 65 73 75 6c 74 20 43 6f 6e 66 6c 69 63  d result Conflic
0f40: 74 56 61 6c 75 65 20 24 69 6e 64 65 78 20 5c 0d  tValue $index \.
0f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
0f60: 66 6f 72 44 69 73 70 6c 61 79 20 24 63 6f 6e 66  forDisplay $conf
0f70: 6c 69 63 74 56 61 6c 75 65 20 47 65 74 4f 62 6a  lictValue GetObj
0f80: 65 63 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ect]..        }.
0f90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
0fa0: 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  .  }....  return
0fb0: 20 24 72 65 73 75 6c 74 0d 0a 7d 0d 0a 0d 0a 23   $result..}....#
0fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1010: 0d 0a 70 72 6f 63 20 6d 61 74 63 68 53 65 73 73  ..proc matchSess
1020: 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e  ion { connection
1030: 20 73 65 73 73 69 6f 6e 20 65 78 70 72 20 7d 20   session expr } 
1040: 7b 0d 0a 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65  {..  if {[isObje
1050: 63 74 48 61 6e 64 6c 65 20 24 73 65 73 73 69 6f  ctHandle $sessio
1060: 6e 5d 20 26 26 20 24 73 65 73 73 69 6f 6e 20 6e  n] && $session n
1070: 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b  e "null"} then {
1080: 0d 0a 20 20 20 20 69 66 20 7b 21 5b 24 73 65 73  ..    if {![$ses
1090: 73 69 6f 6e 20 49 73 45 6d 70 74 79 5d 7d 20 74  sion IsEmpty]} t
10a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  hen {..      set
10b0: 20 72 61 77 44 61 74 61 20 5b 63 72 65 61 74 65   rawData [create
10c0: 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73  ChangeSetForSess
10d0: 69 6f 6e 20 24 73 65 73 73 69 6f 6e 5d 0d 0a 20  ion $session].. 
10e0: 20 20 20 20 20 6f 62 6a 65 63 74 20 72 65 6d 6f       object remo
10f0: 76 65 72 65 66 20 24 72 61 77 44 61 74 61 0d 0a  veref $rawData..
1100: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 4f  ..      if {[isO
1110: 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 72 61 77  bjectHandle $raw
1120: 44 61 74 61 5d 20 26 26 20 24 72 61 77 44 61 74  Data] && $rawDat
1130: 61 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65  a ne "null"} the
1140: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
1150: 75 72 6e 20 5b 6d 61 74 63 68 43 68 61 6e 67 65  urn [matchChange
1160: 53 65 74 20 5b 73 65 74 20 63 68 61 6e 67 65 53  Set [set changeS
1170: 65 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  et \..          
1180: 20 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d    [$connection -
1190: 61 6c 69 61 73 20 43 72 65 61 74 65 43 68 61 6e  alias CreateChan
11a0: 67 65 53 65 74 20 24 72 61 77 44 61 74 61 5d 5d  geSet $rawData]]
11b0: 20 24 65 78 70 72 5d 0d 0a 20 20 20 20 20 20 7d   $expr]..      }
11c0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
11d0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
11e0: 7d 0d 0a 0d 0a 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 23 23 23 23 23 23 23 23 23  ################
1220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1230: 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 6d 61 74  ####....proc mat
1240: 63 68 43 68 61 6e 67 65 53 65 74 20 7b 20 63 68  chChangeSet { ch
1250: 61 6e 67 65 53 65 74 20 65 78 70 72 20 7d 20 7b  angeSet expr } {
1260: 0d 0a 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63  ..  if {[isObjec
1270: 74 48 61 6e 64 6c 65 20 24 63 68 61 6e 67 65 53  tHandle $changeS
1280: 65 74 5d 20 26 26 20 24 63 68 61 6e 67 65 53 65  et] && $changeSe
1290: 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65  t ne "null"} the
12a0: 6e 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20  n {..    object 
12b0: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69  foreach -alias i
12c0: 74 65 6d 20 24 63 68 61 6e 67 65 53 65 74 20 7b  tem $changeSet {
12d0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 65 78 70  ..      if {[exp
12e0: 72 20 24 65 78 70 72 5d 7d 20 74 68 65 6e 20 7b  r $expr]} then {
12f0: 72 65 74 75 72 6e 20 74 72 75 65 7d 0d 0a 20 20  return true}..  
1300: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65    }..  }....  re
1310: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 7d 0d 0a 0d  turn false..}...
1320: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1370: 0d 0a 0d 0a 70 72 6f 63 20 63 72 65 61 74 65 54  ....proc createT
1380: 68 65 53 63 68 65 6d 61 20 7b 20 64 62 20 7d 20  heSchema { db } 
1390: 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  {..  sql execute
13a0: 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41   $db {..    CREA
13b0: 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e  TE TABLE t1(x IN
13c0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
13d0: 59 2c 20 79 20 54 45 58 54 29 3b 0d 0a 20 20 20  Y, y TEXT);..   
13e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
13f0: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
1400: 52 59 20 4b 45 59 2c 20 79 20 54 45 58 54 29 3b  RY KEY, y TEXT);
1410: 0d 0a 20 20 7d 0d 0a 7d 0d 0a 0d 0a 23 23 23 23  ..  }..}....####
1420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1460: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70  ###########....p
1470: 72 6f 63 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e  roc makeSomeChan
1480: 67 65 73 20 7b 20 64 62 20 74 61 62 6c 65 20 74  ges { db table t
1490: 79 70 65 73 20 72 61 6e 64 6f 6d 20 7b 63 6f 75  ypes random {cou
14a0: 6e 74 20 35 7d 20 7d 20 7b 0d 0a 20 20 66 6f 72  nt 5} } {..  for
14b0: 65 61 63 68 20 74 79 70 65 20 24 74 79 70 65 73  each type $types
14c0: 20 7b 0d 0a 20 20 20 20 73 77 69 74 63 68 20 2d   {..    switch -
14d0: 6e 6f 63 61 73 65 20 2d 2d 20 24 74 79 70 65 20  nocase -- $type 
14e0: 7b 0d 0a 20 20 20 20 20 20 69 6e 73 65 72 74 20  {..      insert 
14f0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
1500: 65 78 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ext [appendArgs 
1510: 22 69 6e 73 65 72 74 65 64 3a 20 22 20 5b 67 65  "inserted: " [ge
1520: 74 53 6f 6d 65 54 65 78 74 20 24 72 61 6e 64 6f  tSomeText $rando
1530: 6d 20 24 63 6f 75 6e 74 5d 5d 0d 0a 0d 0a 20 20  m $count]]....  
1540: 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
1550: 65 20 24 64 62 20 5b 73 75 62 73 74 20 7b 0d 0a  e $db [subst {..
1560: 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54            INSERT
1570: 20 49 4e 54 4f 20 24 7b 74 61 62 6c 65 7d 28 79   INTO ${table}(y
1580: 29 20 56 41 4c 55 45 53 28 3f 29 3b 0d 0a 20 20  ) VALUES(?);..  
1590: 20 20 20 20 20 20 7d 5d 20 5b 6c 69 73 74 20 70        }] [list p
15a0: 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 74 65  aram1 String $te
15b0: 78 74 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  xt]..      }..  
15c0: 20 20 20 20 75 70 64 61 74 65 20 7b 0d 0a 20 20      update {..  
15d0: 20 20 20 20 20 20 73 65 74 20 74 65 78 74 20 5b        set text [
15e0: 61 70 70 65 6e 64 41 72 67 73 20 22 75 70 64 61  appendArgs "upda
15f0: 74 65 64 3a 20 22 20 5b 67 65 74 53 6f 6d 65 54  ted: " [getSomeT
1600: 65 78 74 20 24 72 61 6e 64 6f 6d 20 24 63 6f 75  ext $random $cou
1610: 6e 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt]]....        
1620: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
1630: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 20 20  [subst {..      
1640: 20 20 20 20 55 50 44 41 54 45 20 24 7b 74 61 62      UPDATE ${tab
1650: 6c 65 7d 20 53 45 54 20 79 20 3d 20 3f 20 57 48  le} SET y = ? WH
1660: 45 52 45 20 78 20 4e 4f 54 20 49 4e 20 28 0d 0a  ERE x NOT IN (..
1670: 20 20 20 20 20 20 20 20 20 20 20 20 28 53 45 4c              (SEL
1680: 45 43 54 20 4d 49 4e 28 78 29 20 46 52 4f 4d 20  ECT MIN(x) FROM 
1690: 24 7b 74 61 62 6c 65 7d 29 2c 20 28 53 45 4c 45  ${table}), (SELE
16a0: 43 54 20 4d 41 58 28 78 29 20 46 52 4f 4d 20 24  CT MAX(x) FROM $
16b0: 7b 74 61 62 6c 65 7d 29 0d 0a 20 20 20 20 20 20  {table})..      
16c0: 20 20 20 20 29 3b 0d 0a 20 20 20 20 20 20 20 20      );..        
16d0: 7d 5d 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20  }] [list param1 
16e0: 53 74 72 69 6e 67 20 24 74 65 78 74 5d 0d 0a 20  String $text].. 
16f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 64 65       }..      de
1700: 6c 65 74 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  lete {..        
1710: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
1720: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 20 20  [subst {..      
1730: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1740: 24 7b 74 61 62 6c 65 7d 20 57 48 45 52 45 20 78  ${table} WHERE x
1750: 20 3d 20 28 53 45 4c 45 43 54 20 4d 49 4e 28 78   = (SELECT MIN(x
1760: 29 20 46 52 4f 4d 20 24 7b 74 61 62 6c 65 7d 29  ) FROM ${table})
1770: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20  ;..        }].. 
1780: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
1790: 20 7d 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23   }..}....#######
17a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17e0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63  ########....proc
17f0: 20 67 65 74 43 68 61 6e 67 65 53 65 74 46 69 6c   getChangeSetFil
1800: 65 4e 61 6d 65 20 7b 20 7b 73 75 66 66 69 78 20  eName { {suffix 
1810: 22 22 7d 20 7d 20 7b 0d 0a 20 20 72 65 74 75 72  ""} } {..  retur
1820: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  n [file join \..
1830: 20 20 20 20 20 20 5b 67 65 74 54 65 6d 70 6f 72        [getTempor
1840: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5b 61  aryDirectory] [a
1850: 70 70 65 6e 64 41 72 67 73 20 63 68 61 6e 67 65  ppendArgs change
1860: 73 20 24 73 75 66 66 69 78 20 2e 62 69 6e 5d 5d  s $suffix .bin]]
1870: 0d 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  ..}....#########
1880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c0: 23 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 61  ######....proc a
18d0: 72 72 61 79 54 6f 4c 69 73 74 20 7b 20 76 61 72  rrayToList { var
18e0: 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 73 65 74 20  Name } {..  set 
18f0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
1900: 0a 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e  .  upvar 1 $varN
1910: 61 6d 65 20 61 72 72 61 79 0d 0a 0d 0a 20 20 69  ame array....  i
1920: 66 20 7b 5b 61 72 72 61 79 20 65 78 69 73 74 73  f {[array exists
1930: 20 61 72 72 61 79 5d 7d 20 74 68 65 6e 20 7b 0d   array]} then {.
1940: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d  .    foreach nam
1950: 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65  e [lsort -intege
1960: 72 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 61  r [array names a
1970: 72 72 61 79 5d 5d 20 7b 0d 0a 20 20 20 20 20 20  rray]] {..      
1980: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $
1990: 61 72 72 61 79 28 24 6e 61 6d 65 29 0d 0a 20 20  array($name)..  
19a0: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65    }..  }....  re
19b0: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 7d 0d  turn $result..}.
19c0: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
19d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a10: 23 23 0d 0a 0d 0a 70 72 6f 63 20 63 72 65 61 74  ##....proc creat
1a20: 65 42 79 74 65 41 72 72 61 79 20 7b 20 6c 69 73  eByteArray { lis
1a30: 74 20 7d 20 7b 0d 0a 20 20 73 65 74 20 6c 65 6e  t } {..  set len
1a40: 67 74 68 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69  gth [llength $li
1a50: 73 74 5d 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  st]..  set resul
1a60: 74 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65  t [object create
1a70: 20 2d 61 6c 69 61 73 20 53 79 73 74 65 6d 2e 42   -alias System.B
1a80: 79 74 65 5c 5b 5c 5d 20 24 6c 65 6e 67 74 68 5d  yte\[\] $length]
1a90: 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  ....  for {set i
1aa0: 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20  ndex 0} {$index 
1ab0: 3c 20 24 6c 65 6e 67 74 68 7d 20 7b 69 6e 63 72  < $length} {incr
1ac0: 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 73   index} {..    s
1ad0: 65 74 20 65 6c 65 6d 65 6e 74 20 5b 6c 69 6e 64  et element [lind
1ae0: 65 78 20 24 6c 69 73 74 20 24 69 6e 64 65 78 5d  ex $list $index]
1af0: 0d 0a 20 20 20 20 73 65 74 20 76 61 6c 75 65 20  ..    set value 
1b00: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
1b10: 63 72 65 61 74 65 20 42 79 74 65 20 50 61 72 73  create Byte Pars
1b20: 65 20 24 65 6c 65 6d 65 6e 74 5d 0d 0a 20 20 20  e $element]..   
1b30: 20 24 72 65 73 75 6c 74 20 53 65 74 56 61 6c 75   $result SetValu
1b40: 65 20 24 76 61 6c 75 65 20 24 69 6e 64 65 78 0d  e $value $index.
1b50: 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75 72 6e  .  }....  return
1b60: 20 24 72 65 73 75 6c 74 0d 0a 7d 0d 0a 0d 0a 23   $result..}....#
1b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b90: 23 23 23 23 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 0d 0a  ##############..
1bc0: 0d 0a 70 72 6f 63 20 74 61 62 6c 65 46 69 6c 74  ..proc tableFilt
1bd0: 65 72 43 61 6c 6c 62 61 63 6b 54 31 20 7b 20 63  erCallbackT1 { c
1be0: 6c 69 65 6e 74 44 61 74 61 20 6e 61 6d 65 20 7d  lientData name }
1bf0: 20 7b 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a   {..  lappend ::
1c00: 63 61 6c 6c 62 61 63 6b 52 65 73 75 6c 74 73 20  callbackResults 
1c10: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
1c20: 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20  create \..      
1c30: 53 79 73 74 65 6d 2e 42 6f 6f 6c 65 61 6e 20 50  System.Boolean P
1c40: 61 72 73 65 20 5b 65 78 70 72 20 7b 5b 24 6e 61  arse [expr {[$na
1c50: 6d 65 20 54 6f 53 74 72 69 6e 67 5d 20 69 6e 20  me ToString] in 
1c60: 5b 6c 69 73 74 20 74 31 5d 7d 5d 5d 0d 0a 0d 0a  [list t1]}]]....
1c70: 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78    return [lindex
1c80: 20 24 3a 3a 63 61 6c 6c 62 61 63 6b 52 65 73 75   $::callbackResu
1c90: 6c 74 73 20 65 6e 64 5d 0d 0a 7d 0d 0a 0d 0a 23  lts end]..}....#
1ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1cf0: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1d00: 73 65 73 73 69 6f 6e 2d 31 2e 31 20 7b 62 61 73  session-1.1 {bas
1d10: 69 63 20 73 65 73 73 69 6f 6e 20 65 78 74 65 6e  ic session exten
1d20: 73 69 6f 6e 20 75 73 61 67 65 7d 20 2d 73 65 74  sion usage} -set
1d30: 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
1d40: 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 30 29  [set fileName(0)
1d50: 20 73 65 73 73 69 6f 6e 2d 31 2e 31 2e 64 62 5d   session-1.1.db]
1d60: 0d 0a 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61  ....  set fileNa
1d70: 6d 65 28 31 29 20 5b 67 65 74 43 68 61 6e 67 65  me(1) [getChange
1d80: 53 65 74 46 69 6c 65 4e 61 6d 65 20 31 5d 0d 0a  SetFileName 1]..
1d90: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32    set fileName(2
1da0: 29 20 5b 67 65 74 43 68 61 6e 67 65 53 65 74 46  ) [getChangeSetF
1db0: 69 6c 65 4e 61 6d 65 20 32 5d 0d 0a 0d 0a 20 20  ileName 2]....  
1dc0: 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d  cleanupSomeText.
1dd0: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 63 72  .} -body {..  cr
1de0: 65 61 74 65 54 68 65 53 63 68 65 6d 61 20 24 64  eateTheSchema $d
1df0: 62 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61  b..  makeSomeCha
1e00: 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c 69 73  nges $db t1 [lis
1e10: 74 20 69 6e 73 65 72 74 5d 20 74 72 75 65 0d 0a  t insert] true..
1e20: 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69  ..  set connecti
1e30: 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74  on [getDbConnect
1e40: 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 65  ion]....  set se
1e50: 73 73 69 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74 69  ssion [$connecti
1e60: 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61 74 65  on -alias Create
1e70: 53 65 73 73 69 6f 6e 20 6d 61 69 6e 5d 0d 0a 20  Session main].. 
1e80: 20 24 73 65 73 73 69 6f 6e 20 41 74 74 61 63 68   $session Attach
1e90: 54 61 62 6c 65 20 6e 75 6c 6c 0d 0a 0d 0a 20 20  Table null....  
1ea0: 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20  makeSomeChanges 
1eb0: 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73  $db t1 [list ins
1ec0: 65 72 74 20 75 70 64 61 74 65 20 64 65 6c 65 74  ert update delet
1ed0: 65 5d 20 74 72 75 65 0d 0a 0d 0a 20 20 73 65 74  e] true....  set
1ee0: 20 72 61 77 44 61 74 61 20 5b 63 72 65 61 74 65   rawData [create
1ef0: 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73  ChangeSetForSess
1f00: 69 6f 6e 20 24 73 65 73 73 69 6f 6e 5d 0d 0a 20  ion $session].. 
1f10: 20 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 72 65   object removere
1f20: 66 20 24 72 61 77 44 61 74 61 0d 0a 0d 0a 20 20  f $rawData....  
1f30: 73 65 74 20 73 74 72 65 61 6d 28 31 29 20 5b 6f  set stream(1) [o
1f40: 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c  bject create -al
1f50: 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 53 79 73  ias \..      Sys
1f60: 74 65 6d 2e 49 4f 2e 46 69 6c 65 53 74 72 65 61  tem.IO.FileStrea
1f70: 6d 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 43  m $fileName(1) C
1f80: 72 65 61 74 65 20 57 72 69 74 65 5d 0d 0a 0d 0a  reate Write]....
1f90: 20 20 24 73 74 72 65 61 6d 28 31 29 20 57 72 69    $stream(1) Wri
1fa0: 74 65 20 24 72 61 77 44 61 74 61 20 30 20 5b 24  te $rawData 0 [$
1fb0: 72 61 77 44 61 74 61 20 4c 65 6e 67 74 68 5d 0d  rawData Length].
1fc0: 0a 20 20 24 73 74 72 65 61 6d 28 31 29 20 46 6c  .  $stream(1) Fl
1fd0: 75 73 68 3b 20 24 73 74 72 65 61 6d 28 31 29 20  ush; $stream(1) 
1fe0: 43 6c 6f 73 65 0d 0a 0d 0a 20 20 73 65 74 20 73  Close....  set s
1ff0: 74 72 65 61 6d 28 32 29 20 5b 6f 62 6a 65 63 74  tream(2) [object
2000: 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
2010: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 49  ..      System.I
2020: 4f 2e 46 69 6c 65 53 74 72 65 61 6d 20 24 66 69  O.FileStream $fi
2030: 6c 65 4e 61 6d 65 28 32 29 20 43 72 65 61 74 65  leName(2) Create
2040: 20 57 72 69 74 65 5d 0d 0a 0d 0a 20 20 24 73 65   Write]....  $se
2050: 73 73 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65  ssion -alias Cre
2060: 61 74 65 43 68 61 6e 67 65 53 65 74 20 24 73 74  ateChangeSet $st
2070: 72 65 61 6d 28 32 29 0d 0a 20 20 24 73 74 72 65  ream(2)..  $stre
2080: 61 6d 28 32 29 20 46 6c 75 73 68 3b 20 24 73 74  am(2) Flush; $st
2090: 72 65 61 6d 28 32 29 20 43 6c 6f 73 65 0d 0a 0d  ream(2) Close...
20a0: 0a 20 20 6c 69 73 74 20 5b 65 78 70 72 20 7b 5b  .  list [expr {[
20b0: 66 69 6c 65 20 73 69 7a 65 20 24 66 69 6c 65 4e  file size $fileN
20c0: 61 6d 65 28 31 29 5d 20 3e 20 30 7d 5d 20 5c 0d  ame(1)] > 0}] \.
20d0: 0a 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 65  .      [string e
20e0: 71 75 61 6c 20 5b 72 65 61 64 46 69 6c 65 20 24  qual [readFile $
20f0: 66 69 6c 65 4e 61 6d 65 28 31 29 5d 20 5b 72 65  fileName(1)] [re
2100: 61 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  adFile $fileName
2110: 28 32 29 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  (2)]]..} -cleanu
2120: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 53 6f  p {..  cleanupSo
2130: 6d 65 54 65 78 74 0d 0a 0d 0a 20 20 75 6e 73 65  meText....  unse
2140: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 74  t -nocomplain st
2150: 72 65 61 6d 20 72 61 77 44 61 74 61 20 62 79 74  ream rawData byt
2160: 65 41 72 72 61 79 20 73 65 73 73 69 6f 6e 0d 0a  eArray session..
2170: 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  ..  freeDbConnec
2180: 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  tion....  unset 
2190: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 6e  -nocomplain conn
21a0: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61  ection....  clea
21b0: 6e 75 70 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  nupFile $fileNam
21c0: 65 28 32 29 0d 0a 20 20 63 6c 65 61 6e 75 70 46  e(2)..  cleanupF
21d0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  ile $fileName(1)
21e0: 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
21f0: 24 66 69 6c 65 4e 61 6d 65 28 30 29 0d 0a 0d 0a  $fileName(0)....
2200: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
2210: 61 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ain db fileName.
2220: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
2230: 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
2240: 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
2250: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
2260: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c  ile.DATA SQLite\
2270: 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ..System.Data.SQ
2280: 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72  Lite SQLiteInter
2290: 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  op\..defineConst
22a0: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
22b0: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 53  SQLite.INTEROP_S
22c0: 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e  ESSION_EXTENSION
22d0: 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 54 72  } -result \..{Tr
22e0: 75 65 20 54 72 75 65 7d 7d 0d 0a 0d 0a 23 23 23  ue True}}....###
22f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2330: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
2340: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 73 65  runTest {test se
2350: 73 73 69 6f 6e 2d 31 2e 32 20 7b 73 65 73 73 69  ssion-1.2 {sessi
2360: 6f 6e 20 63 68 61 6e 67 65 20 73 65 74 20 65 6e  on change set en
2370: 75 6d 65 72 61 74 69 6f 6e 7d 20 2d 73 65 74 75  umeration} -setu
2380: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
2390: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 73 65 73  set fileName ses
23a0: 73 69 6f 6e 2d 31 2e 32 2e 64 62 5d 0d 0a 0d 0a  sion-1.2.db]....
23b0: 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78    cleanupSomeTex
23c0: 74 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  t..} -body {..  
23d0: 63 72 65 61 74 65 54 68 65 53 63 68 65 6d 61 20  createTheSchema 
23e0: 24 64 62 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43  $db..  makeSomeC
23f0: 68 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c  hanges $db t1 [l
2400: 69 73 74 20 69 6e 73 65 72 74 20 69 6e 73 65 72  ist insert inser
2410: 74 20 69 6e 73 65 72 74 5d 20 66 61 6c 73 65 0d  t insert] false.
2420: 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  ...  set connect
2430: 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
2440: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  tion]....  set s
2450: 65 73 73 69 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74  ession [$connect
2460: 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61 74  ion -alias Creat
2470: 65 53 65 73 73 69 6f 6e 20 6d 61 69 6e 5d 0d 0a  eSession main]..
2480: 20 20 24 73 65 73 73 69 6f 6e 20 41 74 74 61 63    $session Attac
2490: 68 54 61 62 6c 65 20 6e 75 6c 6c 0d 0a 0d 0a 20  hTable null.... 
24a0: 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73   makeSomeChanges
24b0: 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e   $db t1 [list in
24c0: 73 65 72 74 20 75 70 64 61 74 65 20 64 65 6c 65  sert update dele
24d0: 74 65 5d 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73  te] false....  s
24e0: 65 74 20 72 61 77 44 61 74 61 20 5b 63 72 65 61  et rawData [crea
24f0: 74 65 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65  teChangeSetForSe
2500: 73 73 69 6f 6e 20 24 73 65 73 73 69 6f 6e 5d 0d  ssion $session].
2510: 0a 20 20 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65  .  object remove
2520: 72 65 66 20 24 72 61 77 44 61 74 61 0d 0a 0d 0a  ref $rawData....
2530: 20 20 73 65 74 20 63 68 61 6e 67 65 53 65 74 28    set changeSet(
2540: 31 29 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  1) [$connection 
2550: 2d 61 6c 69 61 73 20 43 72 65 61 74 65 43 68 61  -alias CreateCha
2560: 6e 67 65 53 65 74 20 24 72 61 77 44 61 74 61 5d  ngeSet $rawData]
2570: 0d 0a 20 20 73 65 74 20 63 68 61 6e 67 65 53 65  ..  set changeSe
2580: 74 28 32 29 20 5b 24 63 68 61 6e 67 65 53 65 74  t(2) [$changeSet
2590: 28 31 29 20 2d 61 6c 69 61 73 20 49 6e 76 65 72  (1) -alias Inver
25a0: 74 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 63 68  t]....  list [ch
25b0: 61 6e 67 65 53 65 74 54 6f 53 74 72 69 6e 67 20  angeSetToString 
25c0: 24 63 68 61 6e 67 65 53 65 74 28 31 29 20 74 72  $changeSet(1) tr
25d0: 75 65 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 68  ue] \..      [ch
25e0: 61 6e 67 65 53 65 74 54 6f 53 74 72 69 6e 67 20  angeSetToString 
25f0: 24 63 68 61 6e 67 65 53 65 74 28 32 29 20 74 72  $changeSet(2) tr
2600: 75 65 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ue]..} -cleanup 
2610: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 53 6f 6d 65  {..  cleanupSome
2620: 54 65 78 74 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Text....  unset 
2630: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 68 61 6e  -nocomplain chan
2640: 67 65 53 65 74 20 72 61 77 44 61 74 61 20 62 79  geSet rawData by
2650: 74 65 41 72 72 61 79 20 73 65 73 73 69 6f 6e 0d  teArray session.
2660: 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65  ...  freeDbConne
2670: 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74  ction....  unset
2680: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e   -nocomplain con
2690: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65  nection....  cle
26a0: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
26b0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
26c0: 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e  omplain db fileN
26d0: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
26e0: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
26f0: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
2700: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
2710: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
2720: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
2730: 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49  a.SQLite SQLiteI
2740: 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43  nterop\..defineC
2750: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
2760: 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
2770: 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e  OP_SESSION_EXTEN
2780: 53 49 4f 4e 7d 20 2d 72 65 73 75 6c 74 20 5c 0d  SION} -result \.
2790: 0a 7b 7b 54 61 62 6c 65 4e 61 6d 65 20 74 31 20  .{{TableName t1 
27a0: 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20  NumberOfColumns 
27b0: 32 20 4f 70 65 72 61 74 69 6f 6e 43 6f 64 65 20  2 OperationCode 
27c0: 44 65 6c 65 74 65 20 49 6e 64 69 72 65 63 74 20  Delete Indirect 
27d0: 46 61 6c 73 65 5c 0d 0a 50 72 69 6d 61 72 79 4b  False\..PrimaryK
27e0: 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75 65  eyColumns {[True
27f0: 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c  , False]} OldVal
2800: 75 65 20 30 20 31 20 4e 65 77 56 61 6c 75 65 20  ue 0 1 NewValue 
2810: 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 5c 0d  0 <nullObject>\.
2820: 0a 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 30  .ConflictValue 0
2830: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4f 6c   <nullObject> Ol
2840: 64 56 61 6c 75 65 20 31 20 7b 22 69 6e 73 65 72  dValue 1 {"inser
2850: 74 65 64 3a 20 41 6c 70 68 61 20 42 72 61 76 6f  ted: Alpha Bravo
2860: 20 43 68 61 72 6c 69 65 20 44 65 6c 74 61 5c 0d   Charlie Delta\.
2870: 0a 45 63 68 6f 22 7d 20 4e 65 77 56 61 6c 75 65  .Echo"} NewValue
2880: 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20   1 <nullObject> 
2890: 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 31 20  ConflictValue 1 
28a0: 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 54 61 62  <nullObject> Tab
28b0: 6c 65 4e 61 6d 65 20 74 31 5c 0d 0a 4e 75 6d 62  leName t1\..Numb
28c0: 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32 20 4f 70  erOfColumns 2 Op
28d0: 65 72 61 74 69 6f 6e 43 6f 64 65 20 55 70 64 61  erationCode Upda
28e0: 74 65 20 49 6e 64 69 72 65 63 74 20 46 61 6c 73  te Indirect Fals
28f0: 65 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75  e PrimaryKeyColu
2900: 6d 6e 73 20 7b 5b 54 72 75 65 2c 5c 0d 0a 46 61  mns {[True,\..Fa
2910: 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75 65 20 30  lse]} OldValue 0
2920: 20 32 20 4e 65 77 56 61 6c 75 65 20 30 20 3c 6e   2 NewValue 0 <n
2930: 75 6c 6c 4f 62 6a 65 63 74 3e 20 43 6f 6e 66 6c  ullObject> Confl
2940: 69 63 74 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c  ictValue 0 <null
2950: 4f 62 6a 65 63 74 3e 5c 0d 0a 4f 6c 64 56 61 6c  Object>\..OldVal
2960: 75 65 20 31 20 7b 22 69 6e 73 65 72 74 65 64 3a  ue 1 {"inserted:
2970: 20 46 6f 78 74 72 6f 74 20 47 6f 6c 66 20 48 6f   Foxtrot Golf Ho
2980: 74 65 6c 20 49 6e 64 69 61 20 4a 75 6c 69 65 74  tel India Juliet
2990: 22 7d 20 4e 65 77 56 61 6c 75 65 20 31 20 7b 22  "} NewValue 1 {"
29a0: 75 70 64 61 74 65 64 3a 5c 0d 0a 55 6e 69 66 6f  updated:\..Unifo
29b0: 72 6d 20 56 69 63 74 6f 72 20 57 68 69 73 6b 65  rm Victor Whiske
29c0: 79 20 58 2d 72 61 79 20 59 61 6e 6b 65 65 22 7d  y X-ray Yankee"}
29d0: 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 31   ConflictValue 1
29e0: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 54 61   <nullObject> Ta
29f0: 62 6c 65 4e 61 6d 65 20 74 31 5c 0d 0a 4e 75 6d  bleName t1\..Num
2a00: 62 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32 20 4f  berOfColumns 2 O
2a10: 70 65 72 61 74 69 6f 6e 43 6f 64 65 20 55 70 64  perationCode Upd
2a20: 61 74 65 20 49 6e 64 69 72 65 63 74 20 46 61 6c  ate Indirect Fal
2a30: 73 65 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c  se PrimaryKeyCol
2a40: 75 6d 6e 73 20 7b 5b 54 72 75 65 2c 5c 0d 0a 46  umns {[True,\..F
2a50: 61 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75 65 20  alse]} OldValue 
2a60: 30 20 33 20 4e 65 77 56 61 6c 75 65 20 30 20 3c  0 3 NewValue 0 <
2a70: 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 43 6f 6e 66  nullObject> Conf
2a80: 6c 69 63 74 56 61 6c 75 65 20 30 20 3c 6e 75 6c  lictValue 0 <nul
2a90: 6c 4f 62 6a 65 63 74 3e 5c 0d 0a 4f 6c 64 56 61  lObject>\..OldVa
2aa0: 6c 75 65 20 31 20 7b 22 69 6e 73 65 72 74 65 64  lue 1 {"inserted
2ab0: 3a 20 4b 69 6c 6f 20 4c 69 6d 61 20 4d 69 6b 65  : Kilo Lima Mike
2ac0: 20 4e 6f 76 65 6d 62 65 72 20 4f 73 63 61 72 22   November Oscar"
2ad0: 7d 20 4e 65 77 56 61 6c 75 65 20 31 20 7b 22 75  } NewValue 1 {"u
2ae0: 70 64 61 74 65 64 3a 5c 0d 0a 55 6e 69 66 6f 72  pdated:\..Unifor
2af0: 6d 20 56 69 63 74 6f 72 20 57 68 69 73 6b 65 79  m Victor Whiskey
2b00: 20 58 2d 72 61 79 20 59 61 6e 6b 65 65 22 7d 20   X-ray Yankee"} 
2b10: 43 6f 6e 66 6c 69 63 74 56 61 6c 75 65 20 31 20  ConflictValue 1 
2b20: 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 54 61 62  <nullObject> Tab
2b30: 6c 65 4e 61 6d 65 20 74 31 5c 0d 0a 4e 75 6d 62  leName t1\..Numb
2b40: 65 72 4f 66 43 6f 6c 75 6d 6e 73 20 32 20 4f 70  erOfColumns 2 Op
2b50: 65 72 61 74 69 6f 6e 43 6f 64 65 20 49 6e 73 65  erationCode Inse
2b60: 72 74 20 49 6e 64 69 72 65 63 74 20 46 61 6c 73  rt Indirect Fals
2b70: 65 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75  e PrimaryKeyColu
2b80: 6d 6e 73 20 7b 5b 54 72 75 65 2c 5c 0d 0a 46 61  mns {[True,\..Fa
2b90: 6c 73 65 5d 7d 20 4f 6c 64 56 61 6c 75 65 20 30  lse]} OldValue 0
2ba0: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4e 65   <nullObject> Ne
2bb0: 77 56 61 6c 75 65 20 30 20 34 20 43 6f 6e 66 6c  wValue 0 4 Confl
2bc0: 69 63 74 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c  ictValue 0 <null
2bd0: 4f 62 6a 65 63 74 3e 5c 0d 0a 4f 6c 64 56 61 6c  Object>\..OldVal
2be0: 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 1 <nullObject
2bf0: 3e 20 4e 65 77 56 61 6c 75 65 20 31 20 7b 22 69  > NewValue 1 {"i
2c00: 6e 73 65 72 74 65 64 3a 20 50 61 70 61 20 51 75  nserted: Papa Qu
2c10: 65 62 65 63 20 52 6f 6d 65 6f 20 53 69 65 72 72  ebec Romeo Sierr
2c20: 61 20 54 61 6e 67 6f 22 7d 5c 0d 0a 43 6f 6e 66  a Tango"}\..Conf
2c30: 6c 69 63 74 56 61 6c 75 65 20 31 20 3c 6e 75 6c  lictValue 1 <nul
2c40: 6c 4f 62 6a 65 63 74 3e 7d 20 7b 54 61 62 6c 65  lObject>} {Table
2c50: 4e 61 6d 65 20 74 31 20 4e 75 6d 62 65 72 4f 66  Name t1 NumberOf
2c60: 43 6f 6c 75 6d 6e 73 20 32 20 4f 70 65 72 61 74  Columns 2 Operat
2c70: 69 6f 6e 43 6f 64 65 5c 0d 0a 49 6e 73 65 72 74  ionCode\..Insert
2c80: 20 49 6e 64 69 72 65 63 74 20 46 61 6c 73 65 20   Indirect False 
2c90: 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e  PrimaryKeyColumn
2ca0: 73 20 7b 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d  s {[True, False]
2cb0: 7d 20 4f 6c 64 56 61 6c 75 65 20 30 20 3c 6e 75  } OldValue 0 <nu
2cc0: 6c 6c 4f 62 6a 65 63 74 3e 5c 0d 0a 4e 65 77 56  llObject>\..NewV
2cd0: 61 6c 75 65 20 30 20 31 20 43 6f 6e 66 6c 69 63  alue 0 1 Conflic
2ce0: 74 56 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62  tValue 0 <nullOb
2cf0: 6a 65 63 74 3e 20 4f 6c 64 56 61 6c 75 65 20 31  ject> OldValue 1
2d00: 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e 20 4e 65   <nullObject> Ne
2d10: 77 56 61 6c 75 65 20 31 5c 0d 0a 7b 22 69 6e 73  wValue 1\..{"ins
2d20: 65 72 74 65 64 3a 20 41 6c 70 68 61 20 42 72 61  erted: Alpha Bra
2d30: 76 6f 20 43 68 61 72 6c 69 65 20 44 65 6c 74 61  vo Charlie Delta
2d40: 20 45 63 68 6f 22 7d 20 43 6f 6e 66 6c 69 63 74   Echo"} Conflict
2d50: 56 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a  Value 1 <nullObj
2d60: 65 63 74 3e 5c 0d 0a 54 61 62 6c 65 4e 61 6d 65  ect>\..TableName
2d70: 20 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75   t1 NumberOfColu
2d80: 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43  mns 2 OperationC
2d90: 6f 64 65 20 55 70 64 61 74 65 20 49 6e 64 69 72  ode Update Indir
2da0: 65 63 74 20 46 61 6c 73 65 5c 0d 0a 50 72 69 6d  ect False\..Prim
2db0: 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b  aryKeyColumns {[
2dc0: 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c  True, False]} Ol
2dd0: 64 56 61 6c 75 65 20 30 20 32 20 4e 65 77 56 61  dValue 0 2 NewVa
2de0: 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 0 <nullObjec
2df0: 74 3e 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c  t>\..ConflictVal
2e00: 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 0 <nullObject
2e10: 3e 20 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22 75  > OldValue 1 {"u
2e20: 70 64 61 74 65 64 3a 20 55 6e 69 66 6f 72 6d 20  pdated: Uniform 
2e30: 56 69 63 74 6f 72 20 57 68 69 73 6b 65 79 20 58  Victor Whiskey X
2e40: 2d 72 61 79 5c 0d 0a 59 61 6e 6b 65 65 22 7d 20  -ray\..Yankee"} 
2e50: 4e 65 77 56 61 6c 75 65 20 31 20 7b 22 69 6e 73  NewValue 1 {"ins
2e60: 65 72 74 65 64 3a 20 46 6f 78 74 72 6f 74 20 47  erted: Foxtrot G
2e70: 6f 6c 66 20 48 6f 74 65 6c 20 49 6e 64 69 61 20  olf Hotel India 
2e80: 4a 75 6c 69 65 74 22 7d 20 43 6f 6e 66 6c 69 63  Juliet"} Conflic
2e90: 74 56 61 6c 75 65 5c 0d 0a 31 20 3c 6e 75 6c 6c  tValue\..1 <null
2ea0: 4f 62 6a 65 63 74 3e 20 54 61 62 6c 65 4e 61 6d  Object> TableNam
2eb0: 65 20 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c  e t1 NumberOfCol
2ec0: 75 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e  umns 2 Operation
2ed0: 43 6f 64 65 20 55 70 64 61 74 65 20 49 6e 64 69  Code Update Indi
2ee0: 72 65 63 74 5c 0d 0a 46 61 6c 73 65 20 50 72 69  rect\..False Pri
2ef0: 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b  maryKeyColumns {
2f00: 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f  [True, False]} O
2f10: 6c 64 56 61 6c 75 65 20 30 20 33 20 4e 65 77 56  ldValue 0 3 NewV
2f20: 61 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65  alue 0 <nullObje
2f30: 63 74 3e 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61  ct>\..ConflictVa
2f40: 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 0 <nullObjec
2f50: 74 3e 20 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22  t> OldValue 1 {"
2f60: 75 70 64 61 74 65 64 3a 20 55 6e 69 66 6f 72 6d  updated: Uniform
2f70: 20 56 69 63 74 6f 72 20 57 68 69 73 6b 65 79 20   Victor Whiskey 
2f80: 58 2d 72 61 79 5c 0d 0a 59 61 6e 6b 65 65 22 7d  X-ray\..Yankee"}
2f90: 20 4e 65 77 56 61 6c 75 65 20 31 20 7b 22 69 6e   NewValue 1 {"in
2fa0: 73 65 72 74 65 64 3a 20 4b 69 6c 6f 20 4c 69 6d  serted: Kilo Lim
2fb0: 61 20 4d 69 6b 65 20 4e 6f 76 65 6d 62 65 72 20  a Mike November 
2fc0: 4f 73 63 61 72 22 7d 20 43 6f 6e 66 6c 69 63 74  Oscar"} Conflict
2fd0: 56 61 6c 75 65 20 31 5c 0d 0a 3c 6e 75 6c 6c 4f  Value 1\..<nullO
2fe0: 62 6a 65 63 74 3e 20 54 61 62 6c 65 4e 61 6d 65  bject> TableName
2ff0: 20 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75   t1 NumberOfColu
3000: 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e 43  mns 2 OperationC
3010: 6f 64 65 20 44 65 6c 65 74 65 20 49 6e 64 69 72  ode Delete Indir
3020: 65 63 74 20 46 61 6c 73 65 5c 0d 0a 50 72 69 6d  ect False\..Prim
3030: 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b  aryKeyColumns {[
3040: 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d 20 4f 6c  True, False]} Ol
3050: 64 56 61 6c 75 65 20 30 20 34 20 4e 65 77 56 61  dValue 0 4 NewVa
3060: 6c 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63  lue 0 <nullObjec
3070: 74 3e 5c 0d 0a 43 6f 6e 66 6c 69 63 74 56 61 6c  t>\..ConflictVal
3080: 75 65 20 30 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74  ue 0 <nullObject
3090: 3e 20 4f 6c 64 56 61 6c 75 65 20 31 20 7b 22 69  > OldValue 1 {"i
30a0: 6e 73 65 72 74 65 64 3a 20 50 61 70 61 20 51 75  nserted: Papa Qu
30b0: 65 62 65 63 20 52 6f 6d 65 6f 20 53 69 65 72 72  ebec Romeo Sierr
30c0: 61 5c 0d 0a 54 61 6e 67 6f 22 7d 20 4e 65 77 56  a\..Tango"} NewV
30d0: 61 6c 75 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65  alue 1 <nullObje
30e0: 63 74 3e 20 43 6f 6e 66 6c 69 63 74 56 61 6c 75  ct> ConflictValu
30f0: 65 20 31 20 3c 6e 75 6c 6c 4f 62 6a 65 63 74 3e  e 1 <nullObject>
3100: 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }}}....#########
3110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3150: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
3160: 74 20 7b 74 65 73 74 20 73 65 73 73 69 6f 6e 2d  t {test session-
3170: 31 2e 33 20 7b 73 65 73 73 69 6f 6e 20 65 6e 61  1.3 {session ena
3180: 62 6c 65 64 2f 64 69 73 61 62 6c 65 64 20 73 74  bled/disabled st
3190: 61 74 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ate} -setup {.. 
31a0: 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
31b0: 6c 65 4e 61 6d 65 20 73 65 73 73 69 6f 6e 2d 31  leName session-1
31c0: 2e 33 2e 64 62 5d 0d 0a 0d 0a 20 20 63 6c 65 61  .3.db]....  clea
31d0: 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a 7d 20 2d  nupSomeText..} -
31e0: 62 6f 64 79 20 7b 0d 0a 20 20 63 72 65 61 74 65  body {..  create
31f0: 54 68 65 53 63 68 65 6d 61 20 24 64 62 0d 0a 20  TheSchema $db.. 
3200: 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73   makeSomeChanges
3210: 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e   $db t1 [list in
3220: 73 65 72 74 5d 20 66 61 6c 73 65 0d 0a 0d 0a 20  sert] false.... 
3230: 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
3240: 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
3250: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 65 73 73 69  ]....  set sessi
3260: 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  on [$connection 
3270: 2d 61 6c 69 61 73 20 43 72 65 61 74 65 53 65 73  -alias CreateSes
3280: 73 69 6f 6e 20 6d 61 69 6e 5d 0d 0a 20 20 6c 61  sion main]..  la
3290: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73 45  ppend result IsE
32a0: 6e 61 62 6c 65 64 20 5b 24 73 65 73 73 69 6f 6e  nabled [$session
32b0: 20 49 73 45 6e 61 62 6c 65 64 5d 0d 0a 0d 0a 20   IsEnabled].... 
32c0: 20 24 73 65 73 73 69 6f 6e 20 41 74 74 61 63 68   $session Attach
32d0: 54 61 62 6c 65 20 6e 75 6c 6c 0d 0a 20 20 6c 61  Table null..  la
32e0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73 45  ppend result IsE
32f0: 6e 61 62 6c 65 64 20 5b 24 73 65 73 73 69 6f 6e  nabled [$session
3300: 20 49 73 45 6e 61 62 6c 65 64 5d 0d 0a 0d 0a 20   IsEnabled].... 
3310: 20 24 73 65 73 73 69 6f 6e 20 53 65 74 54 6f 44   $session SetToD
3320: 69 73 61 62 6c 65 64 0d 0a 20 20 6c 61 70 70 65  isabled..  lappe
3330: 6e 64 20 72 65 73 75 6c 74 20 49 73 45 6e 61 62  nd result IsEnab
3340: 6c 65 64 20 5b 24 73 65 73 73 69 6f 6e 20 49 73  led [$session Is
3350: 45 6e 61 62 6c 65 64 5d 0d 0a 0d 0a 20 20 6d 61  Enabled]....  ma
3360: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
3370: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
3380: 74 5d 20 66 61 6c 73 65 0d 0a 20 20 6c 61 70 70  t] false..  lapp
3390: 65 6e 64 20 72 65 73 75 6c 74 20 49 73 45 6d 70  end result IsEmp
33a0: 74 79 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 45  ty [$session IsE
33b0: 6d 70 74 79 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  mpty]....  set r
33c0: 61 77 44 61 74 61 20 5b 63 72 65 61 74 65 43 68  awData [createCh
33d0: 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69 6f  angeSetForSessio
33e0: 6e 20 24 73 65 73 73 69 6f 6e 5d 0d 0a 20 20 6f  n $session]..  o
33f0: 62 6a 65 63 74 20 72 65 6d 6f 76 65 72 65 66 20  bject removeref 
3400: 24 72 61 77 44 61 74 61 0d 0a 0d 0a 20 20 6c 61  $rawData....  la
3410: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 4c 65 6e  ppend result Len
3420: 67 74 68 20 5b 24 72 61 77 44 61 74 61 20 4c 65  gth [$rawData Le
3430: 6e 67 74 68 5d 0d 0a 0d 0a 20 20 24 73 65 73 73  ngth]....  $sess
3440: 69 6f 6e 20 53 65 74 54 6f 45 6e 61 62 6c 65 64  ion SetToEnabled
3450: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
3460: 6c 74 20 49 73 45 6e 61 62 6c 65 64 20 5b 24 73  lt IsEnabled [$s
3470: 65 73 73 69 6f 6e 20 49 73 45 6e 61 62 6c 65 64  ession IsEnabled
3480: 5d 0d 0a 0d 0a 20 20 6d 61 6b 65 53 6f 6d 65 43  ]....  makeSomeC
3490: 68 61 6e 67 65 73 20 24 64 62 20 74 31 20 5b 6c  hanges $db t1 [l
34a0: 69 73 74 20 69 6e 73 65 72 74 5d 20 66 61 6c 73  ist insert] fals
34b0: 65 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  e..  lappend res
34c0: 75 6c 74 20 49 73 45 6d 70 74 79 20 5b 24 73 65  ult IsEmpty [$se
34d0: 73 73 69 6f 6e 20 49 73 45 6d 70 74 79 5d 0d 0a  ssion IsEmpty]..
34e0: 0d 0a 20 20 73 65 74 20 72 61 77 44 61 74 61 20  ..  set rawData 
34f0: 5b 63 72 65 61 74 65 43 68 61 6e 67 65 53 65 74  [createChangeSet
3500: 46 6f 72 53 65 73 73 69 6f 6e 20 24 73 65 73 73  ForSession $sess
3510: 69 6f 6e 5d 0d 0a 20 20 6f 62 6a 65 63 74 20 72  ion]..  object r
3520: 65 6d 6f 76 65 72 65 66 20 24 72 61 77 44 61 74  emoveref $rawDat
3530: 61 0d 0a 0d 0a 20 20 73 65 74 20 63 68 61 6e 67  a....  set chang
3540: 65 53 65 74 28 31 29 20 5b 24 63 6f 6e 6e 65 63  eSet(1) [$connec
3550: 74 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65 61  tion -alias Crea
3560: 74 65 43 68 61 6e 67 65 53 65 74 20 24 72 61 77  teChangeSet $raw
3570: 44 61 74 61 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  Data]..  lappend
3580: 20 72 65 73 75 6c 74 20 5b 63 68 61 6e 67 65 53   result [changeS
3590: 65 74 54 6f 53 74 72 69 6e 67 20 24 63 68 61 6e  etToString $chan
35a0: 67 65 53 65 74 28 31 29 20 66 61 6c 73 65 5d 0d  geSet(1) false].
35b0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
35c0: 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74   cleanupSomeText
35d0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
35e0: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63  omplain result c
35f0: 68 61 6e 67 65 53 65 74 20 72 61 77 44 61 74 61  hangeSet rawData
3600: 20 62 79 74 65 41 72 72 61 79 20 73 65 73 73 69   byteArray sessi
3610: 6f 6e 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f  on....  freeDbCo
3620: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e  nnection....  un
3630: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3640: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  connection....  
3650: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
3660: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
3670: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69  nocomplain db fi
3680: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
3690: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
36a0: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
36b0: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
36c0: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
36d0: 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
36e0: 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69  Data.SQLite SQLi
36f0: 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69  teInterop\..defi
3700: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
3710: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
3720: 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58  TEROP_SESSION_EX
3730: 54 45 4e 53 49 4f 4e 7d 20 2d 72 65 73 75 6c 74  TENSION} -result
3740: 20 7b 49 73 45 6e 61 62 6c 65 64 5c 0d 0a 54 72   {IsEnabled\..Tr
3750: 75 65 20 49 73 45 6e 61 62 6c 65 64 20 54 72 75  ue IsEnabled Tru
3760: 65 20 49 73 45 6e 61 62 6c 65 64 20 46 61 6c 73  e IsEnabled Fals
3770: 65 20 49 73 45 6d 70 74 79 20 54 72 75 65 20 4c  e IsEmpty True L
3780: 65 6e 67 74 68 20 30 20 49 73 45 6e 61 62 6c 65  ength 0 IsEnable
3790: 64 20 54 72 75 65 5c 0d 0a 49 73 45 6d 70 74 79  d True\..IsEmpty
37a0: 20 46 61 6c 73 65 20 7b 54 61 62 6c 65 4e 61 6d   False {TableNam
37b0: 65 20 74 31 20 4e 75 6d 62 65 72 4f 66 43 6f 6c  e t1 NumberOfCol
37c0: 75 6d 6e 73 20 32 20 4f 70 65 72 61 74 69 6f 6e  umns 2 Operation
37d0: 43 6f 64 65 20 49 6e 73 65 72 74 20 49 6e 64 69  Code Insert Indi
37e0: 72 65 63 74 5c 0d 0a 46 61 6c 73 65 20 50 72 69  rect\..False Pri
37f0: 6d 61 72 79 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b  maryKeyColumns {
3800: 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d 7d 7d 7d  [True, False]}}}
3810: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
3820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3860: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
3870: 7b 74 65 73 74 20 73 65 73 73 69 6f 6e 2d 31 2e  {test session-1.
3880: 34 20 7b 73 65 73 73 69 6f 6e 20 64 69 72 65 63  4 {session direc
3890: 74 2f 69 6e 64 69 72 65 63 74 20 73 74 61 74 65  t/indirect state
38a0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
38b0: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
38c0: 61 6d 65 20 73 65 73 73 69 6f 6e 2d 31 2e 34 2e  ame session-1.4.
38d0: 64 62 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  db]....  cleanup
38e0: 53 6f 6d 65 54 65 78 74 0d 0a 7d 20 2d 62 6f 64  SomeText..} -bod
38f0: 79 20 7b 0d 0a 20 20 63 72 65 61 74 65 54 68 65  y {..  createThe
3900: 53 63 68 65 6d 61 20 24 64 62 0d 0a 20 20 6d 61  Schema $db..  ma
3910: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
3920: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
3930: 74 5d 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65  t] false....  se
3940: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65  t connection [ge
3950: 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a  tDbConnection]..
3960: 0d 0a 20 20 73 65 74 20 73 65 73 73 69 6f 6e 20  ..  set session 
3970: 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 61 6c  [$connection -al
3980: 69 61 73 20 43 72 65 61 74 65 53 65 73 73 69 6f  ias CreateSessio
3990: 6e 20 6d 61 69 6e 5d 0d 0a 20 20 6c 61 70 70 65  n main]..  lappe
39a0: 6e 64 20 72 65 73 75 6c 74 20 49 73 49 6e 64 69  nd result IsIndi
39b0: 72 65 63 74 20 5b 24 73 65 73 73 69 6f 6e 20 49  rect [$session I
39c0: 73 49 6e 64 69 72 65 63 74 5d 0d 0a 0d 0a 20 20  sIndirect]....  
39d0: 24 73 65 73 73 69 6f 6e 20 41 74 74 61 63 68 54  $session AttachT
39e0: 61 62 6c 65 20 6e 75 6c 6c 0d 0a 20 20 6c 61 70  able null..  lap
39f0: 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73 49 6e  pend result IsIn
3a00: 64 69 72 65 63 74 20 5b 24 73 65 73 73 69 6f 6e  direct [$session
3a10: 20 49 73 49 6e 64 69 72 65 63 74 5d 0d 0a 0d 0a   IsIndirect]....
3a20: 20 20 24 73 65 73 73 69 6f 6e 20 53 65 74 54 6f    $session SetTo
3a30: 49 6e 64 69 72 65 63 74 0d 0a 20 20 6c 61 70 70  Indirect..  lapp
3a40: 65 6e 64 20 72 65 73 75 6c 74 20 49 73 49 6e 64  end result IsInd
3a50: 69 72 65 63 74 20 5b 24 73 65 73 73 69 6f 6e 20  irect [$session 
3a60: 49 73 49 6e 64 69 72 65 63 74 5d 0d 0a 0d 0a 20  IsIndirect].... 
3a70: 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73   makeSomeChanges
3a80: 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e   $db t1 [list in
3a90: 73 65 72 74 5d 20 66 61 6c 73 65 0d 0a 20 20 6c  sert] false..  l
3aa0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73  append result Is
3ab0: 45 6d 70 74 79 20 5b 24 73 65 73 73 69 6f 6e 20  Empty [$session 
3ac0: 49 73 45 6d 70 74 79 5d 0d 0a 0d 0a 20 20 73 65  IsEmpty]....  se
3ad0: 74 20 72 61 77 44 61 74 61 20 5b 63 72 65 61 74  t rawData [creat
3ae0: 65 43 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73  eChangeSetForSes
3af0: 73 69 6f 6e 20 24 73 65 73 73 69 6f 6e 5d 0d 0a  sion $session]..
3b00: 20 20 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 72    object remover
3b10: 65 66 20 24 72 61 77 44 61 74 61 0d 0a 0d 0a 20  ef $rawData.... 
3b20: 20 24 73 65 73 73 69 6f 6e 20 53 65 74 54 6f 44   $session SetToD
3b30: 69 72 65 63 74 0d 0a 20 20 6c 61 70 70 65 6e 64  irect..  lappend
3b40: 20 72 65 73 75 6c 74 20 49 73 49 6e 64 69 72 65   result IsIndire
3b50: 63 74 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 49  ct [$session IsI
3b60: 6e 64 69 72 65 63 74 5d 0d 0a 0d 0a 20 20 6d 61  ndirect]....  ma
3b70: 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64  keSomeChanges $d
3b80: 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73 65 72  b t1 [list inser
3b90: 74 5d 20 66 61 6c 73 65 0d 0a 20 20 6c 61 70 70  t] false..  lapp
3ba0: 65 6e 64 20 72 65 73 75 6c 74 20 49 73 45 6d 70  end result IsEmp
3bb0: 74 79 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 45  ty [$session IsE
3bc0: 6d 70 74 79 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  mpty]....  set r
3bd0: 61 77 44 61 74 61 20 5b 63 72 65 61 74 65 43 68  awData [createCh
3be0: 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69 6f  angeSetForSessio
3bf0: 6e 20 24 73 65 73 73 69 6f 6e 5d 0d 0a 20 20 6f  n $session]..  o
3c00: 62 6a 65 63 74 20 72 65 6d 6f 76 65 72 65 66 20  bject removeref 
3c10: 24 72 61 77 44 61 74 61 0d 0a 0d 0a 20 20 73 65  $rawData....  se
3c20: 74 20 63 68 61 6e 67 65 53 65 74 28 31 29 20 5b  t changeSet(1) [
3c30: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 61 6c 69  $connection -ali
3c40: 61 73 20 43 72 65 61 74 65 43 68 61 6e 67 65 53  as CreateChangeS
3c50: 65 74 20 24 72 61 77 44 61 74 61 5d 0d 0a 20 20  et $rawData]..  
3c60: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
3c70: 63 68 61 6e 67 65 53 65 74 54 6f 53 74 72 69 6e  changeSetToStrin
3c80: 67 20 24 63 68 61 6e 67 65 53 65 74 28 31 29 20  g $changeSet(1) 
3c90: 66 61 6c 73 65 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  false]..} -clean
3ca0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 53  up {..  cleanupS
3cb0: 6f 6d 65 54 65 78 74 0d 0a 0d 0a 20 20 75 6e 73  omeText....  uns
3cc0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
3cd0: 65 73 75 6c 74 20 63 68 61 6e 67 65 53 65 74 20  esult changeSet 
3ce0: 72 61 77 44 61 74 61 20 62 79 74 65 41 72 72 61  rawData byteArra
3cf0: 79 20 73 65 73 73 69 6f 6e 0d 0a 0d 0a 20 20 66  y session....  f
3d00: 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d  reeDbConnection.
3d10: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
3d20: 6d 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f  mplain connectio
3d30: 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  n....  cleanupDb
3d40: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
3d50: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
3d60: 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  n db fileName..}
3d70: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
3d80: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
3d90: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  ect monoBug28 co
3da0: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
3db0: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
3dc0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
3dd0: 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  te SQLiteInterop
3de0: 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
3df0: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
3e00: 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 53 45 53  Lite.INTEROP_SES
3e10: 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 7d 20  SION_EXTENSION} 
3e20: 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 49 73 49 6e  -result \..{IsIn
3e30: 64 69 72 65 63 74 20 46 61 6c 73 65 20 49 73 49  direct False IsI
3e40: 6e 64 69 72 65 63 74 20 46 61 6c 73 65 20 49 73  ndirect False Is
3e50: 49 6e 64 69 72 65 63 74 20 54 72 75 65 20 49 73  Indirect True Is
3e60: 45 6d 70 74 79 20 46 61 6c 73 65 20 49 73 49 6e  Empty False IsIn
3e70: 64 69 72 65 63 74 5c 0d 0a 46 61 6c 73 65 20 49  direct\..False I
3e80: 73 45 6d 70 74 79 20 46 61 6c 73 65 20 7b 54 61  sEmpty False {Ta
3e90: 62 6c 65 4e 61 6d 65 20 74 31 20 4e 75 6d 62 65  bleName t1 Numbe
3ea0: 72 4f 66 43 6f 6c 75 6d 6e 73 20 32 20 4f 70 65  rOfColumns 2 Ope
3eb0: 72 61 74 69 6f 6e 43 6f 64 65 20 49 6e 73 65 72  rationCode Inser
3ec0: 74 5c 0d 0a 49 6e 64 69 72 65 63 74 20 54 72 75  t\..Indirect Tru
3ed0: 65 20 50 72 69 6d 61 72 79 4b 65 79 43 6f 6c 75  e PrimaryKeyColu
3ee0: 6d 6e 73 20 7b 5b 54 72 75 65 2c 20 46 61 6c 73  mns {[True, Fals
3ef0: 65 5d 7d 20 54 61 62 6c 65 4e 61 6d 65 20 74 31  e]} TableName t1
3f00: 20 4e 75 6d 62 65 72 4f 66 43 6f 6c 75 6d 6e 73   NumberOfColumns
3f10: 20 32 5c 0d 0a 4f 70 65 72 61 74 69 6f 6e 43 6f   2\..OperationCo
3f20: 64 65 20 49 6e 73 65 72 74 20 49 6e 64 69 72 65  de Insert Indire
3f30: 63 74 20 46 61 6c 73 65 20 50 72 69 6d 61 72 79  ct False Primary
3f40: 4b 65 79 43 6f 6c 75 6d 6e 73 20 7b 5b 54 72 75  KeyColumns {[Tru
3f50: 65 2c 20 46 61 6c 73 65 5d 7d 7d 7d 7d 0d 0a 0d  e, False]}}}}...
3f60: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3fb0: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
3fc0: 74 20 73 65 73 73 69 6f 6e 2d 31 2e 35 20 7b 73  t session-1.5 {s
3fd0: 65 73 73 69 6f 6e 20 74 61 62 6c 65 20 66 69 6c  ession table fil
3fe0: 74 65 72 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ter} -setup {.. 
3ff0: 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
4000: 6c 65 4e 61 6d 65 20 73 65 73 73 69 6f 6e 2d 31  leName session-1
4010: 2e 35 2e 64 62 5d 0d 0a 0d 0a 20 20 63 6c 65 61  .5.db]....  clea
4020: 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a 7d 20 2d  nupSomeText..} -
4030: 62 6f 64 79 20 7b 0d 0a 20 20 63 72 65 61 74 65  body {..  create
4040: 54 68 65 53 63 68 65 6d 61 20 24 64 62 0d 0a 20  TheSchema $db.. 
4050: 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73   makeSomeChanges
4060: 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e   $db t1 [list in
4070: 73 65 72 74 5d 20 66 61 6c 73 65 0d 0a 0d 0a 20  sert] false.... 
4080: 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
4090: 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
40a0: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 65 73 73 69  ]....  set sessi
40b0: 6f 6e 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  on [$connection 
40c0: 2d 61 6c 69 61 73 20 43 72 65 61 74 65 53 65 73  -alias CreateSes
40d0: 73 69 6f 6e 20 6d 61 69 6e 5d 0d 0a 0d 0a 20 20  sion main]....  
40e0: 24 73 65 73 73 69 6f 6e 20 2d 6d 61 72 73 68 61  $session -marsha
40f0: 6c 66 6c 61 67 73 20 2b 44 79 6e 61 6d 69 63 43  lflags +DynamicC
4100: 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20 20 20 20  allback \..     
4110: 20 53 65 74 54 61 62 6c 65 46 69 6c 74 65 72 20   SetTableFilter 
4120: 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c 62  tableFilterCallb
4130: 61 63 6b 54 31 20 6e 75 6c 6c 0d 0a 0d 0a 20 20  ackT1 null....  
4140: 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20  makeSomeChanges 
4150: 24 64 62 20 74 32 20 5b 6c 69 73 74 20 69 6e 73  $db t2 [list ins
4160: 65 72 74 5d 20 66 61 6c 73 65 0d 0a 20 20 6c 61  ert] false..  la
4170: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73 45  ppend result IsE
4180: 6d 70 74 79 20 5b 24 73 65 73 73 69 6f 6e 20 49  mpty [$session I
4190: 73 45 6d 70 74 79 5d 0d 0a 0d 0a 20 20 6c 61 70  sEmpty]....  lap
41a0: 70 65 6e 64 20 72 65 73 75 6c 74 20 4d 61 74 63  pend result Matc
41b0: 68 54 32 20 5b 6d 61 74 63 68 53 65 73 73 69 6f  hT2 [matchSessio
41c0: 6e 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 73  n $connection $s
41d0: 65 73 73 69 6f 6e 20 7b 0d 0a 20 20 20 20 5b 24  ession {..    [$
41e0: 69 74 65 6d 20 54 61 62 6c 65 4e 61 6d 65 5d 20  item TableName] 
41f0: 65 71 20 22 74 32 22 0d 0a 20 20 7d 5d 0d 0a 0d  eq "t2"..  }]...
4200: 0a 20 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67  .  makeSomeChang
4210: 65 73 20 24 64 62 20 74 31 20 5b 6c 69 73 74 20  es $db t1 [list 
4220: 69 6e 73 65 72 74 5d 20 66 61 6c 73 65 0d 0a 20  insert] false.. 
4230: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
4240: 49 73 45 6d 70 74 79 20 5b 24 73 65 73 73 69 6f  IsEmpty [$sessio
4250: 6e 20 49 73 45 6d 70 74 79 5d 0d 0a 0d 0a 20 20  n IsEmpty]....  
4260: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 4d  lappend result M
4270: 61 74 63 68 54 31 20 5b 6d 61 74 63 68 53 65 73  atchT1 [matchSes
4280: 73 69 6f 6e 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  sion $connection
4290: 20 24 73 65 73 73 69 6f 6e 20 7b 0d 0a 20 20 20   $session {..   
42a0: 20 5b 24 69 74 65 6d 20 54 61 62 6c 65 4e 61 6d   [$item TableNam
42b0: 65 5d 20 65 71 20 22 74 31 22 0d 0a 20 20 7d 5d  e] eq "t1"..  }]
42c0: 0d 0a 0d 0a 20 20 24 73 65 73 73 69 6f 6e 20 53  ....  $session S
42d0: 65 74 54 61 62 6c 65 46 69 6c 74 65 72 20 6e 75  etTableFilter nu
42e0: 6c 6c 20 6e 75 6c 6c 0d 0a 0d 0a 20 20 6d 61 6b  ll null....  mak
42f0: 65 53 6f 6d 65 43 68 61 6e 67 65 73 20 24 64 62  eSomeChanges $db
4300: 20 74 32 20 5b 6c 69 73 74 20 69 6e 73 65 72 74   t2 [list insert
4310: 5d 20 66 61 6c 73 65 0d 0a 20 20 6c 61 70 70 65  ] false..  lappe
4320: 6e 64 20 72 65 73 75 6c 74 20 49 73 45 6d 70 74  nd result IsEmpt
4330: 79 20 5b 24 73 65 73 73 69 6f 6e 20 49 73 45 6d  y [$session IsEm
4340: 70 74 79 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  pty]....  lappen
4350: 64 20 72 65 73 75 6c 74 20 4d 61 74 63 68 54 32  d result MatchT2
4360: 20 5b 6d 61 74 63 68 53 65 73 73 69 6f 6e 20 24   [matchSession $
4370: 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 73 65 73 73  connection $sess
4380: 69 6f 6e 20 7b 0d 0a 20 20 20 20 5b 24 69 74 65  ion {..    [$ite
4390: 6d 20 54 61 62 6c 65 4e 61 6d 65 5d 20 65 71 20  m TableName] eq 
43a0: 22 74 32 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20  "t2"..  }]....  
43b0: 6d 61 6b 65 53 6f 6d 65 43 68 61 6e 67 65 73 20  makeSomeChanges 
43c0: 24 64 62 20 74 31 20 5b 6c 69 73 74 20 69 6e 73  $db t1 [list ins
43d0: 65 72 74 5d 20 66 61 6c 73 65 0d 0a 20 20 6c 61  ert] false..  la
43e0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 49 73 45  ppend result IsE
43f0: 6d 70 74 79 20 5b 24 73 65 73 73 69 6f 6e 20 49  mpty [$session I
4400: 73 45 6d 70 74 79 5d 0d 0a 0d 0a 20 20 6c 61 70  sEmpty]....  lap
4410: 70 65 6e 64 20 72 65 73 75 6c 74 20 4d 61 74 63  pend result Matc
4420: 68 54 31 20 5b 6d 61 74 63 68 53 65 73 73 69 6f  hT1 [matchSessio
4430: 6e 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 24 73  n $connection $s
4440: 65 73 73 69 6f 6e 20 7b 0d 0a 20 20 20 20 5b 24  ession {..    [$
4450: 69 74 65 6d 20 54 61 62 6c 65 4e 61 6d 65 5d 20  item TableName] 
4460: 65 71 20 22 74 31 22 0d 0a 20 20 7d 5d 0d 0a 0d  eq "t1"..  }]...
4470: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
4480: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
4490: 6c 65 61 6e 75 70 53 6f 6d 65 54 65 78 74 0d 0a  leanupSomeText..
44a0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
44b0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 73 65 73  plain result ses
44c0: 73 69 6f 6e 0d 0a 0d 0a 20 20 66 72 65 65 44 62  sion....  freeDb
44d0: 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  Connection....  
44e0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
44f0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a  n connection....
4500: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
4510: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 63 61 74 63 68  eName....  catch
4520: 20 7b 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 63   {object removec
4530: 61 6c 6c 62 61 63 6b 20 74 61 62 6c 65 46 69 6c  allback tableFil
4540: 74 65 72 43 61 6c 6c 62 61 63 6b 54 31 7d 0d 0a  terCallbackT1}..
4550: 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20  ..  catch {..   
4560: 20 66 6f 72 65 61 63 68 20 63 61 6c 6c 62 61 63   foreach callbac
4570: 6b 52 65 73 75 6c 74 20 24 63 61 6c 6c 62 61 63  kResult $callbac
4580: 6b 52 65 73 75 6c 74 73 20 7b 0d 0a 20 20 20 20  kResults {..    
4590: 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20    catch {object 
45a0: 64 69 73 70 6f 73 65 20 24 63 61 6c 6c 62 61 63  dispose $callbac
45b0: 6b 52 65 73 75 6c 74 7d 0d 0a 20 20 20 20 7d 0d  kResult}..    }.
45c0: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
45d0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 61 6c 6c  -nocomplain call
45e0: 62 61 63 6b 52 65 73 75 6c 74 20 63 61 6c 6c 62  backResult callb
45f0: 61 63 6b 52 65 73 75 6c 74 73 20 64 62 20 66 69  ackResults db fi
4600: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
4610: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
4620: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
4630: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
4640: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
4650: 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
4660: 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69  Data.SQLite SQLi
4670: 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69  teInterop\..defi
4680: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
4690: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
46a0: 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58  TEROP_SESSION_EX
46b0: 54 45 4e 53 49 4f 4e 7d 20 2d 72 65 73 75 6c 74  TENSION} -result
46c0: 20 7b 49 73 45 6d 70 74 79 5c 0d 0a 54 72 75 65   {IsEmpty\..True
46d0: 20 4d 61 74 63 68 54 32 20 66 61 6c 73 65 20 49   MatchT2 false I
46e0: 73 45 6d 70 74 79 20 46 61 6c 73 65 20 4d 61 74  sEmpty False Mat
46f0: 63 68 54 31 20 74 72 75 65 20 49 73 45 6d 70 74  chT1 true IsEmpt
4700: 79 20 46 61 6c 73 65 20 4d 61 74 63 68 54 32 20  y False MatchT2 
4710: 74 72 75 65 5c 0d 0a 49 73 45 6d 70 74 79 20 46  true\..IsEmpty F
4720: 61 6c 73 65 20 4d 61 74 63 68 54 31 20 74 72 75  alse MatchT1 tru
4730: 65 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  e}}....#########
4740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4780: 23 23 23 23 23 23 0d 0a 0d 0a 72 65 6e 61 6d 65  ######....rename
4790: 20 74 61 62 6c 65 46 69 6c 74 65 72 43 61 6c 6c   tableFilterCall
47a0: 62 61 63 6b 54 31 20 22 22 0d 0a 72 65 6e 61 6d  backT1 ""..renam
47b0: 65 20 63 72 65 61 74 65 42 79 74 65 41 72 72 61  e createByteArra
47c0: 79 20 22 22 0d 0a 72 65 6e 61 6d 65 20 61 72 72  y ""..rename arr
47d0: 61 79 54 6f 4c 69 73 74 20 22 22 0d 0a 72 65 6e  ayToList ""..ren
47e0: 61 6d 65 20 67 65 74 43 68 61 6e 67 65 53 65 74  ame getChangeSet
47f0: 46 69 6c 65 4e 61 6d 65 20 22 22 0d 0a 72 65 6e  FileName ""..ren
4800: 61 6d 65 20 6d 61 6b 65 53 6f 6d 65 43 68 61 6e  ame makeSomeChan
4810: 67 65 73 20 22 22 0d 0a 72 65 6e 61 6d 65 20 63  ges ""..rename c
4820: 72 65 61 74 65 54 68 65 53 63 68 65 6d 61 20 22  reateTheSchema "
4830: 22 0d 0a 72 65 6e 61 6d 65 20 6d 61 74 63 68 43  "..rename matchC
4840: 68 61 6e 67 65 53 65 74 20 22 22 0d 0a 72 65 6e  hangeSet ""..ren
4850: 61 6d 65 20 6d 61 74 63 68 53 65 73 73 69 6f 6e  ame matchSession
4860: 20 22 22 0d 0a 72 65 6e 61 6d 65 20 63 68 61 6e   ""..rename chan
4870: 67 65 53 65 74 54 6f 53 74 72 69 6e 67 20 22 22  geSetToString ""
4880: 0d 0a 72 65 6e 61 6d 65 20 63 72 65 61 74 65 43  ..rename createC
4890: 68 61 6e 67 65 53 65 74 46 6f 72 53 65 73 73 69  hangeSetForSessi
48a0: 6f 6e 20 22 22 0d 0a 72 65 6e 61 6d 65 20 66 6f  on ""..rename fo
48b0: 72 44 69 73 70 6c 61 79 20 22 22 0d 0a 72 65 6e  rDisplay ""..ren
48c0: 61 6d 65 20 63 6c 65 61 6e 75 70 53 6f 6d 65 54  ame cleanupSomeT
48d0: 65 78 74 20 22 22 0d 0a 72 65 6e 61 6d 65 20 67  ext ""..rename g
48e0: 65 74 53 6f 6d 65 54 65 78 74 20 22 22 0d 0a 0d  etSomeText ""...
48f0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
4900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4940: 0d 0a 0d 0a 72 75 6e 53 51 4c 69 74 65 54 65 73  ....runSQLiteTes
4950: 74 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 54 65  tEpilogue..runTe
4960: 73 74 45 70 69 6c 6f 67 75 65 0d 0a              stEpilogue..