System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 79514f5f101fe2b0073cc337b49569b1dda8cfd5:


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 74 79 70 65 73 2e 65 61 67 6c  .#..# types.eagl
0060: 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74 74  e --..#..# Writt
0070: 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61 63  en by Joe Mistac
0080: 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73 65  hkin...# Release
0090: 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20  d to the public 
00a0: 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20 79  domain, use at y
00b0: 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 23  our own risk!..#
00c0: 0d 0a 23 23 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 0d 0a 0d 0a 70 61 63 6b 61 67 65 20 72 65 71  #....package req
0120: 75 69 72 65 20 45 61 67 6c 65 0d 0a 70 61 63 6b  uire Eagle..pack
0130: 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
0140: 65 2e 4c 69 62 72 61 72 79 0d 0a 70 61 63 6b 61  e.Library..packa
0150: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
0160: 2e 54 65 73 74 0d 0a 0d 0a 72 75 6e 54 65 73 74  .Test....runTest
0170: 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23  Prologue....####
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 0d 0a 0d 0a 70  ###########....p
01d0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 53  ackage require S
01e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
01f0: 65 2e 54 65 73 74 0d 0a 72 75 6e 53 51 4c 69 74  e.Test..runSQLit
0200: 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d  eTestPrologue...
0210: 0a 23 23 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: 0d 0a 0d 0a 70 72 6f 63 20 62 69 6e 64 56 61 6c  ....proc bindVal
0270: 75 65 43 61 6c 6c 62 61 63 6b 31 20 7b 0d 0a 20  ueCallback1 {.. 
0280: 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 20 63         convert c
0290: 6f 6d 6d 61 6e 64 20 66 6c 61 67 73 20 70 61 72  ommand flags par
02a0: 61 6d 65 74 65 72 20 74 79 70 65 4e 61 6d 65 20  ameter typeName 
02b0: 69 6e 64 65 78 20 75 73 65 72 44 61 74 61 0d 0a  index userData..
02c0: 20 20 20 20 20 20 20 20 63 6f 6d 70 6c 65 74 65          complete
02d0: 56 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 6c  VarName } {..  l
02e0: 61 70 70 65 6e 64 20 3a 3a 6c 6f 67 28 62 69 6e  append ::log(bin
02f0: 64 29 20 5b 6c 69 73 74 20 63 6f 6e 76 65 72 74  d) [list convert
0300: 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65   [isObjectHandle
0310: 20 24 63 6f 6e 76 65 72 74 5d 5d 0d 0a 20 20 6c   $convert]]..  l
0320: 61 70 70 65 6e 64 20 3a 3a 6c 6f 67 28 62 69 6e  append ::log(bin
0330: 64 29 20 5b 6c 69 73 74 20 63 6f 6d 6d 61 6e 64  d) [list command
0340: 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65   [isObjectHandle
0350: 20 24 63 6f 6d 6d 61 6e 64 5d 5d 0d 0a 20 20 6c   $command]]..  l
0360: 61 70 70 65 6e 64 20 3a 3a 6c 6f 67 28 62 69 6e  append ::log(bin
0370: 64 29 20 5b 6c 69 73 74 20 66 6c 61 67 73 20 5b  d) [list flags [
0380: 67 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  getStringFromObj
0390: 65 63 74 48 61 6e 64 6c 65 20 24 66 6c 61 67 73  ectHandle $flags
03a0: 5d 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a  ]]..  lappend ::
03b0: 6c 6f 67 28 62 69 6e 64 29 20 5b 6c 69 73 74 20  log(bind) [list 
03c0: 70 61 72 61 6d 65 74 65 72 20 5b 69 73 4f 62 6a  parameter [isObj
03d0: 65 63 74 48 61 6e 64 6c 65 20 24 70 61 72 61 6d  ectHandle $param
03e0: 65 74 65 72 5d 5d 0d 0a 20 20 6c 61 70 70 65 6e  eter]]..  lappen
03f0: 64 20 3a 3a 6c 6f 67 28 62 69 6e 64 29 20 5b 6c  d ::log(bind) [l
0400: 69 73 74 20 74 79 70 65 4e 61 6d 65 20 5b 67 65  ist typeName [ge
0410: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 65 63  tStringFromObjec
0420: 74 48 61 6e 64 6c 65 20 24 74 79 70 65 4e 61 6d  tHandle $typeNam
0430: 65 5d 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a  e]]..  lappend :
0440: 3a 6c 6f 67 28 62 69 6e 64 29 20 5b 6c 69 73 74  :log(bind) [list
0450: 20 69 6e 64 65 78 20 5b 67 65 74 53 74 72 69 6e   index [getStrin
0460: 67 46 72 6f 6d 4f 62 6a 65 63 74 48 61 6e 64 6c  gFromObjectHandl
0470: 65 20 24 69 6e 64 65 78 5d 5d 0d 0a 20 20 6c 61  e $index]]..  la
0480: 70 70 65 6e 64 20 3a 3a 6c 6f 67 28 62 69 6e 64  ppend ::log(bind
0490: 29 20 5b 6c 69 73 74 20 75 73 65 72 44 61 74 61  ) [list userData
04a0: 20 5b 67 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f   [getStringFromO
04b0: 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 75 73 65  bjectHandle $use
04c0: 72 44 61 74 61 5d 5d 0d 0a 0d 0a 20 20 69 66 20  rData]]....  if 
04d0: 7b 5b 67 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  {[getStringFromO
04e0: 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 75 73 65  bjectHandle $use
04f0: 72 44 61 74 61 5d 20 3d 3d 20 33 7d 20 74 68 65  rData] == 3} the
0500: 6e 20 7b 0d 0a 20 20 20 20 75 70 76 61 72 20 31  n {..    upvar 1
0510: 20 24 63 6f 6d 70 6c 65 74 65 56 61 72 4e 61 6d   $completeVarNam
0520: 65 20 63 6f 6d 70 6c 65 74 65 3b 20 75 6e 73 65  e complete; unse
0530: 74 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20 20  t complete..    
0540: 65 72 72 6f 72 20 22 70 61 72 61 6d 65 74 65 72  error "parameter
0550: 20 62 69 6e 64 69 6e 67 20 63 61 6e 63 65 6c 65   binding cancele
0560: 64 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20  d"..  }....  if 
0570: 7b 5b 67 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  {[getStringFromO
0580: 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 75 73 65  bjectHandle $use
0590: 72 44 61 74 61 5d 20 3d 3d 20 32 7d 20 74 68 65  rData] == 2} the
05a0: 6e 20 7b 0d 0a 20 20 20 20 24 70 61 72 61 6d 65  n {..    $parame
05b0: 74 65 72 20 44 62 54 79 70 65 20 53 74 72 69 6e  ter DbType Strin
05c0: 67 0d 0a 20 20 20 20 24 70 61 72 61 6d 65 74 65  g..    $paramete
05d0: 72 20 56 61 6c 75 65 20 63 75 73 74 6f 6d 0d 0a  r Value custom..
05e0: 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 67 65    }....  if {[ge
05f0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 65 63  tStringFromObjec
0600: 74 48 61 6e 64 6c 65 20 24 75 73 65 72 44 61 74  tHandle $userDat
0610: 61 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d  a] == 1} then {.
0620: 0a 20 20 20 20 75 70 76 61 72 20 31 20 24 63 6f  .    upvar 1 $co
0630: 6d 70 6c 65 74 65 56 61 72 4e 61 6d 65 20 63 6f  mpleteVarName co
0640: 6d 70 6c 65 74 65 0d 0a 20 20 20 20 73 65 74 20  mplete..    set 
0650: 63 6f 6d 70 6c 65 74 65 20 5b 6f 62 6a 65 63 74  complete [object
0660: 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20   invoke -create 
0670: 53 79 73 74 65 6d 2e 42 6f 6f 6c 65 61 6e 20 50  System.Boolean P
0680: 61 72 73 65 20 54 72 75 65 5d 0d 0a 20 20 7d 0d  arse True]..  }.
0690: 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  .}....##########
06a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06e0: 23 23 23 23 23 0d 0a 0d 0a 70 72 6f 63 20 72 65  #####....proc re
06f0: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 31  adValueCallback1
0700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6e 76   {..        conv
0710: 65 72 74 20 64 61 74 61 52 65 61 64 65 72 20 66  ert dataReader f
0720: 6c 61 67 73 20 65 76 65 6e 74 41 72 67 73 20 74  lags eventArgs t
0730: 79 70 65 4e 61 6d 65 20 69 6e 64 65 78 20 75 73  ypeName index us
0740: 65 72 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  erData..        
0750: 63 6f 6d 70 6c 65 74 65 56 61 72 4e 61 6d 65 20  completeVarName 
0760: 7d 20 7b 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a  } {..  lappend :
0770: 3a 6c 6f 67 28 72 65 61 64 29 20 5b 6c 69 73 74  :log(read) [list
0780: 20 63 6f 6e 76 65 72 74 20 5b 69 73 4f 62 6a 65   convert [isObje
0790: 63 74 48 61 6e 64 6c 65 20 24 63 6f 6e 76 65 72  ctHandle $conver
07a0: 74 5d 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a  t]]..  lappend :
07b0: 3a 6c 6f 67 28 72 65 61 64 29 20 5b 6c 69 73 74  :log(read) [list
07c0: 20 64 61 74 61 52 65 61 64 65 72 20 5b 69 73 4f   dataReader [isO
07d0: 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 64 61 74  bjectHandle $dat
07e0: 61 52 65 61 64 65 72 5d 5d 0d 0a 20 20 6c 61 70  aReader]]..  lap
07f0: 70 65 6e 64 20 3a 3a 6c 6f 67 28 72 65 61 64 29  pend ::log(read)
0800: 20 5b 6c 69 73 74 20 66 6c 61 67 73 20 5b 67 65   [list flags [ge
0810: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 65 63  tStringFromObjec
0820: 74 48 61 6e 64 6c 65 20 24 66 6c 61 67 73 5d 5d  tHandle $flags]]
0830: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 6c 6f  ..  lappend ::lo
0840: 67 28 72 65 61 64 29 20 5b 6c 69 73 74 20 65 76  g(read) [list ev
0850: 65 6e 74 41 72 67 73 20 5b 69 73 4f 62 6a 65 63  entArgs [isObjec
0860: 74 48 61 6e 64 6c 65 20 24 65 76 65 6e 74 41 72  tHandle $eventAr
0870: 67 73 5d 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  gs]]..  lappend 
0880: 3a 3a 6c 6f 67 28 72 65 61 64 29 20 5b 6c 69 73  ::log(read) [lis
0890: 74 20 74 79 70 65 4e 61 6d 65 20 5b 67 65 74 53  t typeName [getS
08a0: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 65 63 74 48  tringFromObjectH
08b0: 61 6e 64 6c 65 20 24 74 79 70 65 4e 61 6d 65 5d  andle $typeName]
08c0: 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 3a 3a 6c  ]..  lappend ::l
08d0: 6f 67 28 72 65 61 64 29 20 5b 6c 69 73 74 20 69  og(read) [list i
08e0: 6e 64 65 78 20 5b 67 65 74 53 74 72 69 6e 67 46  ndex [getStringF
08f0: 72 6f 6d 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20  romObjectHandle 
0900: 24 69 6e 64 65 78 5d 5d 0d 0a 20 20 6c 61 70 70  $index]]..  lapp
0910: 65 6e 64 20 3a 3a 6c 6f 67 28 72 65 61 64 29 20  end ::log(read) 
0920: 5b 6c 69 73 74 20 75 73 65 72 44 61 74 61 20 5b  [list userData [
0930: 67 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  getStringFromObj
0940: 65 63 74 48 61 6e 64 6c 65 20 24 75 73 65 72 44  ectHandle $userD
0950: 61 74 61 5d 5d 0d 0a 0d 0a 20 20 69 66 20 7b 5b  ata]]....  if {[
0960: 67 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  getStringFromObj
0970: 65 63 74 48 61 6e 64 6c 65 20 24 75 73 65 72 44  ectHandle $userD
0980: 61 74 61 5d 20 3d 3d 20 33 7d 20 74 68 65 6e 20  ata] == 3} then 
0990: 7b 0d 0a 20 20 20 20 75 70 76 61 72 20 31 20 24  {..    upvar 1 $
09a0: 63 6f 6d 70 6c 65 74 65 56 61 72 4e 61 6d 65 20  completeVarName 
09b0: 63 6f 6d 70 6c 65 74 65 3b 20 75 6e 73 65 74 20  complete; unset 
09c0: 63 6f 6d 70 6c 65 74 65 0d 0a 20 20 20 20 65 72  complete..    er
09d0: 72 6f 72 20 22 72 65 61 64 69 6e 67 20 6f 66 20  ror "reading of 
09e0: 76 61 6c 75 65 20 63 61 6e 63 65 6c 65 64 22 0d  value canceled".
09f0: 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 67  .  }....  if {[g
0a00: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 65  etStringFromObje
0a10: 63 74 48 61 6e 64 6c 65 20 24 75 73 65 72 44 61  ctHandle $userDa
0a20: 74 61 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b  ta] == 1} then {
0a30: 0d 0a 20 20 20 20 75 70 76 61 72 20 31 20 24 63  ..    upvar 1 $c
0a40: 6f 6d 70 6c 65 74 65 56 61 72 4e 61 6d 65 20 63  ompleteVarName c
0a50: 6f 6d 70 6c 65 74 65 0d 0a 20 20 20 20 73 65 74  omplete..    set
0a60: 20 63 6f 6d 70 6c 65 74 65 20 5b 6f 62 6a 65 63   complete [objec
0a70: 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65  t invoke -create
0a80: 20 53 79 73 74 65 6d 2e 42 6f 6f 6c 65 61 6e 20   System.Boolean 
0a90: 50 61 72 73 65 20 54 72 75 65 5d 0d 0a 20 20 7d  Parse True]..  }
0aa0: 0d 0a 7d 0d 0a 0d 0a 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 23 23 23 23 23 23 23 23  ################
0af0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
0b00: 74 20 7b 74 65 73 74 20 74 79 70 65 73 2d 31 2e  t {test types-1.
0b10: 31 20 7b 74 79 70 65 20 63 61 6c 6c 62 61 63 6b  1 {type callback
0b20: 73 20 6d 61 6e 61 67 65 6d 65 6e 74 7d 20 2d 73  s management} -s
0b30: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
0b40: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
0b50: 74 79 70 65 73 2d 31 2e 31 2e 64 62 5d 0d 0a 7d  types-1.1.db]..}
0b60: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
0b70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
0b80: 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a  bConnection]....
0b90: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
0ba0: 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  st]....  lappend
0bb0: 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63   result [$connec
0bc0: 74 69 6f 6e 20 43 6c 65 61 72 54 79 70 65 43 61  tion ClearTypeCa
0bd0: 6c 6c 62 61 63 6b 73 5d 0d 0a 0d 0a 20 20 73 65  llbacks]....  se
0be0: 74 20 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 28  t typeCallbacks(
0bf0: 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  1) [object invok
0c00: 65 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  e \..      Syste
0c10: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
0c20: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
0c30: 73 20 43 72 65 61 74 65 20 5c 0d 0a 20 20 20 20  s Create \..    
0c40: 20 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c    null null null
0c50: 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 73 65 74 20   null]....  set 
0c60: 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 28 32 29  typeCallbacks(2)
0c70: 20 6e 75 6c 6c 0d 0a 0d 0a 20 20 6c 61 70 70 65   null....  lappe
0c80: 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e  nd result [$conn
0c90: 65 63 74 69 6f 6e 20 53 65 74 54 79 70 65 43 61  ection SetTypeCa
0ca0: 6c 6c 62 61 63 6b 73 20 54 45 53 54 20 24 74 79  llbacks TEST $ty
0cb0: 70 65 43 61 6c 6c 62 61 63 6b 73 28 31 29 5d 0d  peCallbacks(1)].
0cc0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
0cd0: 74 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 54  t [$connection T
0ce0: 72 79 47 65 74 54 79 70 65 43 61 6c 6c 62 61 63  ryGetTypeCallbac
0cf0: 6b 73 20 54 45 53 54 20 74 79 70 65 43 61 6c 6c  ks TEST typeCall
0d00: 62 61 63 6b 73 28 32 29 5d 0d 0a 20 20 6c 61 70  backs(2)]..  lap
0d10: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f  pend result [$co
0d20: 6e 6e 65 63 74 69 6f 6e 20 43 6c 65 61 72 54 79  nnection ClearTy
0d30: 70 65 43 61 6c 6c 62 61 63 6b 73 5d 0d 0a 20 20  peCallbacks]..  
0d40: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
0d50: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74 54  $connection SetT
0d60: 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 54 45 53  ypeCallbacks TES
0d70: 54 20 24 74 79 70 65 43 61 6c 6c 62 61 63 6b 73  T $typeCallbacks
0d80: 28 31 29 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  (1)]..  lappend 
0d90: 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 24 74  result [expr {$t
0da0: 79 70 65 43 61 6c 6c 62 61 63 6b 73 28 31 29 20  ypeCallbacks(1) 
0db0: 65 71 20 24 74 79 70 65 43 61 6c 6c 62 61 63 6b  eq $typeCallback
0dc0: 73 28 32 29 7d 5d 0d 0a 0d 0a 20 20 73 65 74 20  s(2)}]....  set 
0dd0: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
0de0: 75 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43 6f  up {..  freeDbCo
0df0: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c  nnection....  cl
0e00: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
0e10: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
0e20: 63 6f 6d 70 6c 61 69 6e 20 74 79 70 65 43 61 6c  complain typeCal
0e30: 6c 62 61 63 6b 73 0d 0a 20 20 75 6e 73 65 74 20  lbacks..  unset 
0e40: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
0e50: 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62  lt connection db
0e60: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
0e70: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
0e80: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
0e90: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
0ea0: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
0eb0: 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74  TA SQLite\..Syst
0ec0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
0ed0: 2d 72 65 73 75 6c 74 20 7b 30 20 54 72 75 65 20  -result {0 True 
0ee0: 54 72 75 65 20 31 20 54 72 75 65 20 54 72 75 65  True 1 True True
0ef0: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
0f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f40: 23 23 23 23 23 0d 0a 0d 0a 73 65 74 20 72 65 61  #####....set rea
0f50: 64 41 72 67 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  dArgs [list \.. 
0f60: 20 20 20 63 6f 6e 76 65 72 74 20 64 61 74 61 52     convert dataR
0f70: 65 61 64 65 72 20 66 6c 61 67 73 20 65 76 65 6e  eader flags even
0f80: 74 41 72 67 73 20 74 79 70 65 4e 61 6d 65 20 69  tArgs typeName i
0f90: 6e 64 65 78 20 75 73 65 72 44 61 74 61 20 5c 0d  ndex userData \.
0fa0: 0a 20 20 20 20 63 6f 6d 70 6c 65 74 65 56 61 72  .    completeVar
0fb0: 4e 61 6d 65 5d 0d 0a 0d 0a 73 65 74 20 70 61 72  Name]....set par
0fc0: 61 6d 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ams [list \..   
0fd0: 20 5b 6c 69 73 74 20 42 6f 6f 6c 65 61 6e 20 20   [list Boolean  
0fe0: 20 20 20 20 20 20 20 47 65 74 42 6f 6f 6c 65 61         GetBoolea
0ff0: 6e 20 20 20 20 66 61 6c 73 65 20 20 20 42 6f 6f  n    false   Boo
1000: 6c 65 61 6e 56 61 6c 75 65 20 20 20 20 74 72 75  leanValue    tru
1010: 65 20 20 20 20 30 5d 20 5c 0d 0a 20 20 20 20 5b  e    0] \..    [
1020: 6c 69 73 74 20 42 79 74 65 20 20 20 20 20 20 20  list Byte       
1030: 20 20 20 20 20 47 65 74 42 79 74 65 20 20 20 20       GetByte    
1040: 20 20 20 66 61 6c 73 65 20 20 20 42 79 74 65 56     false   ByteV
1050: 61 6c 75 65 20 20 20 20 20 20 20 74 72 75 65 20  alue       true 
1060: 20 20 20 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69     0] \..    [li
1070: 73 74 20 42 79 74 65 20 20 20 20 20 20 20 20 20  st Byte         
1080: 20 20 20 47 65 74 42 79 74 65 73 20 20 20 20 20     GetBytes     
1090: 20 74 72 75 65 20 20 20 20 42 79 74 65 73 56 61   true    BytesVa
10a0: 6c 75 65 20 20 20 20 20 20 66 61 6c 73 65 20 20  lue      false  
10b0: 20 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74   0] \..    [list
10c0: 20 43 68 61 72 20 20 20 20 20 20 20 20 20 20 20   Char           
10d0: 20 47 65 74 43 68 61 72 20 20 20 20 20 20 20 66   GetChar       f
10e0: 61 6c 73 65 20 20 20 43 68 61 72 56 61 6c 75 65  alse   CharValue
10f0: 20 20 20 20 20 20 20 74 72 75 65 20 20 20 20 30         true    0
1100: 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 43  ] \..    [list C
1110: 68 61 72 20 20 20 20 20 20 20 20 20 20 20 20 47  har            G
1120: 65 74 43 68 61 72 73 20 20 20 20 20 20 74 72 75  etChars      tru
1130: 65 20 20 20 20 43 68 61 72 73 56 61 6c 75 65 20  e    CharsValue 
1140: 20 20 20 20 20 66 61 6c 73 65 20 20 20 30 5d 20       false   0] 
1150: 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 44 61 74  \..    [list Dat
1160: 65 54 69 6d 65 20 20 20 20 20 20 20 20 47 65 74  eTime        Get
1170: 44 61 74 65 54 69 6d 65 20 20 20 66 61 6c 73 65  DateTime   false
1180: 20 20 20 44 61 74 65 54 69 6d 65 56 61 6c 75 65     DateTimeValue
1190: 20 20 20 74 72 75 65 20 20 20 20 30 5d 20 5c 0d     true    0] \.
11a0: 0a 20 20 20 20 5b 6c 69 73 74 20 44 65 63 69 6d  .    [list Decim
11b0: 61 6c 20 20 20 20 20 20 20 20 20 47 65 74 44 65  al         GetDe
11c0: 63 69 6d 61 6c 20 20 20 20 66 61 6c 73 65 20 20  cimal    false  
11d0: 20 44 65 63 69 6d 61 6c 56 61 6c 75 65 20 20 20   DecimalValue   
11e0: 20 74 72 75 65 20 20 20 20 30 5d 20 5c 0d 0a 20   true    0] \.. 
11f0: 20 20 20 5b 6c 69 73 74 20 44 6f 75 62 6c 65 20     [list Double 
1200: 20 20 20 20 20 20 20 20 20 47 65 74 44 6f 75 62           GetDoub
1210: 6c 65 20 20 20 20 20 66 61 6c 73 65 20 20 20 44  le     false   D
1220: 6f 75 62 6c 65 56 61 6c 75 65 20 20 20 20 20 74  oubleValue     t
1230: 72 75 65 20 20 20 20 30 5d 20 5c 0d 0a 20 20 20  rue    0] \..   
1240: 20 5b 6c 69 73 74 20 53 69 6e 67 6c 65 20 20 20   [list Single   
1250: 20 20 20 20 20 20 20 47 65 74 46 6c 6f 61 74 20         GetFloat 
1260: 20 20 20 20 20 66 61 6c 73 65 20 20 20 46 6c 6f       false   Flo
1270: 61 74 56 61 6c 75 65 20 20 20 20 20 20 74 72 75  atValue      tru
1280: 65 20 20 20 20 30 5d 20 5c 0d 0a 20 20 20 20 5b  e    0] \..    [
1290: 6c 69 73 74 20 47 75 69 64 20 20 20 20 20 20 20  list Guid       
12a0: 20 20 20 20 20 47 65 74 47 75 69 64 20 20 20 20       GetGuid    
12b0: 20 20 20 66 61 6c 73 65 20 20 20 47 75 69 64 56     false   GuidV
12c0: 61 6c 75 65 20 20 20 20 20 20 20 74 72 75 65 20  alue       true 
12d0: 20 20 20 5c 0d 0a 20 20 20 20 20 20 20 20 30 30     \..        00
12e0: 30 30 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30  000000-0000-0000
12f0: 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30 30  -0000-0000000000
1300: 30 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74  00] \..    [list
1310: 20 49 6e 74 31 36 20 20 20 20 20 20 20 20 20 20   Int16          
1320: 20 47 65 74 49 6e 74 31 36 20 20 20 20 20 20 66   GetInt16      f
1330: 61 6c 73 65 20 20 20 49 6e 74 31 36 56 61 6c 75  alse   Int16Valu
1340: 65 20 20 20 20 20 20 74 72 75 65 20 20 20 20 30  e      true    0
1350: 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 49  ] \..    [list I
1360: 6e 74 33 32 20 20 20 20 20 20 20 20 20 20 20 47  nt32           G
1370: 65 74 49 6e 74 33 32 20 20 20 20 20 20 66 61 6c  etInt32      fal
1380: 73 65 20 20 20 49 6e 74 33 32 56 61 6c 75 65 20  se   Int32Value 
1390: 20 20 20 20 20 74 72 75 65 20 20 20 20 30 5d 20       true    0] 
13a0: 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 49 6e 74  \..    [list Int
13b0: 36 34 20 20 20 20 20 20 20 20 20 20 20 47 65 74  64           Get
13c0: 49 6e 74 36 34 20 20 20 20 20 20 66 61 6c 73 65  Int64      false
13d0: 20 20 20 49 6e 74 36 34 56 61 6c 75 65 20 20 20     Int64Value   
13e0: 20 20 20 74 72 75 65 20 20 20 20 30 5d 20 5c 0d     true    0] \.
13f0: 0a 20 20 20 20 5b 6c 69 73 74 20 53 74 72 69 6e  .    [list Strin
1400: 67 20 20 20 20 20 20 20 20 20 20 47 65 74 53 74  g          GetSt
1410: 72 69 6e 67 20 20 20 20 20 66 61 6c 73 65 20 20  ring     false  
1420: 20 53 74 72 69 6e 67 56 61 6c 75 65 20 20 20 20   StringValue    
1430: 20 66 61 6c 73 65 20 20 20 6e 6f 6e 65 5d 20 5c   false   none] \
1440: 0d 0a 20 20 20 20 5b 6c 69 73 74 20 4f 62 6a 65  ..    [list Obje
1450: 63 74 20 20 20 20 20 20 20 20 20 20 47 65 74 56  ct          GetV
1460: 61 6c 75 65 20 20 20 20 20 20 66 61 6c 73 65 20  alue      false 
1470: 20 20 56 61 6c 75 65 20 20 20 20 20 20 20 20 20    Value         
1480: 20 20 66 61 6c 73 65 20 20 20 6e 75 6c 6c 5d 20    false   null] 
1490: 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 53 44 53  \..    [list SDS
14a0: 2e 53 51 4c 69 74 65 42 6c 6f 62 20 20 47 65 74  .SQLiteBlob  Get
14b0: 42 6c 6f 62 20 20 20 20 20 20 20 66 61 6c 73 65  Blob       false
14c0: 20 20 20 42 6c 6f 62 56 61 6c 75 65 20 20 20 20     BlobValue    
14d0: 20 20 20 66 61 6c 73 65 20 20 20 30 5d 5d 0d 0a     false   0]]..
14e0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
14f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1530: 23 0d 0a 0d 0a 73 65 74 20 65 78 70 65 63 74 65  #....set expecte
1540: 64 52 65 73 75 6c 74 73 20 5b 6c 69 73 74 20 5c  dResults [list \
1550: 0d 0a 20 20 20 20 7b 46 61 6c 73 65 20 46 61 6c  ..    {False Fal
1560: 73 65 20 54 72 75 65 20 46 61 6c 73 65 20 46 61  se True False Fa
1570: 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20  lse False False 
1580: 46 61 6c 73 65 7d 20 5c 0d 0a 20 20 20 20 7b 30  False} \..    {0
1590: 20 30 20 31 20 30 20 30 20 30 20 30 20 30 7d 20   0 1 0 0 0 0 0} 
15a0: 5c 0d 0a 20 20 20 20 7b 30 20 31 20 34 38 20 31  \..    {0 1 48 1
15b0: 20 34 39 20 33 20 7b 34 39 20 34 36 20 35 30 7d   49 3 {49 46 50}
15c0: 20 35 20 7b 31 31 36 20 31 30 34 20 31 31 34 5c   5 {116 104 114\
15d0: 0d 0a 20 20 20 20 20 20 20 20 31 30 31 20 31 30  ..        101 10
15e0: 31 7d 20 31 20 34 20 32 37 20 7b 35 30 20 34 38  1} 1 4 27 {50 48
15f0: 20 34 39 20 35 34 20 34 35 20 34 38 20 35 34 5c   49 54 45 48 54\
1600: 0d 0a 20 20 20 20 20 20 20 20 34 35 20 34 39 20  ..        45 49 
1610: 35 37 20 33 32 20 34 39 20 35 37 20 35 38 20 35  57 32 49 57 58 5
1620: 33 20 34 38 20 35 38 20 34 38 20 35 32 20 34 36  3 48 58 48 52 46
1630: 5c 0d 0a 20 20 20 20 20 20 20 20 34 39 20 35 30  \..        49 50
1640: 20 35 31 20 35 32 20 35 33 20 35 34 20 35 35 7d   51 52 53 54 55}
1650: 20 33 36 20 7b 35 35 20 35 32 20 31 30 32 20 34   36 {55 52 102 4
1660: 39 5c 0d 0a 20 20 20 20 20 20 20 20 31 30 32 20  9\..        102 
1670: 35 32 20 34 38 20 35 30 20 34 35 20 31 30 30 20  52 48 50 45 100 
1680: 31 30 30 20 31 30 31 20 31 30 32 20 34 35 20 35  100 101 102 45 5
1690: 32 5c 0d 0a 20 20 20 20 20 20 20 20 34 38 20 35  2\..        48 5
16a0: 30 20 35 35 20 34 35 20 39 37 20 35 35 20 35 36  0 55 45 97 55 56
16b0: 20 31 30 32 20 34 35 20 35 31 20 35 36 20 35 32   102 45 51 56 52
16c0: 20 35 35 5c 0d 0a 20 20 20 20 20 20 20 20 31 30   55\..        10
16d0: 32 20 39 37 20 35 37 20 35 35 20 39 38 20 35 36  2 97 57 55 98 56
16e0: 20 35 31 20 34 38 7d 7d 20 5c 0d 0a 20 20 20 20   51 48}} \..    
16f0: 22 3c 4e 55 4c 3e 20 3c 4e 55 4c 3e 20 5c 78 30  "<NUL> <NUL> \x0
1700: 31 20 3c 4e 55 4c 3e 20 3c 4e 55 4c 3e 20 3c 4e  1 <NUL> <NUL> <N
1710: 55 4c 3e 20 3c 4e 55 4c 3e 20 3c 4e 55 4c 3e 22  UL> <NUL> <NUL>"
1720: 20 5c 0d 0a 20 20 20 20 22 30 20 31 20 30 20 31   \..    "0 1 0 1
1730: 20 31 20 33 20 7b 31 20 2e 20 32 7d 20 31 20 74   1 3 {1 . 2} 1 t
1740: 20 31 20 5c 78 30 34 20 31 20 32 20 31 20 37 22   1 \x04 1 2 1 7"
1750: 20 5c 0d 0a 20 20 20 20 7b 7b 30 30 30 31 2d 30   \..    {{0001-0
1760: 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 5a 7d 20  1-01 00:00:00Z} 
1770: 7b 30 30 30 31 2d 30 31 2d 30 31 20 30 30 3a 30  {0001-01-01 00:0
1780: 30 3a 30 30 5a 7d 5c 0d 0a 20 20 20 20 20 20 20  0:00Z}\..       
1790: 20 7b 30 30 30 31 2d 30 31 2d 30 31 20 30 30 3a   {0001-01-01 00:
17a0: 30 30 3a 30 30 5a 7d 20 7b 30 30 30 31 2d 30 31  00:00Z} {0001-01
17b0: 2d 30 31 20 30 30 3a 30 30 3a 30 30 5a 7d 5c 0d  -01 00:00:00Z}\.
17c0: 0a 20 20 20 20 20 20 20 20 7b 30 30 30 31 2d 30  .        {0001-0
17d0: 31 2d 30 31 20 30 30 3a 30 30 3a 30 30 5a 7d 20  1-01 00:00:00Z} 
17e0: 7b 30 30 30 31 2d 30 31 2d 30 31 20 30 30 3a 30  {0001-01-01 00:0
17f0: 30 3a 30 30 5a 7d 5c 0d 0a 20 20 20 20 20 20 20  0:00Z}\..       
1800: 20 7b 32 30 31 36 2d 30 36 2d 31 39 20 31 39 3a   {2016-06-19 19:
1810: 35 30 3a 30 34 2e 31 32 33 34 35 36 37 5a 7d 20  50:04.1234567Z} 
1820: 7b 30 30 30 31 2d 30 31 2d 30 31 5c 0d 0a 20 20  {0001-01-01\..  
1830: 20 20 20 20 20 20 30 30 3a 30 30 3a 30 30 5a 7d        00:00:00Z}
1840: 7d 20 5c 0d 0a 20 20 20 20 7b 30 20 30 20 31 20  } \..    {0 0 1 
1850: 31 2e 32 20 30 20 30 20 30 20 30 7d 20 5c 0d 0a  1.2 0 0 0 0} \..
1860: 20 20 20 20 7b 30 20 30 20 31 20 31 2e 32 20 30      {0 0 1 1.2 0
1870: 20 30 20 30 20 30 7d 20 5c 0d 0a 20 20 20 20 7b   0 0 0} \..    {
1880: 30 20 30 20 31 20 31 2e 32 20 30 20 30 20 30 20  0 0 1 1.2 0 0 0 
1890: 30 7d 20 5c 0d 0a 20 20 20 20 7b 30 30 30 30 30  0} \..    {00000
18a0: 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30  000-0000-0000-00
18b0: 30 30 2d 30 30 30 30 30 30 30 30 30 30 30 30 5c  00-000000000000\
18c0: 0d 0a 20 20 20 20 20 20 20 20 30 30 30 30 30 30  ..        000000
18d0: 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30  00-0000-0000-000
18e0: 30 2d 30 30 30 30 30 30 30 30 30 30 30 30 5c 0d  0-000000000000\.
18f0: 0a 20 20 20 20 20 20 20 20 30 30 30 30 30 30 30  .        0000000
1900: 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30  0-0000-0000-0000
1910: 2d 30 30 30 30 30 30 30 30 30 30 30 30 5c 0d 0a  -000000000000\..
1920: 20 20 20 20 20 20 20 20 30 30 30 30 30 30 30 30          00000000
1930: 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d  -0000-0000-0000-
1940: 30 30 30 30 30 30 30 30 30 30 30 30 5c 0d 0a 20  000000000000\.. 
1950: 20 20 20 20 20 20 20 30 30 30 30 30 30 30 30 2d         00000000-
1960: 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30  0000-0000-0000-0
1970: 30 30 30 30 30 30 30 30 30 30 30 5c 0d 0a 20 20  00000000000\..  
1980: 20 20 20 20 20 20 30 30 30 36 30 35 30 34 2d 30        00060504-0
1990: 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30  000-0000-0000-00
19a0: 30 30 30 30 30 30 30 30 30 30 5c 0d 0a 20 20 20  0000000000\..   
19b0: 20 20 20 20 20 30 30 30 30 30 30 30 30 2d 30 30       00000000-00
19c0: 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30  00-0000-0000-000
19d0: 30 30 30 30 30 30 30 30 30 5c 0d 0a 20 20 20 20  000000000\..    
19e0: 20 20 20 20 37 34 66 31 66 34 30 32 2d 64 64 65      74f1f402-dde
19f0: 66 2d 34 30 32 37 2d 61 37 38 66 2d 33 38 34 37  f-4027-a78f-3847
1a00: 66 61 39 37 62 38 33 30 7d 20 5c 0d 0a 20 20 20  fa97b830} \..   
1a10: 20 7b 30 20 30 20 31 20 30 20 30 20 30 20 30 20   {0 0 1 0 0 0 0 
1a20: 30 7d 20 5c 0d 0a 20 20 20 20 7b 30 20 30 20 31  0} \..    {0 0 1
1a30: 20 30 20 30 20 30 20 30 20 30 7d 20 5c 0d 0a 20   0 0 0 0 0} \.. 
1a40: 20 20 20 7b 30 20 30 20 31 20 30 20 30 20 30 20     {0 0 1 0 0 0 
1a50: 30 20 30 7d 20 5c 0d 0a 20 20 20 20 22 6e 6f 6e  0 0} \..    "non
1a60: 65 20 6e 6f 6e 65 20 6e 6f 6e 65 20 6e 6f 6e 65  e none none none
1a70: 20 74 68 72 65 65 20 5c 78 30 34 5c 78 30 35 5c   three \x04\x05\
1a80: 78 30 36 5c 0d 0a 20 20 20 20 20 20 20 20 7b 32  x06\..        {2
1a90: 30 31 36 2d 30 36 2d 31 39 20 31 39 3a 35 30 3a  016-06-19 19:50:
1aa0: 30 34 2e 31 32 33 34 35 36 37 7d 5c 0d 0a 20 20  04.1234567}\..  
1ab0: 20 20 20 20 20 20 37 34 66 31 66 34 30 32 2d 64        74f1f402-d
1ac0: 64 65 66 2d 34 30 32 37 2d 61 37 38 66 2d 33 38  def-4027-a78f-38
1ad0: 34 37 66 61 39 37 62 38 33 30 22 20 5c 0d 0a 20  47fa97b830" \.. 
1ae0: 20 20 20 7b 7b 7d 20 30 20 31 20 31 2e 32 20 74     {{} 0 1 1.2 t
1af0: 68 72 65 65 20 7b 34 20 35 20 36 7d 20 7b 32 30  hree {4 5 6} {20
1b00: 31 36 2d 30 36 2d 31 39 5c 0d 0a 20 20 20 20 20  16-06-19\..     
1b10: 20 20 20 31 39 3a 35 30 3a 30 34 2e 31 32 33 34     19:50:04.1234
1b20: 35 36 37 7d 5c 0d 0a 20 20 20 20 20 20 20 20 37  567}\..        7
1b30: 34 66 31 66 34 30 32 2d 64 64 65 66 2d 34 30 32  4f1f402-ddef-402
1b40: 37 2d 61 37 38 66 2d 33 38 34 37 66 61 39 37 62  7-a78f-3847fa97b
1b50: 38 33 30 7d 20 5c 0d 0a 20 20 20 20 7b 53 79 73  830} \..    {Sys
1b60: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1b70: 53 51 4c 69 74 65 42 6c 6f 62 20 53 79 73 74 65  SQLiteBlob Syste
1b80: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1b90: 4c 69 74 65 42 6c 6f 62 5c 0d 0a 20 20 20 20 20  LiteBlob\..     
1ba0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1bb0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 42 6c 6f 62  QLite.SQLiteBlob
1bc0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1bd0: 69 74 65 2e 53 51 4c 69 74 65 42 6c 6f 62 5c 0d  ite.SQLiteBlob\.
1be0: 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e  .        System.
1bf0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
1c00: 74 65 42 6c 6f 62 20 53 79 73 74 65 6d 2e 44 61  teBlob System.Da
1c10: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
1c20: 42 6c 6f 62 5c 0d 0a 20 20 20 20 20 20 20 20 53  Blob\..        S
1c30: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1c40: 65 2e 53 51 4c 69 74 65 42 6c 6f 62 20 53 79 73  e.SQLiteBlob Sys
1c50: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1c60: 53 51 4c 69 74 65 42 6c 6f 62 7d 5d 0d 0a 0d 0a  SQLiteBlob}]....
1c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0d  ###############.
1cc0: 0a 0d 0a 73 65 74 20 73 61 76 65 64 44 61 74 65  ...set savedDate
1cd0: 54 69 6d 65 46 6f 72 6d 61 74 20 5b 6f 62 6a 65  TimeFormat [obje
1ce0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
1cf0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
1d00: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 0d  DateTimeFormat].
1d10: 0a 69 66 20 7b 21 5b 69 73 4f 62 6a 65 63 74 48  .if {![isObjectH
1d20: 61 6e 64 6c 65 20 24 73 61 76 65 64 44 61 74 65  andle $savedDate
1d30: 54 69 6d 65 46 6f 72 6d 61 74 5d 7d 20 74 68 65  TimeFormat]} the
1d40: 6e 20 7b 73 65 74 20 73 61 76 65 64 44 61 74 65  n {set savedDate
1d50: 54 69 6d 65 46 6f 72 6d 61 74 20 6e 75 6c 6c 7d  TimeFormat null}
1d60: 0d 0a 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  ..object invoke 
1d70: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
1d80: 63 74 69 76 65 20 44 61 74 65 54 69 6d 65 46 6f  ctive DateTimeFo
1d90: 72 6d 61 74 20 5b 67 65 74 44 61 74 65 54 69 6d  rmat [getDateTim
1da0: 65 46 6f 72 6d 61 74 5d 0d 0a 0d 0a 73 65 74 20  eFormat]....set 
1db0: 73 61 76 65 64 44 61 74 65 54 69 6d 65 4b 69 6e  savedDateTimeKin
1dc0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
1dd0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
1de0: 41 63 74 69 76 65 20 44 61 74 65 54 69 6d 65 4b  Active DateTimeK
1df0: 69 6e 64 5d 0d 0a 6f 62 6a 65 63 74 20 69 6e 76  ind]..object inv
1e00: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
1e10: 47 65 74 41 63 74 69 76 65 20 44 61 74 65 54 69  GetActive DateTi
1e20: 6d 65 4b 69 6e 64 20 55 74 63 0d 0a 0d 0a 23 23  meKind Utc....##
1e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1e80: 0a 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b  .for {set i 0} {
1e90: 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 70  $i < [llength $p
1ea0: 61 72 61 6d 73 5d 7d 20 7b 69 6e 63 72 20 69 7d  arams]} {incr i}
1eb0: 20 7b 0d 0a 20 20 66 6f 72 65 61 63 68 20 7b 0d   {..  foreach {.
1ec0: 0a 20 20 20 20 74 79 70 65 4e 61 6d 65 20 6d 65  .    typeName me
1ed0: 74 68 6f 64 4e 61 6d 65 20 69 73 41 72 72 61 79  thodName isArray
1ee0: 20 70 72 6f 70 65 72 74 79 4e 61 6d 65 20 69 73   propertyName is
1ef0: 52 65 71 75 69 72 65 64 20 76 61 6c 75 65 0d 0a  Required value..
1f00: 20 20 7d 20 5b 6c 69 6e 64 65 78 20 24 70 61 72    } [lindex $par
1f10: 61 6d 73 20 24 69 5d 20 62 72 65 61 6b 0d 0a 0d  ams $i] break...
1f20: 0a 20 20 73 65 74 20 74 79 70 65 4e 61 6d 65 20  .  set typeName 
1f30: 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
1f40: 74 20 53 44 53 2e 20 53 79 73 74 65 6d 2e 44 61  t SDS. System.Da
1f50: 74 61 2e 53 51 4c 69 74 65 2e 5d 20 24 74 79 70  ta.SQLite.] $typ
1f60: 65 4e 61 6d 65 5d 0d 0a 20 20 73 65 74 20 65 78  eName]..  set ex
1f70: 70 65 63 74 65 64 52 65 73 75 6c 74 20 5b 6c 69  pectedResult [li
1f80: 6e 64 65 78 20 24 65 78 70 65 63 74 65 64 52 65  ndex $expectedRe
1f90: 73 75 6c 74 73 20 24 69 5d 0d 0a 0d 0a 20 20 23  sults $i]....  #
1fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fe0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1ff0: 20 20 70 72 6f 63 20 72 65 61 64 56 61 6c 75 65    proc readValue
2000: 43 61 6c 6c 62 61 63 6b 32 20 24 72 65 61 64 41  Callback2 $readA
2010: 72 67 73 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20  rgs [subst {..  
2020: 20 20 69 66 20 7b 24 69 73 41 72 72 61 79 7d 20    if {$isArray} 
2030: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66  then {..      if
2040: 20 7b 5c 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   {\[catch {..   
2050: 20 20 20 20 20 73 65 74 20 64 61 74 61 4f 66 66       set dataOff
2060: 73 65 74 20 5c 5b 5c 24 65 76 65 6e 74 41 72 67  set \[\$eventArg
2070: 73 20 45 78 74 72 61 45 76 65 6e 74 41 72 67 73  s ExtraEventArgs
2080: 2e 44 61 74 61 4f 66 66 73 65 74 5c 5d 0d 0a 0d  .DataOffset\]...
2090: 0a 20 20 20 20 20 20 20 20 73 65 74 20 62 75 66  .        set buf
20a0: 66 65 72 20 5c 5b 5c 24 65 76 65 6e 74 41 72 67  fer \[\$eventArg
20b0: 73 20 2d 63 72 65 61 74 65 20 5b 61 70 70 65 6e  s -create [appen
20c0: 64 41 72 67 73 20 45 78 74 72 61 45 76 65 6e 74  dArgs ExtraEvent
20d0: 41 72 67 73 2e 20 5c 0d 0a 20 20 20 20 20 20 20  Args. \..       
20e0: 20 20 20 20 20 24 74 79 70 65 4e 61 6d 65 20 42       $typeName B
20f0: 75 66 66 65 72 5d 5c 5d 0d 0a 0d 0a 20 20 20 20  uffer]\]....    
2100: 20 20 20 20 73 65 74 20 62 75 66 66 65 72 4f 66      set bufferOf
2110: 66 73 65 74 20 5c 5b 5c 24 65 76 65 6e 74 41 72  fset \[\$eventAr
2120: 67 73 20 45 78 74 72 61 45 76 65 6e 74 41 72 67  gs ExtraEventArg
2130: 73 2e 42 75 66 66 65 72 4f 66 66 73 65 74 5c 5d  s.BufferOffset\]
2140: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6c 65  ..        set le
2150: 6e 67 74 68 20 5c 5b 5c 24 65 76 65 6e 74 41 72  ngth \[\$eventAr
2160: 67 73 20 45 78 74 72 61 45 76 65 6e 74 41 72 67  gs ExtraEventArg
2170: 73 2e 4c 65 6e 67 74 68 5c 5d 0d 0a 0d 0a 20 20  s.Length\]....  
2180: 20 20 20 20 20 20 73 65 74 20 72 65 61 64 56 61        set readVa
2190: 6c 75 65 20 5c 5b 5c 24 64 61 74 61 52 65 61 64  lue \[\$dataRead
21a0: 65 72 20 5c 5b 5c 24 65 76 65 6e 74 41 72 67 73  er \[\$eventArgs
21b0: 20 4d 65 74 68 6f 64 4e 61 6d 65 5c 5d 20 5c 0d   MethodName\] \.
21c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 24 69  .            \$i
21d0: 6e 64 65 78 20 5c 24 64 61 74 61 4f 66 66 73 65  ndex \$dataOffse
21e0: 74 20 5c 24 62 75 66 66 65 72 20 5c 24 62 75 66  t \$buffer \$buf
21f0: 66 65 72 4f 66 66 73 65 74 20 5c 24 6c 65 6e 67  ferOffset \$leng
2200: 74 68 5c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  th\]....        
2210: 5c 24 65 76 65 6e 74 41 72 67 73 20 5c 5b 61 70  \$eventArgs \[ap
2220: 70 65 6e 64 41 72 67 73 20 56 61 6c 75 65 2e 20  pendArgs Value. 
2230: 24 70 72 6f 70 65 72 74 79 4e 61 6d 65 5c 5d 20  $propertyName\] 
2240: 5c 24 72 65 61 64 56 61 6c 75 65 0d 0a 20 20 20  \$readValue..   
2250: 20 20 20 7d 20 65 72 72 6f 72 5c 5d 7d 20 74 68     } error\]} th
2260: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
2270: 74 20 72 65 61 64 56 61 6c 75 65 20 5c 5b 5c 24  t readValue \[\$
2280: 64 61 74 61 52 65 61 64 65 72 20 2d 74 6f 73 74  dataReader -tost
2290: 72 69 6e 67 20 47 65 74 56 61 6c 75 65 20 5c 24  ring GetValue \$
22a0: 69 6e 64 65 78 5c 5d 0d 0a 0d 0a 20 20 20 20 20  index\]....     
22b0: 20 20 20 69 66 20 7b 22 24 74 79 70 65 4e 61 6d     if {"$typeNam
22c0: 65 22 20 65 71 20 22 43 68 61 72 22 7d 20 74 68  e" eq "Char"} th
22d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
22e0: 73 65 74 20 73 74 72 69 6e 67 20 5c 5b 6f 62 6a  set string \[obj
22f0: 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61  ect create -alia
2300: 73 20 53 74 72 69 6e 67 20 5c 24 72 65 61 64 56  s String \$readV
2310: 61 6c 75 65 5c 5d 0d 0a 20 20 20 20 20 20 20 20  alue\]..        
2320: 20 20 73 65 74 20 62 75 66 66 65 72 20 5c 5b 5c    set buffer \[\
2330: 24 73 74 72 69 6e 67 20 2d 63 72 65 61 74 65 20  $string -create 
2340: 2d 61 6c 69 61 73 20 54 6f 43 68 61 72 41 72 72  -alias ToCharArr
2350: 61 79 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  ay]..        } e
2360: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
2370: 20 73 65 74 20 62 75 66 66 65 72 20 5c 5b 6f 62   set buffer \[ob
2380: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65  ject invoke -cre
2390: 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  ate -alias \..  
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
23b0: 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67  em.Text.Encoding
23c0: 2e 55 54 46 38 20 47 65 74 42 79 74 65 73 20 5c  .UTF8 GetBytes \
23d0: 24 72 65 61 64 56 61 6c 75 65 5c 5d 0d 0a 20 20  $readValue\]..  
23e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23f0: 20 20 20 5c 24 65 76 65 6e 74 41 72 67 73 20 5c     \$eventArgs \
2400: 5b 61 70 70 65 6e 64 41 72 67 73 20 56 61 6c 75  [appendArgs Valu
2410: 65 2e 20 24 70 72 6f 70 65 72 74 79 4e 61 6d 65  e. $propertyName
2420: 5c 5d 20 5c 24 62 75 66 66 65 72 0d 0a 20 20 20  \] \$buffer..   
2430: 20 20 20 20 20 5c 24 65 76 65 6e 74 41 72 67 73       \$eventArgs
2440: 20 45 78 74 72 61 45 76 65 6e 74 41 72 67 73 2e   ExtraEventArgs.
2450: 4c 65 6e 67 74 68 20 5c 5b 5c 24 62 75 66 66 65  Length \[\$buffe
2460: 72 20 4c 65 6e 67 74 68 5c 5d 0d 0a 20 20 20 20  r Length\]..    
2470: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
2480: 20 20 20 20 73 65 74 20 62 75 66 66 65 72 20 5c      set buffer \
2490: 5b 5c 24 65 76 65 6e 74 41 72 67 73 20 2d 63 72  [\$eventArgs -cr
24a0: 65 61 74 65 20 5b 61 70 70 65 6e 64 41 72 67 73  eate [appendArgs
24b0: 20 45 78 74 72 61 45 76 65 6e 74 41 72 67 73 2e   ExtraEventArgs.
24c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
24d0: 24 74 79 70 65 4e 61 6d 65 20 42 75 66 66 65 72  $typeName Buffer
24e0: 5d 5c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5c  ]\]....        \
24f0: 24 65 76 65 6e 74 41 72 67 73 20 5c 5b 61 70 70  $eventArgs \[app
2500: 65 6e 64 41 72 67 73 20 56 61 6c 75 65 2e 20 24  endArgs Value. $
2510: 70 72 6f 70 65 72 74 79 4e 61 6d 65 5c 5d 20 5c  propertyName\] \
2520: 24 62 75 66 66 65 72 0d 0a 20 20 20 20 20 20 7d  $buffer..      }
2530: 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a  ..    } else {..
2540: 20 20 20 20 20 20 69 66 20 7b 5c 5b 63 61 74 63        if {\[catc
2550: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  h {..        if 
2560: 7b 22 24 74 79 70 65 4e 61 6d 65 22 20 65 71 20  {"$typeName" eq 
2570: 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
2580: 69 74 65 2e 53 51 4c 69 74 65 42 6c 6f 62 22 7d  ite.SQLiteBlob"}
2590: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
25a0: 20 20 20 73 65 74 20 72 65 61 64 56 61 6c 75 65     set readValue
25b0: 20 5c 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65   \[object create
25c0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
25d0: 69 63 20 24 74 79 70 65 4e 61 6d 65 20 5c 0d 0a  ic $typeName \..
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
25f0: 6c 6c 20 6e 75 6c 6c 5c 5d 0d 0a 20 20 20 20 20  ll null\]..     
2600: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
2610: 20 20 20 20 20 20 20 73 65 74 20 72 65 61 64 56         set readV
2620: 61 6c 75 65 20 5c 5b 5c 24 64 61 74 61 52 65 61  alue \[\$dataRea
2630: 64 65 72 20 5c 5b 5c 24 65 76 65 6e 74 41 72 67  der \[\$eventArg
2640: 73 20 4d 65 74 68 6f 64 4e 61 6d 65 5c 5d 20 5c  s MethodName\] \
2650: 24 69 6e 64 65 78 5c 5d 0d 0a 0d 0a 20 20 20 20  $index\]....    
2660: 20 20 20 20 20 20 69 66 20 7b 22 24 74 79 70 65        if {"$type
2670: 4e 61 6d 65 22 20 65 71 20 22 43 68 61 72 22 7d  Name" eq "Char"}
2680: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
2690: 20 20 20 20 20 73 65 74 20 72 65 61 64 56 61 6c       set readVal
26a0: 75 65 20 5c 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ue \[object invo
26b0: 6b 65 20 2d 63 72 65 61 74 65 20 43 68 61 72 20  ke -create Char 
26c0: 50 61 72 73 65 20 5c 24 72 65 61 64 56 61 6c 75  Parse \$readValu
26d0: 65 5c 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  e\]..          }
26e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26f0: 20 20 20 20 20 20 20 5c 24 65 76 65 6e 74 41 72         \$eventAr
2700: 67 73 20 5c 5b 61 70 70 65 6e 64 41 72 67 73 20  gs \[appendArgs 
2710: 56 61 6c 75 65 2e 20 24 70 72 6f 70 65 72 74 79  Value. $property
2720: 4e 61 6d 65 5c 5d 20 5c 24 72 65 61 64 56 61 6c  Name\] \$readVal
2730: 75 65 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f  ue..      } erro
2740: 72 5c 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r\]} then {..   
2750: 20 20 20 20 20 5c 24 65 76 65 6e 74 41 72 67 73       \$eventArgs
2760: 20 5c 5b 61 70 70 65 6e 64 41 72 67 73 20 56 61   \[appendArgs Va
2770: 6c 75 65 2e 20 24 70 72 6f 70 65 72 74 79 4e 61  lue. $propertyNa
2780: 6d 65 5c 5d 20 7b 24 76 61 6c 75 65 7d 0d 0a 20  me\] {$value}.. 
2790: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
27a0: 0a 20 20 20 20 75 70 76 61 72 20 31 20 5c 24 63  .    upvar 1 \$c
27b0: 6f 6d 70 6c 65 74 65 56 61 72 4e 61 6d 65 20 63  ompleteVarName c
27c0: 6f 6d 70 6c 65 74 65 0d 0a 20 20 20 20 73 65 74  omplete..    set
27d0: 20 63 6f 6d 70 6c 65 74 65 20 5c 5b 6f 62 6a 65   complete \[obje
27e0: 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74  ct invoke -creat
27f0: 65 20 53 79 73 74 65 6d 2e 42 6f 6f 6c 65 61 6e  e System.Boolean
2800: 20 50 61 72 73 65 20 54 72 75 65 5c 5d 0d 0a 20   Parse True\].. 
2810: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
2820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2860: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 72 75 6e 54  ######....  runT
2870: 65 73 74 20 7b 74 65 73 74 20 5b 61 70 70 65 6e  est {test [appen
2880: 64 41 72 67 73 20 74 79 70 65 73 2d 32 2e 20 24  dArgs types-2. $
2890: 69 5d 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  i] [appendArgs $
28a0: 6d 65 74 68 6f 64 4e 61 6d 65 20 22 20 63 61 6c  methodName " cal
28b0: 6c 62 61 63 6b 22 5d 20 5c 0d 0a 20 20 20 20 20  lback"] \..     
28c0: 20 2d 73 65 74 75 70 20 5b 73 75 62 73 74 20 2d   -setup [subst -
28d0: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 7b 0d 0a 20 20  nocommands {..  
28e0: 20 20 73 65 74 20 74 79 70 65 4e 61 6d 65 20 7b    set typeName {
28f0: 24 74 79 70 65 4e 61 6d 65 7d 0d 0a 20 20 20 20  $typeName}..    
2900: 73 65 74 20 6d 65 74 68 6f 64 4e 61 6d 65 20 7b  set methodName {
2910: 24 6d 65 74 68 6f 64 4e 61 6d 65 7d 0d 0a 20 20  $methodName}..  
2920: 20 20 73 65 74 20 69 73 41 72 72 61 79 20 7b 24    set isArray {$
2930: 69 73 41 72 72 61 79 7d 0d 0a 0d 0a 20 20 20 20  isArray}....    
2940: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
2950: 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67  eName [appendArg
2960: 73 20 74 79 70 65 73 2d 32 2e 20 24 69 20 2e 64  s types-2. $i .d
2970: 62 5d 5d 20 22 22 20 22 22 20 22 22 20 5c 0d 0a  b]] "" "" "" \..
2980: 20 20 20 20 20 20 20 20 55 73 65 43 6f 6e 6e 65          UseConne
2990: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
29a0: 6c 6c 62 61 63 6b 73 0d 0a 20 20 7d 5d 20 2d 62  llbacks..  }] -b
29b0: 6f 64 79 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65  ody {..    sql e
29c0: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
29d0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
29e0: 20 74 31 28 78 20 49 4e 54 45 47 45 52 2c 20 79   t1(x INTEGER, y
29f0: 20 53 50 45 43 49 41 4c 29 3b 0d 0a 20 20 20 20   SPECIAL);..    
2a00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
2a10: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31   (x, y) VALUES(1
2a20: 2c 20 4e 55 4c 4c 29 3b 0d 0a 20 20 20 20 20 20  , NULL);..      
2a30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
2a40: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20  x, y) VALUES(2, 
2a50: 30 29 3b 0d 0a 20 20 20 20 20 20 49 4e 53 45 52  0);..      INSER
2a60: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
2a70: 20 56 41 4c 55 45 53 28 33 2c 20 31 29 3b 0d 0a   VALUES(3, 1);..
2a80: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2a90: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
2aa0: 45 53 28 34 2c 20 31 2e 32 29 3b 0d 0a 20 20 20  ES(4, 1.2);..   
2ab0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2ac0: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
2ad0: 35 2c 20 27 74 68 72 65 65 27 29 3b 0d 0a 20 20  5, 'three');..  
2ae0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2af0: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
2b00: 28 36 2c 20 58 27 30 34 30 35 30 36 27 29 3b 0d  (6, X'040506');.
2b10: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
2b20: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
2b30: 55 45 53 28 37 2c 20 27 32 30 31 36 2d 30 36 2d  UES(7, '2016-06-
2b40: 31 39 20 31 39 3a 35 30 3a 30 34 2e 31 32 33 34  19 19:50:04.1234
2b50: 35 36 37 27 29 3b 0d 0a 20 20 20 20 20 20 49 4e  567');..      IN
2b60: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
2b70: 20 79 29 20 56 41 4c 55 45 53 28 38 2c 20 27 37   y) VALUES(8, '7
2b80: 34 66 31 66 34 30 32 2d 64 64 65 66 2d 34 30 32  4f1f402-ddef-402
2b90: 37 2d 61 37 38 66 2d 33 38 34 37 66 61 39 37 62  7-a78f-3847fa97b
2ba0: 38 33 30 27 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  830');..    }...
2bb0: 0a 20 20 20 20 73 65 74 20 63 61 6c 6c 62 61 63  .    set callbac
2bc0: 6b 20 7b 2d 63 61 6c 6c 62 61 63 6b 66 6c 61 67  k {-callbackflag
2bd0: 73 20 2b 44 65 66 61 75 6c 74 20 72 65 61 64 56  s +Default readV
2be0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 32 7d 0d 0a  alueCallback2}..
2bf0: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69      set connecti
2c00: 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74  on [getDbConnect
2c10: 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20  ion]....    set 
2c20: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
2c30: 0a 20 20 20 20 73 65 74 20 74 79 70 65 43 61 6c  .    set typeCal
2c40: 6c 62 61 63 6b 73 20 5b 6f 62 6a 65 63 74 20 69  lbacks [object i
2c50: 6e 76 6f 6b 65 20 2d 6d 61 72 73 68 61 6c 66 6c  nvoke -marshalfl
2c60: 61 67 73 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c  ags +DynamicCall
2c70: 62 61 63 6b 20 5c 0d 0a 20 20 20 20 20 20 20 20  back \..        
2c80: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2c90: 74 65 2e 53 51 4c 69 74 65 54 79 70 65 43 61 6c  te.SQLiteTypeCal
2ca0: 6c 62 61 63 6b 73 20 43 72 65 61 74 65 20 6e 75  lbacks Create nu
2cb0: 6c 6c 20 24 63 61 6c 6c 62 61 63 6b 20 5c 0d 0a  ll $callback \..
2cc0: 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 6e 75 6c          null nul
2cd0: 6c 5d 0d 0a 0d 0a 20 20 20 20 24 63 6f 6e 6e 65  l]....    $conne
2ce0: 63 74 69 6f 6e 20 53 65 74 54 79 70 65 43 61 6c  ction SetTypeCal
2cf0: 6c 62 61 63 6b 73 20 53 50 45 43 49 41 4c 20 24  lbacks SPECIAL $
2d00: 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d  typeCallbacks...
2d10: 0a 20 20 20 20 73 65 74 20 64 61 74 61 52 65 61  .    set dataRea
2d20: 64 65 72 20 5b 73 71 6c 20 65 78 65 63 75 74 65  der [sql execute
2d30: 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
2d40: 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
2d50: 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d  der \..        -
2d60: 61 6c 69 61 73 20 24 64 62 20 22 53 45 4c 45 43  alias $db "SELEC
2d70: 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T y FROM t1 ORDE
2d80: 52 20 42 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 20  R BY x;"]....   
2d90: 20 77 68 69 6c 65 20 7b 5b 24 64 61 74 61 52 65   while {[$dataRe
2da0: 61 64 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a 20  ader Read]} {.. 
2db0: 20 20 20 20 20 69 66 20 7b 24 69 73 41 72 72 61       if {$isArra
2dc0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  y} then {..     
2dd0: 20 20 20 73 65 74 20 62 75 66 66 65 72 20 5b 6f     set buffer [o
2de0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a  bject invoke \..
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 63 72 65              -cre
2e00: 61 74 65 20 41 72 72 61 79 20 43 72 65 61 74 65  ate Array Create
2e10: 49 6e 73 74 61 6e 63 65 20 24 74 79 70 65 4e 61  Instance $typeNa
2e20: 6d 65 20 31 30 30 5d 0d 0a 0d 0a 20 20 20 20 20  me 100]....     
2e30: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
2e40: 0a 20 20 20 20 20 20 20 20 20 20 24 64 61 74 61  .          $data
2e50: 52 65 61 64 65 72 20 24 6d 65 74 68 6f 64 4e 61  Reader $methodNa
2e60: 6d 65 20 30 20 30 20 24 62 75 66 66 65 72 20 30  me 0 0 $buffer 0
2e70: 20 31 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61   1..        } va
2e80: 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  lue] == 0} then 
2e90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70  {..          lap
2ea0: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c  pend result $val
2eb0: 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ue....          
2ec0: 69 66 20 7b 24 76 61 6c 75 65 20 3e 20 30 7d 20  if {$value > 0} 
2ed0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
2ee0: 20 20 20 20 73 65 74 20 6c 69 73 74 20 5b 6f 62      set list [ob
2ef0: 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69  ject create -ali
2f00: 61 73 20 53 74 72 69 6e 67 4c 69 73 74 20 24 62  as StringList $b
2f10: 75 66 66 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  uffer]....      
2f20: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
2f30: 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  sult [object inv
2f40: 6f 6b 65 20 53 74 72 69 6e 67 4c 69 73 74 20 47  oke StringList G
2f50: 65 74 52 61 6e 67 65 20 5c 0d 0a 20 20 20 20 20  etRange \..     
2f60: 20 20 20 20 20 20 20 20 20 20 20 24 6c 69 73 74             $list
2f70: 20 30 20 5b 65 78 70 72 20 7b 24 76 61 6c 75 65   0 [expr {$value
2f80: 20 2d 20 31 7d 5d 20 66 61 6c 73 65 5d 0d 0a 20   - 1}] false].. 
2f90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2fa0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
2fb0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2fc0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 65 72 72  result [list err
2fd0: 6f 72 28 61 72 72 61 79 29 20 24 3a 3a 65 72 72  or(array) $::err
2fe0: 6f 72 43 6f 64 65 5d 0d 0a 20 20 20 20 20 20 20  orCode]..       
2ff0: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
3000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
3010: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
3020: 20 20 20 20 69 66 20 7b 24 74 79 70 65 4e 61 6d      if {$typeNam
3030: 65 20 65 71 20 22 53 79 73 74 65 6d 2e 44 61 74  e eq "System.Dat
3040: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 42  a.SQLite.SQLiteB
3050: 6c 6f 62 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lob"} then {..  
3060: 20 20 20 20 20 20 20 20 20 20 24 64 61 74 61 52            $dataR
3070: 65 61 64 65 72 20 24 6d 65 74 68 6f 64 4e 61 6d  eader $methodNam
3080: 65 20 30 20 74 72 75 65 3b 20 23 20 72 65 61 64  e 0 true; # read
3090: 2d 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  -only..         
30a0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
30b0: 20 20 20 20 20 20 20 24 64 61 74 61 52 65 61 64         $dataRead
30c0: 65 72 20 24 6d 65 74 68 6f 64 4e 61 6d 65 20 30  er $methodName 0
30d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
30e0: 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20         } value] 
30f0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..  
3100: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
3110: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75  ing length $valu
3120: 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  e] == 0} then {.
3130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
3140: 70 65 6e 64 20 72 65 73 75 6c 74 20 3c 45 4d 50  pend result <EMP
3150: 54 59 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  TY>..          }
3160: 20 65 6c 73 65 69 66 20 7b 24 76 61 6c 75 65 20   elseif {$value 
3170: 65 71 20 22 5c 78 30 30 22 7d 20 74 68 65 6e 20  eq "\x00"} then 
3180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
3190: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 3c 4e  append result <N
31a0: 55 4c 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  UL>..          }
31b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
31c0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
31d0: 75 6c 74 20 5b 67 65 74 53 74 72 69 6e 67 46 72  ult [getStringFr
31e0: 6f 6d 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  omObjectHandle $
31f0: 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20  value]..        
3200: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
3210: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..         
3220: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
3230: 5b 6c 69 73 74 20 65 72 72 6f 72 28 76 61 6c 75  [list error(valu
3240: 65 29 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 5d  e) $::errorCode]
3250: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3260: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
3270: 20 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 20     set result.. 
3280: 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20   } -cleanup {.. 
3290: 20 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74     catch {object
32a0: 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20   removecallback 
32b0: 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d 0a 20 20  $callback}....  
32c0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
32d0: 61 69 6e 20 64 61 74 61 52 65 61 64 65 72 0d 0a  ain dataReader..
32e0: 20 20 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63      freeDbConnec
32f0: 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 63 6c 65 61  tion....    clea
3300: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
3310: 0a 0d 0a 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f  ...    unset -no
3320: 63 6f 6d 70 6c 61 69 6e 20 62 75 66 66 65 72 20  complain buffer 
3330: 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 63 61  typeCallbacks ca
3340: 6c 6c 62 61 63 6b 20 76 61 6c 75 65 20 6c 69 73  llback value lis
3350: 74 0d 0a 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f  t..    unset -no
3360: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
3370: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66 69  connection db fi
3380: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 75 6e 73 65  leName..    unse
3390: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 79  t -nocomplain ty
33a0: 70 65 4e 61 6d 65 20 6d 65 74 68 6f 64 4e 61 6d  peName methodNam
33b0: 65 20 69 73 41 72 72 61 79 0d 0a 20 20 7d 20 2d  e isArray..  } -
33c0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
33d0: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
33e0: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  t monoBug28 comm
33f0: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
3400: 44 41 54 41 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 45  DATA\..compile.E
3410: 4d 49 54 20 53 51 4c 69 74 65 20 53 79 73 74 65  MIT SQLite Syste
3420: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
3430: 72 65 73 75 6c 74 20 24 65 78 70 65 63 74 65 64  result $expected
3440: 52 65 73 75 6c 74 7d 0d 0a 0d 0a 20 20 72 65 6e  Result}....  ren
3450: 61 6d 65 20 72 65 61 64 56 61 6c 75 65 43 61 6c  ame readValueCal
3460: 6c 62 61 63 6b 32 20 22 22 0d 0a 7d 0d 0a 0d 0a  lback2 ""..}....
3470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
34c0: 0a 0d 0a 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ...object invoke
34d0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
34e0: 41 63 74 69 76 65 20 44 61 74 65 54 69 6d 65 46  Active DateTimeF
34f0: 6f 72 6d 61 74 20 24 73 61 76 65 64 44 61 74 65  ormat $savedDate
3500: 54 69 6d 65 46 6f 72 6d 61 74 0d 0a 75 6e 73 65  TimeFormat..unse
3510: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61  t -nocomplain sa
3520: 76 65 64 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  vedDateTimeForma
3530: 74 0d 0a 0d 0a 6f 62 6a 65 63 74 20 69 6e 76 6f  t....object invo
3540: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
3550: 65 74 41 63 74 69 76 65 20 44 61 74 65 54 69 6d  etActive DateTim
3560: 65 4b 69 6e 64 20 24 73 61 76 65 64 44 61 74 65  eKind $savedDate
3570: 54 69 6d 65 4b 69 6e 64 0d 0a 75 6e 73 65 74 20  TimeKind..unset 
3580: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65  -nocomplain save
3590: 64 44 61 74 65 54 69 6d 65 4b 69 6e 64 0d 0a 0d  dDateTimeKind...
35a0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
35b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35f0: 0d 0a 0d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ....unset -nocom
3600: 70 6c 61 69 6e 20 69 20 72 65 61 64 41 72 67 73  plain i readArgs
3610: 20 70 61 72 61 6d 73 20 74 79 70 65 4e 61 6d 65   params typeName
3620: 20 6d 65 74 68 6f 64 4e 61 6d 65 20 69 73 41 72   methodName isAr
3630: 72 61 79 20 70 72 6f 70 65 72 74 79 4e 61 6d 65  ray propertyName
3640: 20 5c 0d 0a 20 20 20 20 69 73 52 65 71 75 69 72   \..    isRequir
3650: 65 64 20 76 61 6c 75 65 20 65 78 70 65 63 74 65  ed value expecte
3660: 64 52 65 73 75 6c 74 73 20 65 78 70 65 63 74 65  dResults expecte
3670: 64 52 65 73 75 6c 74 0d 0a 0d 0a 23 23 23 23 23  dResult....#####
3680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
36c0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
36d0: 6e 54 65 73 74 20 7b 74 65 73 74 20 74 79 70 65  nTest {test type
36e0: 73 2d 33 2e 31 20 7b 62 69 6e 64 20 63 61 6c 6c  s-3.1 {bind call
36f0: 62 61 63 6b 20 28 69 6e 63 6f 6d 70 6c 65 74 65  back (incomplete
3700: 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75  )} -setup {..  u
3710: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
3720: 20 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75 70 44   log....  setupD
3730: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
3740: 74 79 70 65 73 2d 33 2e 31 2e 64 62 5d 20 22 22  types-3.1.db] ""
3750: 20 22 22 20 22 22 20 5c 0d 0a 20 20 20 20 20 20   "" "" \..      
3760: 22 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42 69  "UseConnectionBi
3770: 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73  ndValueCallbacks
3780: 20 55 73 65 50 61 72 61 6d 65 74 65 72 4e 61 6d   UseParameterNam
3790: 65 46 6f 72 54 79 70 65 4e 61 6d 65 22 0d 0a 7d  eForTypeName"..}
37a0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20   -body {..  sql 
37b0: 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
37c0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
37d0: 74 31 28 78 20 53 50 45 43 49 41 4c 29 3b 0d 0a  t1(x SPECIAL);..
37e0: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 61 6c    }....  set cal
37f0: 6c 62 61 63 6b 20 7b 2d 63 61 6c 6c 62 61 63 6b  lback {-callback
3800: 66 6c 61 67 73 20 2b 44 65 66 61 75 6c 74 20 62  flags +Default b
3810: 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  indValueCallback
3820: 31 7d 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63  1}..  set connec
3830: 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65  tion [getDbConne
3840: 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20  ction]....  set 
3850: 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 5b 6f  typeCallbacks [o
3860: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6d 61  bject invoke -ma
3870: 72 73 68 61 6c 66 6c 61 67 73 20 2b 44 79 6e 61  rshalflags +Dyna
3880: 6d 69 63 43 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20  micCallback \.. 
3890: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
38a0: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 54 79  .SQLite.SQLiteTy
38b0: 70 65 43 61 6c 6c 62 61 63 6b 73 20 43 72 65 61  peCallbacks Crea
38c0: 74 65 20 24 63 61 6c 6c 62 61 63 6b 20 6e 75 6c  te $callback nul
38d0: 6c 20 5c 0d 0a 20 20 20 20 20 20 30 20 6e 75 6c  l \..      0 nul
38e0: 6c 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74  l]....  $connect
38f0: 69 6f 6e 20 53 65 74 54 79 70 65 43 61 6c 6c 62  ion SetTypeCallb
3900: 61 63 6b 73 20 53 50 45 43 49 41 4c 20 24 74 79  acks SPECIAL $ty
3910: 70 65 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d 0a 20  peCallbacks.... 
3920: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
3930: 20 7b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49   {..    INSERT I
3940: 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
3950: 53 28 3f 29 3b 0d 0a 20 20 7d 20 5b 6c 69 73 74  S(?);..  } [list
3960: 20 53 70 65 63 69 61 6c 20 49 6e 74 36 34 20 31   Special Int64 1
3970: 32 33 34 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  234]....  set re
3980: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
3990: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
39a0: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 5b 69 6e  [expr {..    [in
39b0: 66 6f 20 65 78 69 73 74 73 20 6c 6f 67 28 62 69  fo exists log(bi
39c0: 6e 64 29 5d 20 3f 20 24 6c 6f 67 28 62 69 6e 64  nd)] ? $log(bind
39d0: 29 20 3a 20 22 3c 4d 49 53 53 49 4e 47 3e 22 0d  ) : "<MISSING>".
39e0: 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  .  }]....  lappe
39f0: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
3a00: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
3a10: 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
3a20: 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ist $db \..     
3a30: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
3a40: 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d  t1 ORDER BY x;"]
3a50: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
3a60: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
3a70: 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20    catch {object 
3a80: 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 24  removecallback $
3a90: 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d 0a 20 20 66  callback}....  f
3aa0: 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d  reeDbConnection.
3ab0: 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
3ac0: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
3ad0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3ae0: 72 65 73 75 6c 74 20 74 79 70 65 43 61 6c 6c 62  result typeCallb
3af0: 61 63 6b 73 20 63 61 6c 6c 62 61 63 6b 20 6c 6f  acks callback lo
3b00: 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20  g connection db 
3b10: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
3b20: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
3b30: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
3b40: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
3b50: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
3b60: 41 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 45 4d 49 54  A\..compile.EMIT
3b70: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
3b80: 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
3b90: 75 6c 74 20 7b 7b 7b 63 6f 6e 76 65 72 74 20 74  ult {{{convert t
3ba0: 72 75 65 7d 20 7b 63 6f 6d 6d 61 6e 64 20 74 72  rue} {command tr
3bb0: 75 65 7d 5c 0d 0a 7b 66 6c 61 67 73 20 7b 55 73  ue}\..{flags {Us
3bc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 42 69 6e 64 56  eConnectionBindV
3bd0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 2c 20 55  alueCallbacks, U
3be0: 73 65 50 61 72 61 6d 65 74 65 72 4e 61 6d 65 46  seParameterNameF
3bf0: 6f 72 54 79 70 65 4e 61 6d 65 7d 7d 5c 0d 0a 7b  orTypeName}}\..{
3c00: 70 61 72 61 6d 65 74 65 72 20 74 72 75 65 7d 20  parameter true} 
3c10: 7b 74 79 70 65 4e 61 6d 65 20 53 70 65 63 69 61  {typeName Specia
3c20: 6c 7d 20 7b 69 6e 64 65 78 20 31 7d 20 7b 75 73  l} {index 1} {us
3c30: 65 72 44 61 74 61 20 30 7d 7d 20 31 32 33 34 7d  erData 0}} 1234}
3c40: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
3c50: 23 23 23 23 23 23 23 23 23 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 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
3ca0: 7b 74 65 73 74 20 74 79 70 65 73 2d 33 2e 32 20  {test types-3.2 
3cb0: 7b 62 69 6e 64 20 63 61 6c 6c 62 61 63 6b 20 28  {bind callback (
3cc0: 63 6f 6d 70 6c 65 74 65 29 7d 20 2d 73 65 74 75  complete)} -setu
3cd0: 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  p {..  unset -no
3ce0: 63 6f 6d 70 6c 61 69 6e 20 6c 6f 67 0d 0a 0d 0a  complain log....
3cf0: 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66    setupDb [set f
3d00: 69 6c 65 4e 61 6d 65 20 74 79 70 65 73 2d 33 2e  ileName types-3.
3d10: 32 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20 5c  2.db] "" "" "" \
3d20: 0d 0a 20 20 20 20 20 20 22 55 73 65 43 6f 6e 6e  ..      "UseConn
3d30: 65 63 74 69 6f 6e 42 69 6e 64 56 61 6c 75 65 43  ectionBindValueC
3d40: 61 6c 6c 62 61 63 6b 73 20 55 73 65 50 61 72 61  allbacks UsePara
3d50: 6d 65 74 65 72 4e 61 6d 65 46 6f 72 54 79 70 65  meterNameForType
3d60: 4e 61 6d 65 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b  Name"..} -body {
3d70: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
3d80: 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54  $db {..    CREAT
3d90: 45 20 54 41 42 4c 45 20 74 31 28 78 20 53 50 45  E TABLE t1(x SPE
3da0: 43 49 41 4c 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20  CIAL);..  }.... 
3db0: 20 73 65 74 20 63 61 6c 6c 62 61 63 6b 20 7b 2d   set callback {-
3dc0: 63 61 6c 6c 62 61 63 6b 66 6c 61 67 73 20 2b 44  callbackflags +D
3dd0: 65 66 61 75 6c 74 20 62 69 6e 64 56 61 6c 75 65  efault bindValue
3de0: 43 61 6c 6c 62 61 63 6b 31 7d 0d 0a 20 20 73 65  Callback1}..  se
3df0: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65  t connection [ge
3e00: 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a  tDbConnection]..
3e10: 0d 0a 20 20 73 65 74 20 74 79 70 65 43 61 6c 6c  ..  set typeCall
3e20: 62 61 63 6b 73 20 5b 6f 62 6a 65 63 74 20 69 6e  backs [object in
3e30: 76 6f 6b 65 20 2d 6d 61 72 73 68 61 6c 66 6c 61  voke -marshalfla
3e40: 67 73 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c 62  gs +DynamicCallb
3e50: 61 63 6b 20 5c 0d 0a 20 20 20 20 20 20 53 79 73  ack \..      Sys
3e60: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
3e70: 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61  SQLiteTypeCallba
3e80: 63 6b 73 20 43 72 65 61 74 65 20 24 63 61 6c 6c  cks Create $call
3e90: 62 61 63 6b 20 6e 75 6c 6c 20 5c 0d 0a 20 20 20  back null \..   
3ea0: 20 20 20 31 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20     1 null]....  
3eb0: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74 54  $connection SetT
3ec0: 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 53 50 45  ypeCallbacks SPE
3ed0: 43 49 41 4c 20 24 74 79 70 65 43 61 6c 6c 62 61  CIAL $typeCallba
3ee0: 63 6b 73 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  cks....  sql exe
3ef0: 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20  cute $db {..    
3f00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
3f10: 78 29 20 56 41 4c 55 45 53 28 3f 29 3b 0d 0a 20  x) VALUES(?);.. 
3f20: 20 7d 20 5b 6c 69 73 74 20 53 70 65 63 69 61 6c   } [list Special
3f30: 20 49 6e 74 36 34 20 35 36 37 38 5d 0d 0a 0d 0a   Int64 5678]....
3f40: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
3f50: 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  st]....  lappend
3f60: 20 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 0d   result [expr {.
3f70: 0a 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74  .    [info exist
3f80: 73 20 6c 6f 67 28 62 69 6e 64 29 5d 20 3f 20 24  s log(bind)] ? $
3f90: 6c 6f 67 28 62 69 6e 64 29 20 3a 20 22 3c 4d 49  log(bind) : "<MI
3fa0: 53 53 49 4e 47 3e 22 0d 0a 20 20 7d 5d 0d 0a 0d  SSING>"..  }]...
3fb0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
3fc0: 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
3fd0: 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
3fe0: 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20  format list $db 
3ff0: 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
4000: 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   * FROM t1 ORDER
4010: 20 42 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65   BY x;"]....  se
4020: 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65  t result..} -cle
4030: 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74 63 68 20  anup {..  catch 
4040: 7b 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 63 61  {object removeca
4050: 6c 6c 62 61 63 6b 20 24 63 61 6c 6c 62 61 63 6b  llback $callback
4060: 7d 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e  }....  freeDbCon
4070: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65  nection....  cle
4080: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
4090: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
40a0: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 74  omplain result t
40b0: 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c  ypeCallbacks cal
40c0: 6c 62 61 63 6b 20 6c 6f 67 20 63 6f 6e 6e 65 63  lback log connec
40d0: 74 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65  tion db fileName
40e0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
40f0: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
4100: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
4110: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
4120: 70 69 6c 65 2e 44 41 54 41 5c 0d 0a 63 6f 6d 70  pile.DATA\..comp
4130: 69 6c 65 2e 45 4d 49 54 20 53 51 4c 69 74 65 20  ile.EMIT SQLite 
4140: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
4150: 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 7b 63  te} -result {{{c
4160: 6f 6e 76 65 72 74 20 74 72 75 65 7d 20 7b 63 6f  onvert true} {co
4170: 6d 6d 61 6e 64 20 74 72 75 65 7d 5c 0d 0a 7b 66  mmand true}\..{f
4180: 6c 61 67 73 20 7b 55 73 65 43 6f 6e 6e 65 63 74  lags {UseConnect
4190: 69 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c  ionBindValueCall
41a0: 62 61 63 6b 73 2c 20 55 73 65 50 61 72 61 6d 65  backs, UseParame
41b0: 74 65 72 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61  terNameForTypeNa
41c0: 6d 65 7d 7d 5c 0d 0a 7b 70 61 72 61 6d 65 74 65  me}}\..{paramete
41d0: 72 20 74 72 75 65 7d 20 7b 74 79 70 65 4e 61 6d  r true} {typeNam
41e0: 65 20 53 70 65 63 69 61 6c 7d 20 7b 69 6e 64 65  e Special} {inde
41f0: 78 20 31 7d 20 7b 75 73 65 72 44 61 74 61 20 31  x 1} {userData 1
4200: 7d 7d 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23  }} {}}}....#####
4210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4250: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
4260: 6e 54 65 73 74 20 7b 74 65 73 74 20 74 79 70 65  nTest {test type
4270: 73 2d 33 2e 33 20 7b 62 69 6e 64 20 63 61 6c 6c  s-3.3 {bind call
4280: 62 61 63 6b 20 28 6d 6f 64 69 66 79 2f 69 6e 63  back (modify/inc
4290: 6f 6d 70 6c 65 74 65 29 7d 20 2d 73 65 74 75 70  omplete)} -setup
42a0: 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
42b0: 6f 6d 70 6c 61 69 6e 20 6c 6f 67 0d 0a 0d 0a 20  omplain log.... 
42c0: 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
42d0: 6c 65 4e 61 6d 65 20 74 79 70 65 73 2d 33 2e 33  leName types-3.3
42e0: 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20 5c 0d  .db] "" "" "" \.
42f0: 0a 20 20 20 20 20 20 22 55 73 65 43 6f 6e 6e 65  .      "UseConne
4300: 63 74 69 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61  ctionBindValueCa
4310: 6c 6c 62 61 63 6b 73 20 55 73 65 50 61 72 61 6d  llbacks UseParam
4320: 65 74 65 72 4e 61 6d 65 46 6f 72 54 79 70 65 4e  eterNameForTypeN
4330: 61 6d 65 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  ame"..} -body {.
4340: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
4350: 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45  db {..    CREATE
4360: 20 54 41 42 4c 45 20 74 31 28 78 20 53 50 45 43   TABLE t1(x SPEC
4370: 49 41 4c 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  IAL);..  }....  
4380: 73 65 74 20 63 61 6c 6c 62 61 63 6b 20 7b 2d 63  set callback {-c
4390: 61 6c 6c 62 61 63 6b 66 6c 61 67 73 20 2b 44 65  allbackflags +De
43a0: 66 61 75 6c 74 20 62 69 6e 64 56 61 6c 75 65 43  fault bindValueC
43b0: 61 6c 6c 62 61 63 6b 31 7d 0d 0a 20 20 73 65 74  allback1}..  set
43c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74   connection [get
43d0: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d  DbConnection]...
43e0: 0a 20 20 73 65 74 20 74 79 70 65 43 61 6c 6c 62  .  set typeCallb
43f0: 61 63 6b 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76  acks [object inv
4400: 6f 6b 65 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67  oke -marshalflag
4410: 73 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c 62 61  s +DynamicCallba
4420: 63 6b 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  ck \..      Syst
4430: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
4440: 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63  QLiteTypeCallbac
4450: 6b 73 20 43 72 65 61 74 65 20 24 63 61 6c 6c 62  ks Create $callb
4460: 61 63 6b 20 6e 75 6c 6c 20 5c 0d 0a 20 20 20 20  ack null \..    
4470: 20 20 32 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 24    2 null]....  $
4480: 63 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74 54 79  connection SetTy
4490: 70 65 43 61 6c 6c 62 61 63 6b 73 20 53 50 45 43  peCallbacks SPEC
44a0: 49 41 4c 20 24 74 79 70 65 43 61 6c 6c 62 61 63  IAL $typeCallbac
44b0: 6b 73 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  ks....  sql exec
44c0: 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 49  ute $db {..    I
44d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
44e0: 29 20 56 41 4c 55 45 53 28 3f 29 3b 0d 0a 20 20  ) VALUES(?);..  
44f0: 7d 20 5b 6c 69 73 74 20 53 70 65 63 69 61 6c 20  } [list Special 
4500: 49 6e 74 36 34 20 39 39 39 39 5d 0d 0a 0d 0a 20  Int64 9999].... 
4510: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
4520: 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t]....  lappend 
4530: 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 0d 0a  result [expr {..
4540: 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 73      [info exists
4550: 20 6c 6f 67 28 62 69 6e 64 29 5d 20 3f 20 24 6c   log(bind)] ? $l
4560: 6f 67 28 62 69 6e 64 29 20 3a 20 22 3c 4d 49 53  og(bind) : "<MIS
4570: 53 49 4e 47 3e 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a  SING>"..  }]....
4580: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
4590: 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
45a0: 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66  xecute reader -f
45b0: 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20 5c  ormat list $db \
45c0: 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
45d0: 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  * FROM t1 ORDER 
45e0: 42 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74  BY x;"]....  set
45f0: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
4600: 6e 75 70 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b  nup {..  catch {
4610: 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 63 61 6c  object removecal
4620: 6c 62 61 63 6b 20 24 63 61 6c 6c 62 61 63 6b 7d  lback $callback}
4630: 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e  ....  freeDbConn
4640: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61  ection....  clea
4650: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
4660: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
4670: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 74 79  mplain result ty
4680: 70 65 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c  peCallbacks call
4690: 62 61 63 6b 20 6c 6f 67 20 63 6f 6e 6e 65 63 74  back log connect
46a0: 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ion db fileName.
46b0: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
46c0: 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
46d0: 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
46e0: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
46f0: 69 6c 65 2e 44 41 54 41 5c 0d 0a 63 6f 6d 70 69  ile.DATA\..compi
4700: 6c 65 2e 45 4d 49 54 20 53 51 4c 69 74 65 20 53  le.EMIT SQLite S
4710: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
4720: 65 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 7b 63 6f  e} -result {{{co
4730: 6e 76 65 72 74 20 74 72 75 65 7d 20 7b 63 6f 6d  nvert true} {com
4740: 6d 61 6e 64 20 74 72 75 65 7d 5c 0d 0a 7b 66 6c  mand true}\..{fl
4750: 61 67 73 20 7b 55 73 65 43 6f 6e 6e 65 63 74 69  ags {UseConnecti
4760: 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62  onBindValueCallb
4770: 61 63 6b 73 2c 20 55 73 65 50 61 72 61 6d 65 74  acks, UseParamet
4780: 65 72 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d  erNameForTypeNam
4790: 65 7d 7d 5c 0d 0a 7b 70 61 72 61 6d 65 74 65 72  e}}\..{parameter
47a0: 20 74 72 75 65 7d 20 7b 74 79 70 65 4e 61 6d 65   true} {typeName
47b0: 20 53 70 65 63 69 61 6c 7d 20 7b 69 6e 64 65 78   Special} {index
47c0: 20 31 7d 20 7b 75 73 65 72 44 61 74 61 20 32 7d   1} {userData 2}
47d0: 7d 20 63 75 73 74 6f 6d 7d 7d 0d 0a 0d 0a 23 23  } custom}}....##
47e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
47f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4820: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
4830: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 74  .runTest {test t
4840: 79 70 65 73 2d 34 2e 31 20 7b 72 65 61 64 20 63  ypes-4.1 {read c
4850: 61 6c 6c 62 61 63 6b 20 28 65 78 63 65 70 74 69  allback (excepti
4860: 6f 6e 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  on)} -setup {.. 
4870: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
4880: 69 6e 20 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75  in log....  setu
4890: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
48a0: 65 20 74 79 70 65 73 2d 34 2e 31 2e 64 62 5d 20  e types-4.1.db] 
48b0: 22 22 20 22 22 20 22 22 20 5c 0d 0a 20 20 20 20  "" "" "" \..    
48c0: 20 20 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52    UseConnectionR
48d0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
48e0: 73 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  s..} -body {..  
48f0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
4900: 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  {..    CREATE TA
4910: 42 4c 45 20 74 31 28 78 20 53 50 45 43 49 41 4c  BLE t1(x SPECIAL
4920: 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
4930: 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
4940: 53 28 38 38 38 38 29 3b 0d 0a 20 20 7d 0d 0a 0d  S(8888);..  }...
4950: 0a 20 20 73 65 74 20 63 61 6c 6c 62 61 63 6b 20  .  set callback 
4960: 7b 2d 63 61 6c 6c 62 61 63 6b 66 6c 61 67 73 20  {-callbackflags 
4970: 7b 2b 44 65 66 61 75 6c 74 20 54 68 72 6f 77 4f  {+Default ThrowO
4980: 6e 45 72 72 6f 72 7d 20 72 65 61 64 56 61 6c 75  nError} readValu
4990: 65 43 61 6c 6c 62 61 63 6b 31 7d 0d 0a 20 20 73  eCallback1}..  s
49a0: 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67  et connection [g
49b0: 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d  etDbConnection].
49c0: 0a 0d 0a 20 20 73 65 74 20 74 79 70 65 43 61 6c  ...  set typeCal
49d0: 6c 62 61 63 6b 73 20 5b 6f 62 6a 65 63 74 20 69  lbacks [object i
49e0: 6e 76 6f 6b 65 20 2d 6d 61 72 73 68 61 6c 66 6c  nvoke -marshalfl
49f0: 61 67 73 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c  ags +DynamicCall
4a00: 62 61 63 6b 20 5c 0d 0a 20 20 20 20 20 20 53 79  back \..      Sy
4a10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
4a20: 2e 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62  .SQLiteTypeCallb
4a30: 61 63 6b 73 20 43 72 65 61 74 65 20 6e 75 6c 6c  acks Create null
4a40: 20 24 63 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20   $callback \..  
4a50: 20 20 20 20 6e 75 6c 6c 20 33 5d 0d 0a 0d 0a 20      null 3].... 
4a60: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74   $connection Set
4a70: 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 53 50  TypeCallbacks SP
4a80: 45 43 49 41 4c 20 24 74 79 70 65 43 61 6c 6c 62  ECIAL $typeCallb
4a90: 61 63 6b 73 0d 0a 0d 0a 20 20 73 65 74 20 72 65  acks....  set re
4aa0: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
4ab0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
4ac0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71  [catch {..    sq
4ad0: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
4ae0: 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61  te reader -forma
4af0: 74 20 6c 69 73 74 20 24 64 62 20 7b 53 45 4c 45  t list $db {SELE
4b00: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT * FROM t1 ORD
4b10: 45 52 20 42 59 20 78 3b 7d 0d 0a 20 20 7d 20 65  ER BY x;}..  } e
4b20: 72 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  rror]....  lappe
4b30: 6e 64 20 72 65 73 75 6c 74 20 5b 65 78 74 72 61  nd result [extra
4b40: 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69  ctSystemDataSQLi
4b50: 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61  teExceptionMessa
4b60: 67 65 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20  ge $error]....  
4b70: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
4b80: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c  catch {..    sql
4b90: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
4ba0: 65 20 73 63 61 6c 61 72 20 24 64 62 20 7b 53 45  e scalar $db {SE
4bb0: 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
4bc0: 4f 4d 20 74 31 3b 7d 0d 0a 20 20 7d 20 65 72 72  OM t1;}..  } err
4bd0: 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  or]....  lappend
4be0: 20 72 65 73 75 6c 74 20 5b 65 78 74 72 61 63 74   result [extract
4bf0: 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
4c00: 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
4c10: 20 24 65 72 72 6f 72 5d 0d 0a 20 20 6c 61 70 70   $error]..  lapp
4c20: 65 6e 64 20 72 65 73 75 6c 74 20 5b 65 78 70 72  end result [expr
4c30: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6c   {[info exists l
4c40: 6f 67 28 72 65 61 64 29 5d 20 3f 20 24 6c 6f 67  og(read)] ? $log
4c50: 28 72 65 61 64 29 20 3a 20 22 3c 4d 49 53 53 49  (read) : "<MISSI
4c60: 4e 47 3e 22 7d 5d 0d 0a 0d 0a 20 20 73 65 74 20  NG>"}]....  set 
4c70: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
4c80: 75 70 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 6f  up {..  catch {o
4c90: 62 6a 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c  bject removecall
4ca0: 62 61 63 6b 20 24 63 61 6c 6c 62 61 63 6b 7d 0d  back $callback}.
4cb0: 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65  ...  freeDbConne
4cc0: 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e  ction....  clean
4cd0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
4ce0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
4cf0: 70 6c 61 69 6e 20 65 72 72 6f 72 20 72 65 73 75  plain error resu
4d00: 6c 74 20 74 79 70 65 43 61 6c 6c 62 61 63 6b 73  lt typeCallbacks
4d10: 20 63 61 6c 6c 62 61 63 6b 20 6c 6f 67 20 63 6f   callback log co
4d20: 6e 6e 65 63 74 69 6f 6e 20 64 62 20 5c 0d 0a 20  nnection db \.. 
4d30: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d       fileName..}
4d40: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
4d50: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
4d60: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  ect monoBug28 co
4d70: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
4d80: 65 2e 44 41 54 41 5c 0d 0a 63 6f 6d 70 69 6c 65  e.DATA\..compile
4d90: 2e 45 4d 49 54 20 53 51 4c 69 74 65 20 53 79 73  .EMIT SQLite Sys
4da0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
4db0: 20 2d 72 65 73 75 6c 74 20 7b 31 20 7b 72 65 61   -result {1 {rea
4dc0: 64 69 6e 67 20 6f 66 20 76 61 6c 75 65 20 63 61  ding of value ca
4dd0: 6e 63 65 6c 65 64 7d 5c 0d 0a 30 20 31 20 7b 7b  nceled}\..0 1 {{
4de0: 63 6f 6e 76 65 72 74 20 74 72 75 65 7d 20 7b 64  convert true} {d
4df0: 61 74 61 52 65 61 64 65 72 20 74 72 75 65 7d 20  ataReader true} 
4e00: 7b 66 6c 61 67 73 20 55 73 65 43 6f 6e 6e 65 63  {flags UseConnec
4e10: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
4e20: 6c 62 61 63 6b 73 7d 5c 0d 0a 7b 65 76 65 6e 74  lbacks}\..{event
4e30: 41 72 67 73 20 74 72 75 65 7d 20 7b 74 79 70 65  Args true} {type
4e40: 4e 61 6d 65 20 53 50 45 43 49 41 4c 7d 20 7b 69  Name SPECIAL} {i
4e50: 6e 64 65 78 20 30 7d 20 7b 75 73 65 72 44 61 74  ndex 0} {userDat
4e60: 61 20 33 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23  a 3}}}}....#####
4e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4eb0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
4ec0: 6e 54 65 73 74 20 7b 74 65 73 74 20 74 79 70 65  nTest {test type
4ed0: 73 2d 35 2e 31 20 7b 62 69 6e 64 20 63 61 6c 6c  s-5.1 {bind call
4ee0: 62 61 63 6b 20 28 65 78 63 65 70 74 69 6f 6e 29  back (exception)
4ef0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75 6e  } -setup {..  un
4f00: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
4f10: 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62  log....  setupDb
4f20: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74   [set fileName t
4f30: 79 70 65 73 2d 35 2e 31 2e 64 62 5d 20 22 22 20  ypes-5.1.db] "" 
4f40: 22 22 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 22  "" "" \..      "
4f50: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42 69 6e  UseConnectionBin
4f60: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 20  dValueCallbacks 
4f70: 55 73 65 50 61 72 61 6d 65 74 65 72 4e 61 6d 65  UseParameterName
4f80: 46 6f 72 54 79 70 65 4e 61 6d 65 22 0d 0a 7d 20  ForTypeName"..} 
4f90: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
4fa0: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
4fb0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4fc0: 31 28 78 20 53 50 45 43 49 41 4c 29 3b 0d 0a 20  1(x SPECIAL);.. 
4fd0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 61 6c 6c   }....  set call
4fe0: 62 61 63 6b 20 7b 2d 63 61 6c 6c 62 61 63 6b 66  back {-callbackf
4ff0: 6c 61 67 73 20 7b 2b 44 65 66 61 75 6c 74 20 54  lags {+Default T
5000: 68 72 6f 77 4f 6e 45 72 72 6f 72 7d 20 62 69 6e  hrowOnError} bin
5010: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 31 7d  dValueCallback1}
5020: 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69  ..  set connecti
5030: 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74  on [getDbConnect
5040: 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 74 79  ion]....  set ty
5050: 70 65 43 61 6c 6c 62 61 63 6b 73 20 5b 6f 62 6a  peCallbacks [obj
5060: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6d 61 72 73  ect invoke -mars
5070: 68 61 6c 66 6c 61 67 73 20 2b 44 79 6e 61 6d 69  halflags +Dynami
5080: 63 43 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20 20  cCallback \..   
5090: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
50a0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 54 79 70 65  QLite.SQLiteType
50b0: 43 61 6c 6c 62 61 63 6b 73 20 43 72 65 61 74 65  Callbacks Create
50c0: 20 24 63 61 6c 6c 62 61 63 6b 20 6e 75 6c 6c 20   $callback null 
50d0: 5c 0d 0a 20 20 20 20 20 20 33 20 6e 75 6c 6c 5d  \..      3 null]
50e0: 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f  ....  $connectio
50f0: 6e 20 53 65 74 54 79 70 65 43 61 6c 6c 62 61 63  n SetTypeCallbac
5100: 6b 73 20 53 50 45 43 49 41 4c 20 24 74 79 70 65  ks SPECIAL $type
5110: 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d 0a 20 20 63  Callbacks....  c
5120: 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20  atch {..    sql 
5130: 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
5140: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
5150: 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 3f   t1 (x) VALUES(?
5160: 29 3b 0d 0a 20 20 20 20 7d 20 5b 6c 69 73 74 20  );..    } [list 
5170: 53 70 65 63 69 61 6c 20 49 6e 74 36 34 20 34 33  Special Int64 43
5180: 32 31 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  21]..  }....  se
5190: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
51a0: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
51b0: 75 6c 74 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  ult [expr {..   
51c0: 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6c 6f   [info exists lo
51d0: 67 28 62 69 6e 64 29 5d 20 3f 20 24 6c 6f 67 28  g(bind)] ? $log(
51e0: 62 69 6e 64 29 20 3a 20 22 3c 4d 49 53 53 49 4e  bind) : "<MISSIN
51f0: 47 3e 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6c  G>"..  }]....  l
5200: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
5210: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
5220: 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d  ute reader -form
5230: 61 74 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20  at list $db \.. 
5240: 20 20 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46       "SELECT * F
5250: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
5260: 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  x;"]....  set re
5270: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
5280: 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a   {..  catch {obj
5290: 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61  ect removecallba
52a0: 63 6b 20 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d  ck $callback}...
52b0: 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
52c0: 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ion....  cleanup
52d0: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
52e0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
52f0: 61 69 6e 20 72 65 73 75 6c 74 20 74 79 70 65 43  ain result typeC
5300: 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61 63  allbacks callbac
5310: 6b 20 6c 6f 67 20 63 6f 6e 6e 65 63 74 69 6f 6e  k log connection
5320: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
5330: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
5340: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
5350: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
5360: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
5370: 2e 44 41 54 41 5c 0d 0a 63 6f 6d 70 69 6c 65 2e  .DATA\..compile.
5380: 45 4d 49 54 20 53 51 4c 69 74 65 20 53 79 73 74  EMIT SQLite Syst
5390: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
53a0: 2d 72 65 73 75 6c 74 20 7b 7b 7b 63 6f 6e 76 65  -result {{{conve
53b0: 72 74 20 74 72 75 65 7d 20 7b 63 6f 6d 6d 61 6e  rt true} {comman
53c0: 64 20 74 72 75 65 7d 5c 0d 0a 7b 66 6c 61 67 73  d true}\..{flags
53d0: 20 7b 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42   {UseConnectionB
53e0: 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  indValueCallback
53f0: 73 2c 20 55 73 65 50 61 72 61 6d 65 74 65 72 4e  s, UseParameterN
5400: 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d 65 7d 7d  ameForTypeName}}
5410: 5c 0d 0a 7b 70 61 72 61 6d 65 74 65 72 20 74 72  \..{parameter tr
5420: 75 65 7d 20 7b 74 79 70 65 4e 61 6d 65 20 53 70  ue} {typeName Sp
5430: 65 63 69 61 6c 7d 20 7b 69 6e 64 65 78 20 31 7d  ecial} {index 1}
5440: 20 7b 75 73 65 72 44 61 74 61 20 33 7d 7d 20 7b   {userData 3}} {
5450: 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }}}....#########
5460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54a0: 23 23 23 23 23 23 0d 0a 0d 0a 63 61 74 63 68 20  ######....catch 
54b0: 7b 65 76 61 6c 20 6f 62 6a 65 63 74 20 64 69 73  {eval object dis
54c0: 70 6f 73 65 20 5b 69 6e 66 6f 20 6f 62 6a 65 63  pose [info objec
54d0: 74 73 20 53 79 73 74 65 6d 23 42 6f 6f 6c 65 61  ts System#Boolea
54e0: 6e 23 2a 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  n#*]}....#######
54f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5530: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 65 6e 61  ########....rena
5540: 6d 65 20 72 65 61 64 56 61 6c 75 65 43 61 6c 6c  me readValueCall
5550: 62 61 63 6b 31 20 22 22 0d 0a 72 65 6e 61 6d 65  back1 ""..rename
5560: 20 62 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61   bindValueCallba
5570: 63 6b 31 20 22 22 0d 0a 0d 0a 23 23 23 23 23 23  ck1 ""....######
5580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
55a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
55b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
55c0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
55d0: 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67  SQLiteTestEpilog
55e0: 75 65 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f  ue..runTestEpilo
55f0: 67 75 65 0d 0a                                   gue..