System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 7e38d30af6a5c4afe970be7d2aaaf13fcf1cf860:


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 47 65 74 42 6f 6f 6c 65 61 6e 20 20 20 20    GetBoolean    
0ff0: 66 61 6c 73 65 20 20 20 42 6f 6f 6c 65 61 6e 56  false   BooleanV
1000: 61 6c 75 65 20 20 20 20 74 72 75 65 20 20 20 20  alue    true    
1010: 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20  0] \..    [list 
1020: 42 79 74 65 20 20 20 20 20 20 20 47 65 74 42 79  Byte       GetBy
1030: 74 65 20 20 20 20 20 20 20 66 61 6c 73 65 20 20  te       false  
1040: 20 42 79 74 65 56 61 6c 75 65 20 20 20 20 20 20   ByteValue      
1050: 20 74 72 75 65 20 20 20 20 30 5d 20 5c 0d 0a 20   true    0] \.. 
1060: 20 20 20 5b 6c 69 73 74 20 42 79 74 65 20 20 20     [list Byte   
1070: 20 20 20 20 47 65 74 42 79 74 65 73 20 20 20 20      GetBytes    
1080: 20 20 74 72 75 65 20 20 20 20 42 79 74 65 73 56    true    BytesV
1090: 61 6c 75 65 20 20 20 20 20 20 66 61 6c 73 65 20  alue      false 
10a0: 20 20 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73    0] \..    [lis
10b0: 74 20 43 68 61 72 20 20 20 20 20 20 20 47 65 74  t Char       Get
10c0: 43 68 61 72 20 20 20 20 20 20 20 66 61 6c 73 65  Char       false
10d0: 20 20 20 43 68 61 72 56 61 6c 75 65 20 20 20 20     CharValue    
10e0: 20 20 20 74 72 75 65 20 20 20 20 30 5d 20 5c 0d     true    0] \.
10f0: 0a 20 20 20 20 5b 6c 69 73 74 20 43 68 61 72 20  .    [list Char 
1100: 20 20 20 20 20 20 47 65 74 43 68 61 72 73 20 20        GetChars  
1110: 20 20 20 20 74 72 75 65 20 20 20 20 43 68 61 72      true    Char
1120: 73 56 61 6c 75 65 20 20 20 20 20 20 66 61 6c 73  sValue      fals
1130: 65 20 20 20 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c  e   0] \..    [l
1140: 69 73 74 20 44 61 74 65 54 69 6d 65 20 20 20 47  ist DateTime   G
1150: 65 74 44 61 74 65 54 69 6d 65 20 20 20 66 61 6c  etDateTime   fal
1160: 73 65 20 20 20 44 61 74 65 54 69 6d 65 56 61 6c  se   DateTimeVal
1170: 75 65 20 20 20 74 72 75 65 20 20 20 20 30 5d 20  ue   true    0] 
1180: 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 44 65 63  \..    [list Dec
1190: 69 6d 61 6c 20 20 20 20 47 65 74 44 65 63 69 6d  imal    GetDecim
11a0: 61 6c 20 20 20 20 66 61 6c 73 65 20 20 20 44 65  al    false   De
11b0: 63 69 6d 61 6c 56 61 6c 75 65 20 20 20 20 74 72  cimalValue    tr
11c0: 75 65 20 20 20 20 30 5d 20 5c 0d 0a 20 20 20 20  ue    0] \..    
11d0: 5b 6c 69 73 74 20 44 6f 75 62 6c 65 20 20 20 20  [list Double    
11e0: 20 47 65 74 44 6f 75 62 6c 65 20 20 20 20 20 66   GetDouble     f
11f0: 61 6c 73 65 20 20 20 44 6f 75 62 6c 65 56 61 6c  alse   DoubleVal
1200: 75 65 20 20 20 20 20 74 72 75 65 20 20 20 20 30  ue     true    0
1210: 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 53  ] \..    [list S
1220: 69 6e 67 6c 65 20 20 20 20 20 47 65 74 46 6c 6f  ingle     GetFlo
1230: 61 74 20 20 20 20 20 20 66 61 6c 73 65 20 20 20  at      false   
1240: 46 6c 6f 61 74 56 61 6c 75 65 20 20 20 20 20 20  FloatValue      
1250: 74 72 75 65 20 20 20 20 30 5d 20 5c 0d 0a 20 20  true    0] \..  
1260: 20 20 5b 6c 69 73 74 20 47 75 69 64 20 20 20 20    [list Guid    
1270: 20 20 20 47 65 74 47 75 69 64 20 20 20 20 20 20     GetGuid      
1280: 20 66 61 6c 73 65 20 20 20 47 75 69 64 56 61 6c   false   GuidVal
1290: 75 65 20 20 20 20 20 20 20 74 72 75 65 20 20 20  ue       true   
12a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 30 30 30 30   \..        0000
12b0: 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30  0000-0000-0000-0
12c0: 30 30 30 2d 30 30 30 30 30 30 30 30 30 30 30 30  000-000000000000
12d0: 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74 20 49  ] \..    [list I
12e0: 6e 74 31 36 20 20 20 20 20 20 47 65 74 49 6e 74  nt16      GetInt
12f0: 31 36 20 20 20 20 20 20 66 61 6c 73 65 20 20 20  16      false   
1300: 49 6e 74 31 36 56 61 6c 75 65 20 20 20 20 20 20  Int16Value      
1310: 74 72 75 65 20 20 20 20 30 5d 20 5c 0d 0a 20 20  true    0] \..  
1320: 20 20 5b 6c 69 73 74 20 49 6e 74 33 32 20 20 20    [list Int32   
1330: 20 20 20 47 65 74 49 6e 74 33 32 20 20 20 20 20     GetInt32     
1340: 20 66 61 6c 73 65 20 20 20 49 6e 74 33 32 56 61   false   Int32Va
1350: 6c 75 65 20 20 20 20 20 20 74 72 75 65 20 20 20  lue      true   
1360: 20 30 5d 20 5c 0d 0a 20 20 20 20 5b 6c 69 73 74   0] \..    [list
1370: 20 49 6e 74 36 34 20 20 20 20 20 20 47 65 74 49   Int64      GetI
1380: 6e 74 36 34 20 20 20 20 20 20 66 61 6c 73 65 20  nt64      false 
1390: 20 20 49 6e 74 36 34 56 61 6c 75 65 20 20 20 20    Int64Value    
13a0: 20 20 74 72 75 65 20 20 20 20 30 5d 20 5c 0d 0a    true    0] \..
13b0: 20 20 20 20 5b 6c 69 73 74 20 53 74 72 69 6e 67      [list String
13c0: 20 20 20 20 20 47 65 74 53 74 72 69 6e 67 20 20       GetString  
13d0: 20 20 20 66 61 6c 73 65 20 20 20 53 74 72 69 6e     false   Strin
13e0: 67 56 61 6c 75 65 20 20 20 20 20 66 61 6c 73 65  gValue     false
13f0: 20 20 20 6e 75 6c 6c 5d 20 5c 0d 0a 20 20 20 20     null] \..    
1400: 5b 6c 69 73 74 20 4f 62 6a 65 63 74 20 20 20 20  [list Object    
1410: 20 47 65 74 56 61 6c 75 65 20 20 20 20 20 20 66   GetValue      f
1420: 61 6c 73 65 20 20 20 56 61 6c 75 65 20 20 20 20  alse   Value    
1430: 20 20 20 20 20 20 20 66 61 6c 73 65 20 20 20 6e         false   n
1440: 75 6c 6c 5d 5d 0d 0a 0d 0a 23 23 23 23 23 23 23  ull]]....#######
1450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1490: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 73 65 74 20  ########....set 
14a0: 65 78 70 65 63 74 65 64 52 65 73 75 6c 74 73 20  expectedResults 
14b0: 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 7b 46 61  [list \..    {Fa
14c0: 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20 46  lse False True F
14d0: 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65  alse False False
14e0: 20 46 61 6c 73 65 20 46 61 6c 73 65 7d 20 5c 0d   False False} \.
14f0: 0a 20 20 20 20 7b 30 20 30 20 31 20 30 20 30 20  .    {0 0 1 0 0 
1500: 30 20 30 20 30 7d 20 5c 0d 0a 20 20 20 20 7b 30  0 0 0} \..    {0
1510: 20 31 20 34 38 20 31 20 34 39 20 33 20 7b 34 39   1 48 1 49 3 {49
1520: 20 34 36 20 35 30 7d 20 35 20 7b 31 31 36 20 31   46 50} 5 {116 1
1530: 30 34 20 31 31 34 5c 0d 0a 20 20 20 20 20 20 20  04 114\..       
1540: 20 31 30 31 20 31 30 31 7d 20 31 20 34 20 32 37   101 101} 1 4 27
1550: 20 7b 35 30 20 34 38 20 34 39 20 35 34 20 34 35   {50 48 49 54 45
1560: 20 34 38 20 35 34 5c 0d 0a 20 20 20 20 20 20 20   48 54\..       
1570: 20 34 35 20 34 39 20 35 37 20 33 32 20 34 39 20   45 49 57 32 49 
1580: 35 37 20 35 38 20 35 33 20 34 38 20 35 38 20 34  57 58 53 48 58 4
1590: 38 20 35 32 20 34 36 5c 0d 0a 20 20 20 20 20 20  8 52 46\..      
15a0: 20 20 34 39 20 35 30 20 35 31 20 35 32 20 35 33    49 50 51 52 53
15b0: 20 35 34 20 35 35 7d 20 33 36 20 7b 35 35 20 35   54 55} 36 {55 5
15c0: 32 20 31 30 32 20 34 39 5c 0d 0a 20 20 20 20 20  2 102 49\..     
15d0: 20 20 20 31 30 32 20 35 32 20 34 38 20 35 30 20     102 52 48 50 
15e0: 34 35 20 31 30 30 20 31 30 30 20 31 30 31 20 31  45 100 100 101 1
15f0: 30 32 20 34 35 20 35 32 5c 0d 0a 20 20 20 20 20  02 45 52\..     
1600: 20 20 20 34 38 20 35 30 20 35 35 20 34 35 20 39     48 50 55 45 9
1610: 37 20 35 35 20 35 36 20 31 30 32 20 34 35 20 35  7 55 56 102 45 5
1620: 31 20 35 36 20 35 32 20 35 35 5c 0d 0a 20 20 20  1 56 52 55\..   
1630: 20 20 20 20 20 31 30 32 20 39 37 20 35 37 20 35       102 97 57 5
1640: 35 20 39 38 20 35 36 20 35 31 20 34 38 7d 7d 20  5 98 56 51 48}} 
1650: 5c 0d 0a 20 20 20 20 22 3c 4e 55 4c 3e 20 3c 4e  \..    "<NUL> <N
1660: 55 4c 3e 20 5c 78 30 31 20 3c 4e 55 4c 3e 20 3c  UL> \x01 <NUL> <
1670: 4e 55 4c 3e 20 3c 4e 55 4c 3e 20 3c 4e 55 4c 3e  NUL> <NUL> <NUL>
1680: 20 3c 4e 55 4c 3e 22 20 5c 0d 0a 20 20 20 20 22   <NUL>" \..    "
1690: 30 20 31 20 30 20 31 20 31 20 33 20 7b 31 20 2e  0 1 0 1 1 3 {1 .
16a0: 20 32 7d 20 31 20 74 20 31 20 5c 78 30 34 20 31   2} 1 t 1 \x04 1
16b0: 20 32 20 31 20 37 22 20 5c 0d 0a 20 20 20 20 7b   2 1 7" \..    {
16c0: 7b 30 30 30 31 2d 30 31 2d 30 31 20 30 30 3a 30  {0001-01-01 00:0
16d0: 30 3a 30 30 5a 7d 20 7b 30 30 30 31 2d 30 31 2d  0:00Z} {0001-01-
16e0: 30 31 20 30 30 3a 30 30 3a 30 30 5a 7d 5c 0d 0a  01 00:00:00Z}\..
16f0: 20 20 20 20 20 20 20 20 7b 30 30 30 31 2d 30 31          {0001-01
1700: 2d 30 31 20 30 30 3a 30 30 3a 30 30 5a 7d 20 7b  -01 00:00:00Z} {
1710: 30 30 30 31 2d 30 31 2d 30 31 20 30 30 3a 30 30  0001-01-01 00:00
1720: 3a 30 30 5a 7d 5c 0d 0a 20 20 20 20 20 20 20 20  :00Z}\..        
1730: 7b 30 30 30 31 2d 30 31 2d 30 31 20 30 30 3a 30  {0001-01-01 00:0
1740: 30 3a 30 30 5a 7d 20 7b 30 30 30 31 2d 30 31 2d  0:00Z} {0001-01-
1750: 30 31 20 30 30 3a 30 30 3a 30 30 5a 7d 5c 0d 0a  01 00:00:00Z}\..
1760: 20 20 20 20 20 20 20 20 7b 32 30 31 36 2d 30 36          {2016-06
1770: 2d 31 39 20 31 39 3a 35 30 3a 30 34 2e 31 32 33  -19 19:50:04.123
1780: 34 35 36 37 5a 7d 20 7b 30 30 30 31 2d 30 31 2d  4567Z} {0001-01-
1790: 30 31 5c 0d 0a 20 20 20 20 20 20 20 20 30 30 3a  01\..        00:
17a0: 30 30 3a 30 30 5a 7d 7d 20 5c 0d 0a 20 20 20 20  00:00Z}} \..    
17b0: 7b 30 20 30 20 31 20 31 2e 32 20 30 20 30 20 30  {0 0 1 1.2 0 0 0
17c0: 20 30 7d 20 5c 0d 0a 20 20 20 20 7b 30 20 30 20   0} \..    {0 0 
17d0: 31 20 31 2e 32 20 30 20 30 20 30 20 30 7d 20 5c  1 1.2 0 0 0 0} \
17e0: 0d 0a 20 20 20 20 7b 30 20 30 20 31 20 31 2e 32  ..    {0 0 1 1.2
17f0: 20 30 20 30 20 30 20 30 7d 20 5c 0d 0a 20 20 20   0 0 0 0} \..   
1800: 20 7b 30 30 30 30 30 30 30 30 2d 30 30 30 30 2d   {00000000-0000-
1810: 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 30 30  0000-0000-000000
1820: 30 30 30 30 30 30 5c 0d 0a 20 20 20 20 20 20 20  000000\..       
1830: 20 30 30 30 30 30 30 30 30 2d 30 30 30 30 2d 30   00000000-0000-0
1840: 30 30 30 2d 30 30 30 30 2d 30 30 30 30 30 30 30  000-0000-0000000
1850: 30 30 30 30 30 5c 0d 0a 20 20 20 20 20 20 20 20  00000\..        
1860: 30 30 30 30 30 30 30 30 2d 30 30 30 30 2d 30 30  00000000-0000-00
1870: 30 30 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30  00-0000-00000000
1880: 30 30 30 30 5c 0d 0a 20 20 20 20 20 20 20 20 30  0000\..        0
1890: 30 30 30 30 30 30 30 2d 30 30 30 30 2d 30 30 30  0000000-0000-000
18a0: 30 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30  0-0000-000000000
18b0: 30 30 30 5c 0d 0a 20 20 20 20 20 20 20 20 30 30  000\..        00
18c0: 30 30 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30  000000-0000-0000
18d0: 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30 30  -0000-0000000000
18e0: 30 30 5c 0d 0a 20 20 20 20 20 20 20 20 30 30 30  00\..        000
18f0: 36 30 35 30 34 2d 30 30 30 30 2d 30 30 30 30 2d  60504-0000-0000-
1900: 30 30 30 30 2d 30 30 30 30 30 30 30 30 30 30 30  0000-00000000000
1910: 30 5c 0d 0a 20 20 20 20 20 20 20 20 30 30 30 30  0\..        0000
1920: 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d 30  0000-0000-0000-0
1930: 30 30 30 2d 30 30 30 30 30 30 30 30 30 30 30 30  000-000000000000
1940: 5c 0d 0a 20 20 20 20 20 20 20 20 37 34 66 31 66  \..        74f1f
1950: 34 30 32 2d 64 64 65 66 2d 34 30 32 37 2d 61 37  402-ddef-4027-a7
1960: 38 66 2d 33 38 34 37 66 61 39 37 62 38 33 30 7d  8f-3847fa97b830}
1970: 20 5c 0d 0a 20 20 20 20 7b 30 20 30 20 31 20 30   \..    {0 0 1 0
1980: 20 30 20 30 20 30 20 30 7d 20 5c 0d 0a 20 20 20   0 0 0 0} \..   
1990: 20 7b 30 20 30 20 31 20 30 20 30 20 30 20 30 20   {0 0 1 0 0 0 0 
19a0: 30 7d 20 5c 0d 0a 20 20 20 20 7b 30 20 30 20 31  0} \..    {0 0 1
19b0: 20 30 20 30 20 30 20 30 20 30 7d 20 5c 0d 0a 20   0 0 0 0 0} \.. 
19c0: 20 20 20 22 3c 4e 55 4c 3e 20 3c 4e 55 4c 3e 20     "<NUL> <NUL> 
19d0: 3c 4e 55 4c 3e 20 3c 4e 55 4c 3e 20 74 68 72 65  <NUL> <NUL> thre
19e0: 65 20 5c 78 30 34 5c 78 30 35 5c 78 30 36 5c 0d  e \x04\x05\x06\.
19f0: 0a 20 20 20 20 20 20 20 20 7b 32 30 31 36 2d 30  .        {2016-0
1a00: 36 2d 31 39 20 31 39 3a 35 30 3a 30 34 2e 31 32  6-19 19:50:04.12
1a10: 33 34 35 36 37 7d 5c 0d 0a 20 20 20 20 20 20 20  34567}\..       
1a20: 20 37 34 66 31 66 34 30 32 2d 64 64 65 66 2d 34   74f1f402-ddef-4
1a30: 30 32 37 2d 61 37 38 66 2d 33 38 34 37 66 61 39  027-a78f-3847fa9
1a40: 37 62 38 33 30 22 20 5c 0d 0a 20 20 20 20 7b 7b  7b830" \..    {{
1a50: 7d 20 30 20 31 20 31 2e 32 20 74 68 72 65 65 20  } 0 1 1.2 three 
1a60: 7b 34 20 35 20 36 7d 20 7b 32 30 31 36 2d 30 36  {4 5 6} {2016-06
1a70: 2d 31 39 5c 0d 0a 20 20 20 20 20 20 20 20 31 39  -19\..        19
1a80: 3a 35 30 3a 30 34 2e 31 32 33 34 35 36 37 7d 5c  :50:04.1234567}\
1a90: 0d 0a 20 20 20 20 20 20 20 20 37 34 66 31 66 34  ..        74f1f4
1aa0: 30 32 2d 64 64 65 66 2d 34 30 32 37 2d 61 37 38  02-ddef-4027-a78
1ab0: 66 2d 33 38 34 37 66 61 39 37 62 38 33 30 7d 5d  f-3847fa97b830}]
1ac0: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
1ad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b10: 23 23 23 0d 0a 0d 0a 73 65 74 20 73 61 76 65 64  ###....set saved
1b20: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 5b  DateTimeFormat [
1b30: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
1b40: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
1b50: 69 76 65 20 44 61 74 65 54 69 6d 65 46 6f 72 6d  ive DateTimeForm
1b60: 61 74 5d 0d 0a 69 66 20 7b 21 5b 69 73 4f 62 6a  at]..if {![isObj
1b70: 65 63 74 48 61 6e 64 6c 65 20 24 73 61 76 65 64  ectHandle $saved
1b80: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 7d  DateTimeFormat]}
1b90: 20 74 68 65 6e 20 7b 73 65 74 20 73 61 76 65 64   then {set saved
1ba0: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 6e  DateTimeFormat n
1bb0: 75 6c 6c 7d 0d 0a 6f 62 6a 65 63 74 20 69 6e 76  ull}..object inv
1bc0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
1bd0: 47 65 74 41 63 74 69 76 65 20 44 61 74 65 54 69  GetActive DateTi
1be0: 6d 65 46 6f 72 6d 61 74 20 5b 67 65 74 44 61 74  meFormat [getDat
1bf0: 65 54 69 6d 65 46 6f 72 6d 61 74 5d 0d 0a 0d 0a  eTimeFormat]....
1c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
1c50: 0a 0d 0a 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  ...for {set i 0}
1c60: 20 7b 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20   {$i < [llength 
1c70: 24 70 61 72 61 6d 73 5d 7d 20 7b 69 6e 63 72 20  $params]} {incr 
1c80: 69 7d 20 7b 0d 0a 20 20 66 6f 72 65 61 63 68 20  i} {..  foreach 
1c90: 7b 0d 0a 20 20 20 20 74 79 70 65 4e 61 6d 65 20  {..    typeName 
1ca0: 6d 65 74 68 6f 64 4e 61 6d 65 20 69 73 41 72 72  methodName isArr
1cb0: 61 79 20 70 72 6f 70 65 72 74 79 4e 61 6d 65 20  ay propertyName 
1cc0: 69 73 52 65 71 75 69 72 65 64 20 76 61 6c 75 65  isRequired value
1cd0: 0d 0a 20 20 7d 20 5b 6c 69 6e 64 65 78 20 24 70  ..  } [lindex $p
1ce0: 61 72 61 6d 73 20 24 69 5d 20 62 72 65 61 6b 0d  arams $i] break.
1cf0: 0a 0d 0a 20 20 73 65 74 20 65 78 70 65 63 74 65  ...  set expecte
1d00: 64 52 65 73 75 6c 74 20 5b 6c 69 6e 64 65 78 20  dResult [lindex 
1d10: 24 65 78 70 65 63 74 65 64 52 65 73 75 6c 74 73  $expectedResults
1d20: 20 24 69 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23   $i]....  ######
1d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d70: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 70 72 6f  #######....  pro
1d80: 63 20 72 65 61 64 56 61 6c 75 65 43 61 6c 6c 62  c readValueCallb
1d90: 61 63 6b 32 20 24 72 65 61 64 41 72 67 73 20 5b  ack2 $readArgs [
1da0: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 69 66 20  subst {..    if 
1db0: 7b 24 69 73 41 72 72 61 79 7d 20 74 68 65 6e 20  {$isArray} then 
1dc0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5c 5b 63  {..      if {\[c
1dd0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
1de0: 73 65 74 20 64 61 74 61 4f 66 66 73 65 74 20 5c  set dataOffset \
1df0: 5b 5c 24 65 76 65 6e 74 41 72 67 73 20 41 72 72  [\$eventArgs Arr
1e00: 61 79 45 76 65 6e 74 41 72 67 73 2e 44 61 74 61  ayEventArgs.Data
1e10: 4f 66 66 73 65 74 5c 5d 0d 0a 0d 0a 20 20 20 20  Offset\]....    
1e20: 20 20 20 20 73 65 74 20 62 75 66 66 65 72 20 5c      set buffer \
1e30: 5b 5c 24 65 76 65 6e 74 41 72 67 73 20 2d 63 72  [\$eventArgs -cr
1e40: 65 61 74 65 20 5b 61 70 70 65 6e 64 41 72 67 73  eate [appendArgs
1e50: 20 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 2e   ArrayEventArgs.
1e60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
1e70: 24 74 79 70 65 4e 61 6d 65 20 42 75 66 66 65 72  $typeName Buffer
1e80: 5d 5c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ]\]....        s
1e90: 65 74 20 62 75 66 66 65 72 4f 66 66 73 65 74 20  et bufferOffset 
1ea0: 5c 5b 5c 24 65 76 65 6e 74 41 72 67 73 20 41 72  \[\$eventArgs Ar
1eb0: 72 61 79 45 76 65 6e 74 41 72 67 73 2e 42 75 66  rayEventArgs.Buf
1ec0: 66 65 72 4f 66 66 73 65 74 5c 5d 0d 0a 20 20 20  ferOffset\]..   
1ed0: 20 20 20 20 20 73 65 74 20 6c 65 6e 67 74 68 20       set length 
1ee0: 5c 5b 5c 24 65 76 65 6e 74 41 72 67 73 20 41 72  \[\$eventArgs Ar
1ef0: 72 61 79 45 76 65 6e 74 41 72 67 73 2e 4c 65 6e  rayEventArgs.Len
1f00: 67 74 68 5c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  gth\]....       
1f10: 20 73 65 74 20 72 65 61 64 56 61 6c 75 65 20 5c   set readValue \
1f20: 5b 5c 24 64 61 74 61 52 65 61 64 65 72 20 5c 5b  [\$dataReader \[
1f30: 5c 24 65 76 65 6e 74 41 72 67 73 20 4d 65 74 68  \$eventArgs Meth
1f40: 6f 64 4e 61 6d 65 5c 5d 20 5c 0d 0a 20 20 20 20  odName\] \..    
1f50: 20 20 20 20 20 20 20 20 5c 24 69 6e 64 65 78 20          \$index 
1f60: 5c 24 64 61 74 61 4f 66 66 73 65 74 20 5c 24 62  \$dataOffset \$b
1f70: 75 66 66 65 72 20 5c 24 62 75 66 66 65 72 4f 66  uffer \$bufferOf
1f80: 66 73 65 74 20 5c 24 6c 65 6e 67 74 68 5c 5d 0d  fset \$length\].
1f90: 0a 0d 0a 20 20 20 20 20 20 20 20 5c 24 65 76 65  ...        \$eve
1fa0: 6e 74 41 72 67 73 20 5c 5b 61 70 70 65 6e 64 41  ntArgs \[appendA
1fb0: 72 67 73 20 56 61 6c 75 65 2e 20 24 70 72 6f 70  rgs Value. $prop
1fc0: 65 72 74 79 4e 61 6d 65 5c 5d 20 5c 24 72 65 61  ertyName\] \$rea
1fd0: 64 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 7d 20  dValue..      } 
1fe0: 65 72 72 6f 72 5c 5d 7d 20 74 68 65 6e 20 7b 0d  error\]} then {.
1ff0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 65 61  .        set rea
2000: 64 56 61 6c 75 65 20 5c 5b 5c 24 64 61 74 61 52  dValue \[\$dataR
2010: 65 61 64 65 72 20 2d 74 6f 73 74 72 69 6e 67 20  eader -tostring 
2020: 47 65 74 56 61 6c 75 65 20 5c 24 69 6e 64 65 78  GetValue \$index
2030: 5c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  \]....        if
2040: 20 7b 22 24 74 79 70 65 4e 61 6d 65 22 20 65 71   {"$typeName" eq
2050: 20 22 43 68 61 72 22 7d 20 74 68 65 6e 20 7b 0d   "Char"} then {.
2060: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
2070: 74 72 69 6e 67 20 5c 5b 6f 62 6a 65 63 74 20 63  tring \[object c
2080: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 53 74 72  reate -alias Str
2090: 69 6e 67 20 5c 24 72 65 61 64 56 61 6c 75 65 5c  ing \$readValue\
20a0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ]..          set
20b0: 20 62 75 66 66 65 72 20 5c 5b 5c 24 73 74 72 69   buffer \[\$stri
20c0: 6e 67 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61  ng -create -alia
20d0: 73 20 54 6f 43 68 61 72 41 72 72 61 79 5d 0d 0a  s ToCharArray]..
20e0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
20f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set 
2100: 62 75 66 66 65 72 20 5c 5b 6f 62 6a 65 63 74 20  buffer \[object 
2110: 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 2d  invoke -create -
2120: 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..       
2130: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54 65         System.Te
2140: 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38  xt.Encoding.UTF8
2150: 20 47 65 74 42 79 74 65 73 20 5c 24 72 65 61 64   GetBytes \$read
2160: 56 61 6c 75 65 5c 5d 0d 0a 20 20 20 20 20 20 20  Value\]..       
2170: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5c 24   }....        \$
2180: 65 76 65 6e 74 41 72 67 73 20 5c 5b 61 70 70 65  eventArgs \[appe
2190: 6e 64 41 72 67 73 20 56 61 6c 75 65 2e 20 24 70  ndArgs Value. $p
21a0: 72 6f 70 65 72 74 79 4e 61 6d 65 5c 5d 20 5c 24  ropertyName\] \$
21b0: 62 75 66 66 65 72 0d 0a 20 20 20 20 20 20 20 20  buffer..        
21c0: 5c 24 65 76 65 6e 74 41 72 67 73 20 41 72 72 61  \$eventArgs Arra
21d0: 79 45 76 65 6e 74 41 72 67 73 2e 4c 65 6e 67 74  yEventArgs.Lengt
21e0: 68 20 5c 5b 5c 24 62 75 66 66 65 72 20 4c 65 6e  h \[\$buffer Len
21f0: 67 74 68 5c 5d 0d 0a 20 20 20 20 20 20 7d 20 65  gth\]..      } e
2200: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  lse {..        s
2210: 65 74 20 62 75 66 66 65 72 20 5c 5b 5c 24 65 76  et buffer \[\$ev
2220: 65 6e 74 41 72 67 73 20 2d 63 72 65 61 74 65 20  entArgs -create 
2230: 5b 61 70 70 65 6e 64 41 72 67 73 20 41 72 72 61  [appendArgs Arra
2240: 79 45 76 65 6e 74 41 72 67 73 2e 20 5c 0d 0a 20  yEventArgs. \.. 
2250: 20 20 20 20 20 20 20 20 20 20 20 24 74 79 70 65             $type
2260: 4e 61 6d 65 20 42 75 66 66 65 72 5d 5c 5d 0d 0a  Name Buffer]\]..
2270: 0d 0a 20 20 20 20 20 20 20 20 5c 24 65 76 65 6e  ..        \$even
2280: 74 41 72 67 73 20 5c 5b 61 70 70 65 6e 64 41 72  tArgs \[appendAr
2290: 67 73 20 56 61 6c 75 65 2e 20 24 70 72 6f 70 65  gs Value. $prope
22a0: 72 74 79 4e 61 6d 65 5c 5d 20 5c 24 62 75 66 66  rtyName\] \$buff
22b0: 65 72 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  er..      }..   
22c0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
22d0: 20 69 66 20 7b 5c 5b 63 61 74 63 68 20 7b 0d 0a   if {\[catch {..
22e0: 20 20 20 20 20 20 20 20 73 65 74 20 72 65 61 64          set read
22f0: 56 61 6c 75 65 20 5c 5b 5c 24 64 61 74 61 52 65  Value \[\$dataRe
2300: 61 64 65 72 20 5c 5b 5c 24 65 76 65 6e 74 41 72  ader \[\$eventAr
2310: 67 73 20 4d 65 74 68 6f 64 4e 61 6d 65 5c 5d 20  gs MethodName\] 
2320: 5c 24 69 6e 64 65 78 5c 5d 0d 0a 0d 0a 20 20 20  \$index\]....   
2330: 20 20 20 20 20 69 66 20 7b 22 24 74 79 70 65 4e       if {"$typeN
2340: 61 6d 65 22 20 65 71 20 22 43 68 61 72 22 7d 20  ame" eq "Char"} 
2350: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
2360: 20 20 73 65 74 20 72 65 61 64 56 61 6c 75 65 20    set readValue 
2370: 5c 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  \[object invoke 
2380: 2d 63 72 65 61 74 65 20 43 68 61 72 20 50 61 72  -create Char Par
2390: 73 65 20 5c 24 72 65 61 64 56 61 6c 75 65 5c 5d  se \$readValue\]
23a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
23b0: 20 20 20 20 20 20 20 5c 24 65 76 65 6e 74 41 72         \$eventAr
23c0: 67 73 20 5c 5b 61 70 70 65 6e 64 41 72 67 73 20  gs \[appendArgs 
23d0: 56 61 6c 75 65 2e 20 24 70 72 6f 70 65 72 74 79  Value. $property
23e0: 4e 61 6d 65 5c 5d 20 5c 24 72 65 61 64 56 61 6c  Name\] \$readVal
23f0: 75 65 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f  ue..      } erro
2400: 72 5c 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r\]} then {..   
2410: 20 20 20 20 20 5c 24 65 76 65 6e 74 41 72 67 73       \$eventArgs
2420: 20 5c 5b 61 70 70 65 6e 64 41 72 67 73 20 56 61   \[appendArgs Va
2430: 6c 75 65 2e 20 24 70 72 6f 70 65 72 74 79 4e 61  lue. $propertyNa
2440: 6d 65 5c 5d 20 7b 24 76 61 6c 75 65 7d 0d 0a 20  me\] {$value}.. 
2450: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2460: 0a 20 20 20 20 75 70 76 61 72 20 31 20 5c 24 63  .    upvar 1 \$c
2470: 6f 6d 70 6c 65 74 65 56 61 72 4e 61 6d 65 20 63  ompleteVarName c
2480: 6f 6d 70 6c 65 74 65 0d 0a 20 20 20 20 73 65 74  omplete..    set
2490: 20 63 6f 6d 70 6c 65 74 65 20 5c 5b 6f 62 6a 65   complete \[obje
24a0: 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74  ct invoke -creat
24b0: 65 20 53 79 73 74 65 6d 2e 42 6f 6f 6c 65 61 6e  e System.Boolean
24c0: 20 50 61 72 73 65 20 54 72 75 65 5c 5d 0d 0a 20   Parse True\].. 
24d0: 20 7d 5d 0d 0a 0d 0a 20 20 23 23 23 23 23 23 23   }]....  #######
24e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2520: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 72 75 6e 54  ######....  runT
2530: 65 73 74 20 7b 74 65 73 74 20 5b 61 70 70 65 6e  est {test [appen
2540: 64 41 72 67 73 20 74 79 70 65 73 2d 32 2e 20 24  dArgs types-2. $
2550: 69 5d 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  i] [appendArgs $
2560: 6d 65 74 68 6f 64 4e 61 6d 65 20 22 20 63 61 6c  methodName " cal
2570: 6c 62 61 63 6b 22 5d 20 5c 0d 0a 20 20 20 20 20  lback"] \..     
2580: 20 2d 73 65 74 75 70 20 5b 73 75 62 73 74 20 2d   -setup [subst -
2590: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 7b 0d 0a 20 20  nocommands {..  
25a0: 20 20 73 65 74 20 74 79 70 65 4e 61 6d 65 20 7b    set typeName {
25b0: 24 74 79 70 65 4e 61 6d 65 7d 0d 0a 20 20 20 20  $typeName}..    
25c0: 73 65 74 20 6d 65 74 68 6f 64 4e 61 6d 65 20 7b  set methodName {
25d0: 24 6d 65 74 68 6f 64 4e 61 6d 65 7d 0d 0a 20 20  $methodName}..  
25e0: 20 20 73 65 74 20 69 73 41 72 72 61 79 20 7b 24    set isArray {$
25f0: 69 73 41 72 72 61 79 7d 0d 0a 0d 0a 20 20 20 20  isArray}....    
2600: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
2610: 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67  eName [appendArg
2620: 73 20 74 79 70 65 73 2d 32 2e 20 24 69 20 2e 64  s types-2. $i .d
2630: 62 5d 5d 20 22 22 20 22 22 20 22 22 20 5c 0d 0a  b]] "" "" "" \..
2640: 20 20 20 20 20 20 20 20 55 73 65 43 6f 6e 6e 65          UseConne
2650: 63 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61  ctionReadValueCa
2660: 6c 6c 62 61 63 6b 73 0d 0a 20 20 7d 5d 20 2d 62  llbacks..  }] -b
2670: 6f 64 79 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65  ody {..    sql e
2680: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
2690: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
26a0: 20 74 31 28 78 20 49 4e 54 45 47 45 52 2c 20 79   t1(x INTEGER, y
26b0: 20 53 50 45 43 49 41 4c 29 3b 0d 0a 20 20 20 20   SPECIAL);..    
26c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
26d0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31   (x, y) VALUES(1
26e0: 2c 20 4e 55 4c 4c 29 3b 0d 0a 20 20 20 20 20 20  , NULL);..      
26f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
2700: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20  x, y) VALUES(2, 
2710: 30 29 3b 0d 0a 20 20 20 20 20 20 49 4e 53 45 52  0);..      INSER
2720: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
2730: 20 56 41 4c 55 45 53 28 33 2c 20 31 29 3b 0d 0a   VALUES(3, 1);..
2740: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2750: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
2760: 45 53 28 34 2c 20 31 2e 32 29 3b 0d 0a 20 20 20  ES(4, 1.2);..   
2770: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2780: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
2790: 35 2c 20 27 74 68 72 65 65 27 29 3b 0d 0a 20 20  5, 'three');..  
27a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
27b0: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
27c0: 28 36 2c 20 58 27 30 34 30 35 30 36 27 29 3b 0d  (6, X'040506');.
27d0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
27e0: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
27f0: 55 45 53 28 37 2c 20 27 32 30 31 36 2d 30 36 2d  UES(7, '2016-06-
2800: 31 39 20 31 39 3a 35 30 3a 30 34 2e 31 32 33 34  19 19:50:04.1234
2810: 35 36 37 27 29 3b 0d 0a 20 20 20 20 20 20 49 4e  567');..      IN
2820: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
2830: 20 79 29 20 56 41 4c 55 45 53 28 38 2c 20 27 37   y) VALUES(8, '7
2840: 34 66 31 66 34 30 32 2d 64 64 65 66 2d 34 30 32  4f1f402-ddef-402
2850: 37 2d 61 37 38 66 2d 33 38 34 37 66 61 39 37 62  7-a78f-3847fa97b
2860: 38 33 30 27 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  830');..    }...
2870: 0a 20 20 20 20 73 65 74 20 63 61 6c 6c 62 61 63  .    set callbac
2880: 6b 20 7b 2d 63 61 6c 6c 62 61 63 6b 66 6c 61 67  k {-callbackflag
2890: 73 20 2b 44 65 66 61 75 6c 74 20 72 65 61 64 56  s +Default readV
28a0: 61 6c 75 65 43 61 6c 6c 62 61 63 6b 32 7d 0d 0a  alueCallback2}..
28b0: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69      set connecti
28c0: 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74  on [getDbConnect
28d0: 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20  ion]....    set 
28e0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
28f0: 0a 20 20 20 20 73 65 74 20 74 79 70 65 43 61 6c  .    set typeCal
2900: 6c 62 61 63 6b 73 20 5b 6f 62 6a 65 63 74 20 69  lbacks [object i
2910: 6e 76 6f 6b 65 20 2d 6d 61 72 73 68 61 6c 66 6c  nvoke -marshalfl
2920: 61 67 73 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c  ags +DynamicCall
2930: 62 61 63 6b 20 5c 0d 0a 20 20 20 20 20 20 20 20  back \..        
2940: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2950: 74 65 2e 53 51 4c 69 74 65 54 79 70 65 43 61 6c  te.SQLiteTypeCal
2960: 6c 62 61 63 6b 73 20 43 72 65 61 74 65 20 6e 75  lbacks Create nu
2970: 6c 6c 20 24 63 61 6c 6c 62 61 63 6b 20 5c 0d 0a  ll $callback \..
2980: 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 6e 75 6c          null nul
2990: 6c 5d 0d 0a 0d 0a 20 20 20 20 24 63 6f 6e 6e 65  l]....    $conne
29a0: 63 74 69 6f 6e 20 53 65 74 54 79 70 65 43 61 6c  ction SetTypeCal
29b0: 6c 62 61 63 6b 73 20 53 50 45 43 49 41 4c 20 24  lbacks SPECIAL $
29c0: 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d  typeCallbacks...
29d0: 0a 20 20 20 20 73 65 74 20 64 61 74 61 52 65 61  .    set dataRea
29e0: 64 65 72 20 5b 73 71 6c 20 65 78 65 63 75 74 65  der [sql execute
29f0: 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
2a00: 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
2a10: 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d  der \..        -
2a20: 61 6c 69 61 73 20 24 64 62 20 22 53 45 4c 45 43  alias $db "SELEC
2a30: 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T y FROM t1 ORDE
2a40: 52 20 42 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 20  R BY x;"]....   
2a50: 20 77 68 69 6c 65 20 7b 5b 24 64 61 74 61 52 65   while {[$dataRe
2a60: 61 64 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a 20  ader Read]} {.. 
2a70: 20 20 20 20 20 69 66 20 7b 24 69 73 41 72 72 61       if {$isArra
2a80: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  y} then {..     
2a90: 20 20 20 73 65 74 20 62 75 66 66 65 72 20 5b 6f     set buffer [o
2aa0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a  bject invoke \..
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 63 72 65              -cre
2ac0: 61 74 65 20 41 72 72 61 79 20 43 72 65 61 74 65  ate Array Create
2ad0: 49 6e 73 74 61 6e 63 65 20 24 74 79 70 65 4e 61  Instance $typeNa
2ae0: 6d 65 20 31 30 30 5d 0d 0a 0d 0a 20 20 20 20 20  me 100]....     
2af0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
2b00: 0a 20 20 20 20 20 20 20 20 20 20 24 64 61 74 61  .          $data
2b10: 52 65 61 64 65 72 20 24 6d 65 74 68 6f 64 4e 61  Reader $methodNa
2b20: 6d 65 20 30 20 30 20 24 62 75 66 66 65 72 20 30  me 0 0 $buffer 0
2b30: 20 31 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61   1..        } va
2b40: 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  lue] == 0} then 
2b50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70  {..          lap
2b60: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c  pend result $val
2b70: 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ue....          
2b80: 69 66 20 7b 24 76 61 6c 75 65 20 3e 20 30 7d 20  if {$value > 0} 
2b90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
2ba0: 20 20 20 20 73 65 74 20 6c 69 73 74 20 5b 6f 62      set list [ob
2bb0: 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69  ject create -ali
2bc0: 61 73 20 53 74 72 69 6e 67 4c 69 73 74 20 24 62  as StringList $b
2bd0: 75 66 66 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  uffer]....      
2be0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
2bf0: 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  sult [object inv
2c00: 6f 6b 65 20 53 74 72 69 6e 67 4c 69 73 74 20 47  oke StringList G
2c10: 65 74 52 61 6e 67 65 20 5c 0d 0a 20 20 20 20 20  etRange \..     
2c20: 20 20 20 20 20 20 20 20 20 20 20 24 6c 69 73 74             $list
2c30: 20 30 20 5b 65 78 70 72 20 7b 24 76 61 6c 75 65   0 [expr {$value
2c40: 20 2d 20 31 7d 5d 20 66 61 6c 73 65 5d 0d 0a 20   - 1}] false].. 
2c50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
2c70: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2c80: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 65 72 72  result [list err
2c90: 6f 72 28 61 72 72 61 79 29 20 24 3a 3a 65 72 72  or(array) $::err
2ca0: 6f 72 43 6f 64 65 5d 0d 0a 20 20 20 20 20 20 20  orCode]..       
2cb0: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
2cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
2cd0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
2ce0: 20 20 20 20 24 64 61 74 61 52 65 61 64 65 72 20      $dataReader 
2cf0: 24 6d 65 74 68 6f 64 4e 61 6d 65 20 30 0d 0a 20  $methodName 0.. 
2d00: 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20         } value] 
2d10: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..  
2d20: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c          if {$val
2d30: 75 65 20 65 71 20 22 5c 78 30 30 22 7d 20 74 68  ue eq "\x00"} th
2d40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
2d50: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
2d60: 20 3c 4e 55 4c 3e 0d 0a 20 20 20 20 20 20 20 20   <NUL>..        
2d70: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
2d80: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
2d90: 72 65 73 75 6c 74 20 5b 67 65 74 53 74 72 69 6e  result [getStrin
2da0: 67 46 72 6f 6d 4f 62 6a 65 63 74 48 61 6e 64 6c  gFromObjectHandl
2db0: 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20  e $value]..     
2dc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2dd0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
2de0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
2df0: 6c 74 20 5b 6c 69 73 74 20 65 72 72 6f 72 28 76  lt [list error(v
2e00: 61 6c 75 65 29 20 24 3a 3a 65 72 72 6f 72 43 6f  alue) $::errorCo
2e10: 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  de]..        }..
2e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2e30: 0d 0a 20 20 20 20 73 65 74 20 72 65 73 75 6c 74  ..    set result
2e40: 0d 0a 20 20 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ..  } -cleanup {
2e50: 0d 0a 20 20 20 20 63 61 74 63 68 20 7b 6f 62 6a  ..    catch {obj
2e60: 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61  ect removecallba
2e70: 63 6b 20 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d  ck $callback}...
2e80: 0a 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  .    unset -noco
2e90: 6d 70 6c 61 69 6e 20 64 61 74 61 52 65 61 64 65  mplain dataReade
2ea0: 72 0d 0a 20 20 20 20 66 72 65 65 44 62 43 6f 6e  r..    freeDbCon
2eb0: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 63  nection....    c
2ec0: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
2ed0: 6d 65 0d 0a 0d 0a 20 20 20 20 75 6e 73 65 74 20  me....    unset 
2ee0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 62 75 66 66  -nocomplain buff
2ef0: 65 72 20 74 79 70 65 43 61 6c 6c 62 61 63 6b 73  er typeCallbacks
2f00: 20 63 61 6c 6c 62 61 63 6b 20 76 61 6c 75 65 20   callback value 
2f10: 6c 69 73 74 0d 0a 20 20 20 20 75 6e 73 65 74 20  list..    unset 
2f20: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
2f30: 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62  lt connection db
2f40: 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 75   fileName..    u
2f50: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
2f60: 20 74 79 70 65 4e 61 6d 65 20 6d 65 74 68 6f 64   typeName method
2f70: 4e 61 6d 65 20 69 73 41 72 72 61 79 0d 0a 20 20  Name isArray..  
2f80: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
2f90: 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
2fa0: 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63  ject monoBug28 c
2fb0: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
2fc0: 6c 65 2e 44 41 54 41 5c 0d 0a 53 51 4c 69 74 65  le.DATA\..SQLite
2fd0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2fe0: 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 24 65 78  ite} -result $ex
2ff0: 70 65 63 74 65 64 52 65 73 75 6c 74 7d 0d 0a 0d  pectedResult}...
3000: 0a 20 20 72 65 6e 61 6d 65 20 72 65 61 64 56 61  .  rename readVa
3010: 6c 75 65 43 61 6c 6c 62 61 63 6b 32 20 22 22 0d  lueCallback2 "".
3020: 0a 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  .}....##########
3030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3070: 23 23 23 23 23 0d 0a 0d 0a 6f 62 6a 65 63 74 20  #####....object 
3080: 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74  invoke Interpret
3090: 65 72 2e 47 65 74 41 63 74 69 76 65 20 44 61 74  er.GetActive Dat
30a0: 65 54 69 6d 65 46 6f 72 6d 61 74 20 24 73 61 76  eTimeFormat $sav
30b0: 65 64 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  edDateTimeFormat
30c0: 0d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  ..unset -nocompl
30d0: 61 69 6e 20 73 61 76 65 64 44 61 74 65 54 69 6d  ain savedDateTim
30e0: 65 46 6f 72 6d 61 74 0d 0a 0d 0a 23 23 23 23 23  eFormat....#####
30f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3130: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 75 6e  ##########....un
3140: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3150: 69 20 72 65 61 64 41 72 67 73 20 70 61 72 61 6d  i readArgs param
3160: 73 20 74 79 70 65 4e 61 6d 65 20 6d 65 74 68 6f  s typeName metho
3170: 64 4e 61 6d 65 20 69 73 41 72 72 61 79 20 70 72  dName isArray pr
3180: 6f 70 65 72 74 79 4e 61 6d 65 20 5c 0d 0a 20 20  opertyName \..  
3190: 20 20 69 73 52 65 71 75 69 72 65 64 20 65 78 70    isRequired exp
31a0: 65 63 74 65 64 52 65 73 75 6c 74 73 20 65 78 70  ectedResults exp
31b0: 65 63 74 65 64 52 65 73 75 6c 74 0d 0a 0d 0a 23  ectedResult....#
31c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
3210: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
3220: 74 79 70 65 73 2d 33 2e 31 20 7b 62 69 6e 64 20  types-3.1 {bind 
3230: 63 61 6c 6c 62 61 63 6b 20 28 69 6e 63 6f 6d 70  callback (incomp
3240: 6c 65 74 65 29 7d 20 2d 73 65 74 75 70 20 7b 0d  lete)} -setup {.
3250: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
3260: 6c 61 69 6e 20 6c 6f 67 0d 0a 0d 0a 20 20 73 65  lain log....  se
3270: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
3280: 61 6d 65 20 74 79 70 65 73 2d 33 2e 31 2e 64 62  ame types-3.1.db
3290: 5d 20 22 22 20 22 22 20 22 22 20 5c 0d 0a 20 20  ] "" "" "" \..  
32a0: 20 20 20 20 22 55 73 65 43 6f 6e 6e 65 63 74 69      "UseConnecti
32b0: 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62  onBindValueCallb
32c0: 61 63 6b 73 20 55 73 65 50 61 72 61 6d 65 74 65  acks UseParamete
32d0: 72 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d 65  rNameForTypeName
32e0: 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  "..} -body {..  
32f0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
3300: 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  {..    CREATE TA
3310: 42 4c 45 20 74 31 28 78 20 53 50 45 43 49 41 4c  BLE t1(x SPECIAL
3320: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
3330: 20 63 61 6c 6c 62 61 63 6b 20 7b 2d 63 61 6c 6c   callback {-call
3340: 62 61 63 6b 66 6c 61 67 73 20 2b 44 65 66 61 75  backflags +Defau
3350: 6c 74 20 62 69 6e 64 56 61 6c 75 65 43 61 6c 6c  lt bindValueCall
3360: 62 61 63 6b 31 7d 0d 0a 20 20 73 65 74 20 63 6f  back1}..  set co
3370: 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
3380: 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....  
3390: 73 65 74 20 74 79 70 65 43 61 6c 6c 62 61 63 6b  set typeCallback
33a0: 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  s [object invoke
33b0: 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73 20 2b   -marshalflags +
33c0: 44 79 6e 61 6d 69 63 43 61 6c 6c 62 61 63 6b 20  DynamicCallback 
33d0: 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  \..      System.
33e0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
33f0: 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 20  teTypeCallbacks 
3400: 43 72 65 61 74 65 20 24 63 61 6c 6c 62 61 63 6b  Create $callback
3410: 20 6e 75 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 30   null \..      0
3420: 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 24 63 6f 6e   null]....  $con
3430: 6e 65 63 74 69 6f 6e 20 53 65 74 54 79 70 65 43  nection SetTypeC
3440: 61 6c 6c 62 61 63 6b 73 20 53 50 45 43 49 41 4c  allbacks SPECIAL
3450: 20 24 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 0d   $typeCallbacks.
3460: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
3470: 20 24 64 62 20 7b 0d 0a 20 20 20 20 49 4e 53 45   $db {..    INSE
3480: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
3490: 41 4c 55 45 53 28 3f 29 3b 0d 0a 20 20 7d 20 5b  ALUES(?);..  } [
34a0: 6c 69 73 74 20 53 70 65 63 69 61 6c 20 49 6e 74  list Special Int
34b0: 36 34 20 31 32 33 34 5d 0d 0a 0d 0a 20 20 73 65  64 1234]....  se
34c0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
34d0: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
34e0: 75 6c 74 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  ult [expr {..   
34f0: 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6c 6f   [info exists lo
3500: 67 28 62 69 6e 64 29 5d 20 3f 20 24 6c 6f 67 28  g(bind)] ? $log(
3510: 62 69 6e 64 29 20 3a 20 22 3c 4d 49 53 53 49 4e  bind) : "<MISSIN
3520: 47 3e 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6c  G>"..  }]....  l
3530: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
3540: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
3550: 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d  ute reader -form
3560: 61 74 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20  at list $db \.. 
3570: 20 20 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46       "SELECT * F
3580: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
3590: 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  x;"]....  set re
35a0: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
35b0: 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a   {..  catch {obj
35c0: 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61  ect removecallba
35d0: 63 6b 20 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d  ck $callback}...
35e0: 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
35f0: 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ion....  cleanup
3600: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
3610: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
3620: 61 69 6e 20 72 65 73 75 6c 74 20 74 79 70 65 43  ain result typeC
3630: 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61 63  allbacks callbac
3640: 6b 20 6c 6f 67 20 63 6f 6e 6e 65 63 74 69 6f 6e  k log connection
3650: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
3660: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
3670: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
3680: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
3690: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
36a0: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
36b0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
36c0: 65 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 7b 63 6f  e} -result {{{co
36d0: 6e 76 65 72 74 20 74 72 75 65 7d 20 7b 63 6f 6d  nvert true} {com
36e0: 6d 61 6e 64 20 74 72 75 65 7d 20 7b 66 6c 61 67  mand true} {flag
36f0: 73 5c 0d 0a 7b 55 73 65 43 6f 6e 6e 65 63 74 69  s\..{UseConnecti
3700: 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62  onBindValueCallb
3710: 61 63 6b 73 2c 20 55 73 65 50 61 72 61 6d 65 74  acks, UseParamet
3720: 65 72 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d  erNameForTypeNam
3730: 65 7d 7d 20 7b 70 61 72 61 6d 65 74 65 72 5c 0d  e}} {parameter\.
3740: 0a 74 72 75 65 7d 20 7b 74 79 70 65 4e 61 6d 65  .true} {typeName
3750: 20 53 70 65 63 69 61 6c 7d 20 7b 69 6e 64 65 78   Special} {index
3760: 20 31 7d 20 7b 75 73 65 72 44 61 74 61 20 30 7d   1} {userData 0}
3770: 7d 20 31 32 33 34 7d 7d 0d 0a 0d 0a 23 23 23 23  } 1234}}....####
3780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
37c0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
37d0: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 74 79 70  unTest {test typ
37e0: 65 73 2d 33 2e 32 20 7b 62 69 6e 64 20 63 61 6c  es-3.2 {bind cal
37f0: 6c 62 61 63 6b 20 28 63 6f 6d 70 6c 65 74 65 29  lback (complete)
3800: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75 6e  } -setup {..  un
3810: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3820: 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62  log....  setupDb
3830: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74   [set fileName t
3840: 79 70 65 73 2d 33 2e 32 2e 64 62 5d 20 22 22 20  ypes-3.2.db] "" 
3850: 22 22 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 22  "" "" \..      "
3860: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42 69 6e  UseConnectionBin
3870: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 20  dValueCallbacks 
3880: 55 73 65 50 61 72 61 6d 65 74 65 72 4e 61 6d 65  UseParameterName
3890: 46 6f 72 54 79 70 65 4e 61 6d 65 22 0d 0a 7d 20  ForTypeName"..} 
38a0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
38b0: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
38c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
38d0: 31 28 78 20 53 50 45 43 49 41 4c 29 3b 0d 0a 20  1(x SPECIAL);.. 
38e0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 61 6c 6c   }....  set call
38f0: 62 61 63 6b 20 7b 2d 63 61 6c 6c 62 61 63 6b 66  back {-callbackf
3900: 6c 61 67 73 20 2b 44 65 66 61 75 6c 74 20 62 69  lags +Default bi
3910: 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 31  ndValueCallback1
3920: 7d 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  }..  set connect
3930: 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
3940: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 74  tion]....  set t
3950: 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 5b 6f 62  ypeCallbacks [ob
3960: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6d 61 72  ject invoke -mar
3970: 73 68 61 6c 66 6c 61 67 73 20 2b 44 79 6e 61 6d  shalflags +Dynam
3980: 69 63 43 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20  icCallback \..  
3990: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
39a0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 54 79 70  SQLite.SQLiteTyp
39b0: 65 43 61 6c 6c 62 61 63 6b 73 20 43 72 65 61 74  eCallbacks Creat
39c0: 65 20 24 63 61 6c 6c 62 61 63 6b 20 6e 75 6c 6c  e $callback null
39d0: 20 5c 0d 0a 20 20 20 20 20 20 31 20 6e 75 6c 6c   \..      1 null
39e0: 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69  ]....  $connecti
39f0: 6f 6e 20 53 65 74 54 79 70 65 43 61 6c 6c 62 61  on SetTypeCallba
3a00: 63 6b 73 20 53 50 45 43 49 41 4c 20 24 74 79 70  cks SPECIAL $typ
3a10: 65 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d 0a 20 20  eCallbacks....  
3a20: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
3a30: 7b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  {..    INSERT IN
3a40: 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
3a50: 28 3f 29 3b 0d 0a 20 20 7d 20 5b 6c 69 73 74 20  (?);..  } [list 
3a60: 53 70 65 63 69 61 6c 20 49 6e 74 36 34 20 35 36  Special Int64 56
3a70: 37 38 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  78]....  set res
3a80: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
3a90: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
3aa0: 65 78 70 72 20 7b 0d 0a 20 20 20 20 5b 69 6e 66  expr {..    [inf
3ab0: 6f 20 65 78 69 73 74 73 20 6c 6f 67 28 62 69 6e  o exists log(bin
3ac0: 64 29 5d 20 3f 20 24 6c 6f 67 28 62 69 6e 64 29  d)] ? $log(bind)
3ad0: 20 3a 20 22 3c 4d 49 53 53 49 4e 47 3e 22 0d 0a   : "<MISSING>"..
3ae0: 20 20 7d 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e    }]....  lappen
3af0: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
3b00: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72  ecute -execute r
3b10: 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69  eader -format li
3b20: 73 74 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  st $db \..      
3b30: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
3b40: 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22 5d 0d  1 ORDER BY x;"].
3b50: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d  ...  set result.
3b60: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
3b70: 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 72   catch {object r
3b80: 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 24 63  emovecallback $c
3b90: 61 6c 6c 62 61 63 6b 7d 0d 0a 0d 0a 20 20 66 72  allback}....  fr
3ba0: 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  eeDbConnection..
3bb0: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
3bc0: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
3bd0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
3be0: 65 73 75 6c 74 20 74 79 70 65 43 61 6c 6c 62 61  esult typeCallba
3bf0: 63 6b 73 20 63 61 6c 6c 62 61 63 6b 20 6c 6f 67  cks callback log
3c00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66   connection db f
3c10: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
3c20: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
3c30: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
3c40: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
3c50: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
3c60: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
3c70: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
3c80: 65 73 75 6c 74 20 7b 7b 7b 63 6f 6e 76 65 72 74  esult {{{convert
3c90: 20 74 72 75 65 7d 20 7b 63 6f 6d 6d 61 6e 64 20   true} {command 
3ca0: 74 72 75 65 7d 20 7b 66 6c 61 67 73 5c 0d 0a 7b  true} {flags\..{
3cb0: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42 69 6e  UseConnectionBin
3cc0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 2c  dValueCallbacks,
3cd0: 20 55 73 65 50 61 72 61 6d 65 74 65 72 4e 61 6d   UseParameterNam
3ce0: 65 46 6f 72 54 79 70 65 4e 61 6d 65 7d 7d 20 7b  eForTypeName}} {
3cf0: 70 61 72 61 6d 65 74 65 72 5c 0d 0a 74 72 75 65  parameter\..true
3d00: 7d 20 7b 74 79 70 65 4e 61 6d 65 20 53 70 65 63  } {typeName Spec
3d10: 69 61 6c 7d 20 7b 69 6e 64 65 78 20 31 7d 20 7b  ial} {index 1} {
3d20: 75 73 65 72 44 61 74 61 20 31 7d 7d 20 7b 7d 7d  userData 1}} {}}
3d30: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
3d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d80: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
3d90: 7b 74 65 73 74 20 74 79 70 65 73 2d 33 2e 33 20  {test types-3.3 
3da0: 7b 62 69 6e 64 20 63 61 6c 6c 62 61 63 6b 20 28  {bind callback (
3db0: 6d 6f 64 69 66 79 2f 69 6e 63 6f 6d 70 6c 65 74  modify/incomplet
3dc0: 65 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  e)} -setup {..  
3dd0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
3de0: 6e 20 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75 70  n log....  setup
3df0: 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
3e00: 20 74 79 70 65 73 2d 33 2e 33 2e 64 62 5d 20 22   types-3.3.db] "
3e10: 22 20 22 22 20 22 22 20 5c 0d 0a 20 20 20 20 20  " "" "" \..     
3e20: 20 22 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42   "UseConnectionB
3e30: 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  indValueCallback
3e40: 73 20 55 73 65 50 61 72 61 6d 65 74 65 72 4e 61  s UseParameterNa
3e50: 6d 65 46 6f 72 54 79 70 65 4e 61 6d 65 22 0d 0a  meForTypeName"..
3e60: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c  } -body {..  sql
3e70: 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a   execute $db {..
3e80: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3e90: 20 74 31 28 78 20 53 50 45 43 49 41 4c 29 3b 0d   t1(x SPECIAL);.
3ea0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 61  .  }....  set ca
3eb0: 6c 6c 62 61 63 6b 20 7b 2d 63 61 6c 6c 62 61 63  llback {-callbac
3ec0: 6b 66 6c 61 67 73 20 2b 44 65 66 61 75 6c 74 20  kflags +Default 
3ed0: 62 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  bindValueCallbac
3ee0: 6b 31 7d 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65  k1}..  set conne
3ef0: 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
3f00: 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74  ection]....  set
3f10: 20 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 5b   typeCallbacks [
3f20: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6d  object invoke -m
3f30: 61 72 73 68 61 6c 66 6c 61 67 73 20 2b 44 79 6e  arshalflags +Dyn
3f40: 61 6d 69 63 43 61 6c 6c 62 61 63 6b 20 5c 0d 0a  amicCallback \..
3f50: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
3f60: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 54  a.SQLite.SQLiteT
3f70: 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 43 72 65  ypeCallbacks Cre
3f80: 61 74 65 20 24 63 61 6c 6c 62 61 63 6b 20 6e 75  ate $callback nu
3f90: 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 32 20 6e 75  ll \..      2 nu
3fa0: 6c 6c 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63  ll]....  $connec
3fb0: 74 69 6f 6e 20 53 65 74 54 79 70 65 43 61 6c 6c  tion SetTypeCall
3fc0: 62 61 63 6b 73 20 53 50 45 43 49 41 4c 20 24 74  backs SPECIAL $t
3fd0: 79 70 65 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d 0a  ypeCallbacks....
3fe0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
3ff0: 62 20 7b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  b {..    INSERT 
4000: 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
4010: 45 53 28 3f 29 3b 0d 0a 20 20 7d 20 5b 6c 69 73  ES(?);..  } [lis
4020: 74 20 53 70 65 63 69 61 6c 20 49 6e 74 36 34 20  t Special Int64 
4030: 39 39 39 39 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  9999]....  set r
4040: 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
4050: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
4060: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 5b 69   [expr {..    [i
4070: 6e 66 6f 20 65 78 69 73 74 73 20 6c 6f 67 28 62  nfo exists log(b
4080: 69 6e 64 29 5d 20 3f 20 24 6c 6f 67 28 62 69 6e  ind)] ? $log(bin
4090: 64 29 20 3a 20 22 3c 4d 49 53 53 49 4e 47 3e 22  d) : "<MISSING>"
40a0: 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6c 61 70 70  ..  }]....  lapp
40b0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
40c0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
40d0: 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
40e0: 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20 20  list $db \..    
40f0: 20 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d    "SELECT * FROM
4100: 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22   t1 ORDER BY x;"
4110: 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
4120: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
4130: 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74  .  catch {object
4140: 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20   removecallback 
4150: 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d 0a 20 20  $callback}....  
4160: 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  freeDbConnection
4170: 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
4180: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
4190: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
41a0: 20 72 65 73 75 6c 74 20 74 79 70 65 43 61 6c 6c   result typeCall
41b0: 62 61 63 6b 73 20 63 61 6c 6c 62 61 63 6b 20 6c  backs callback l
41c0: 6f 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62  og connection db
41d0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
41e0: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
41f0: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
4200: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
4210: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
4220: 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74  TA SQLite\..Syst
4230: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
4240: 2d 72 65 73 75 6c 74 20 7b 7b 7b 63 6f 6e 76 65  -result {{{conve
4250: 72 74 20 74 72 75 65 7d 20 7b 63 6f 6d 6d 61 6e  rt true} {comman
4260: 64 20 74 72 75 65 7d 20 7b 66 6c 61 67 73 5c 0d  d true} {flags\.
4270: 0a 7b 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42  .{UseConnectionB
4280: 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  indValueCallback
4290: 73 2c 20 55 73 65 50 61 72 61 6d 65 74 65 72 4e  s, UseParameterN
42a0: 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d 65 7d 7d  ameForTypeName}}
42b0: 20 7b 70 61 72 61 6d 65 74 65 72 5c 0d 0a 74 72   {parameter\..tr
42c0: 75 65 7d 20 7b 74 79 70 65 4e 61 6d 65 20 53 70  ue} {typeName Sp
42d0: 65 63 69 61 6c 7d 20 7b 69 6e 64 65 78 20 31 7d  ecial} {index 1}
42e0: 20 7b 75 73 65 72 44 61 74 61 20 32 7d 7d 20 63   {userData 2}} c
42f0: 75 73 74 6f 6d 7d 7d 0d 0a 0d 0a 23 23 23 23 23  ustom}}....#####
4300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4340: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
4350: 6e 54 65 73 74 20 7b 74 65 73 74 20 74 79 70 65  nTest {test type
4360: 73 2d 34 2e 31 20 7b 72 65 61 64 20 63 61 6c 6c  s-4.1 {read call
4370: 62 61 63 6b 20 28 65 78 63 65 70 74 69 6f 6e 29  back (exception)
4380: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75 6e  } -setup {..  un
4390: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
43a0: 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62  log....  setupDb
43b0: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74   [set fileName t
43c0: 79 70 65 73 2d 34 2e 31 2e 64 62 5d 20 22 22 20  ypes-4.1.db] "" 
43d0: 22 22 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 55  "" "" \..      U
43e0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52 65 61 64  seConnectionRead
43f0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 0d 0a  ValueCallbacks..
4400: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c  } -body {..  sql
4410: 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a   execute $db {..
4420: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4430: 20 74 31 28 78 20 53 50 45 43 49 41 4c 29 3b 0d   t1(x SPECIAL);.
4440: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
4450: 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 38   t1 (x) VALUES(8
4460: 38 38 38 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  888);..  }....  
4470: 73 65 74 20 63 61 6c 6c 62 61 63 6b 20 7b 2d 63  set callback {-c
4480: 61 6c 6c 62 61 63 6b 66 6c 61 67 73 20 7b 2b 44  allbackflags {+D
4490: 65 66 61 75 6c 74 20 54 68 72 6f 77 4f 6e 45 72  efault ThrowOnEr
44a0: 72 6f 72 7d 20 72 65 61 64 56 61 6c 75 65 43 61  ror} readValueCa
44b0: 6c 6c 62 61 63 6b 31 7d 0d 0a 20 20 73 65 74 20  llback1}..  set 
44c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
44d0: 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a  bConnection]....
44e0: 20 20 73 65 74 20 74 79 70 65 43 61 6c 6c 62 61    set typeCallba
44f0: 63 6b 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  cks [object invo
4500: 6b 65 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73  ke -marshalflags
4510: 20 2b 44 79 6e 61 6d 69 63 43 61 6c 6c 62 61 63   +DynamicCallbac
4520: 6b 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  k \..      Syste
4530: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
4540: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
4550: 73 20 43 72 65 61 74 65 20 6e 75 6c 6c 20 24 63  s Create null $c
4560: 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20 20 20 20  allback \..     
4570: 20 6e 75 6c 6c 20 33 5d 0d 0a 0d 0a 20 20 24 63   null 3]....  $c
4580: 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74 54 79 70  onnection SetTyp
4590: 65 43 61 6c 6c 62 61 63 6b 73 20 53 50 45 43 49  eCallbacks SPECI
45a0: 41 4c 20 24 74 79 70 65 43 61 6c 6c 62 61 63 6b  AL $typeCallback
45b0: 73 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  s....  set resul
45c0: 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61  t [list]....  la
45d0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
45e0: 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65  tch {..    sql e
45f0: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
4600: 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
4610: 69 73 74 20 24 64 62 20 7b 53 45 4c 45 43 54 20  ist $db {SELECT 
4620: 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  * FROM t1 ORDER 
4630: 42 59 20 78 3b 7d 0d 0a 20 20 7d 20 65 72 72 6f  BY x;}..  } erro
4640: 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  r]....  lappend 
4650: 72 65 73 75 6c 74 20 5b 65 78 74 72 61 63 74 53  result [extractS
4660: 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
4670: 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20  xceptionMessage 
4680: 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70  $error]....  lap
4690: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
46a0: 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78  ch {..    sql ex
46b0: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
46c0: 63 61 6c 61 72 20 24 64 62 20 7b 53 45 4c 45 43  calar $db {SELEC
46d0: 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20  T COUNT(*) FROM 
46e0: 74 31 3b 7d 0d 0a 20 20 7d 20 65 72 72 6f 72 5d  t1;}..  } error]
46f0: 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
4700: 73 75 6c 74 20 5b 65 78 74 72 61 63 74 53 79 73  sult [extractSys
4710: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
4720: 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65  eptionMessage $e
4730: 72 72 6f 72 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  rror]..  lappend
4740: 20 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 5b   result [expr {[
4750: 69 6e 66 6f 20 65 78 69 73 74 73 20 6c 6f 67 28  info exists log(
4760: 72 65 61 64 29 5d 20 3f 20 24 6c 6f 67 28 72 65  read)] ? $log(re
4770: 61 64 29 20 3a 20 22 3c 4d 49 53 53 49 4e 47 3e  ad) : "<MISSING>
4780: 22 7d 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  "}]....  set res
4790: 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
47a0: 7b 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a 65  {..  catch {obje
47b0: 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63  ct removecallbac
47c0: 6b 20 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d 0a  k $callback}....
47d0: 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69    freeDbConnecti
47e0: 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  on....  cleanupD
47f0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
4800: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
4810: 69 6e 20 65 72 72 6f 72 20 72 65 73 75 6c 74 20  in error result 
4820: 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 63 61  typeCallbacks ca
4830: 6c 6c 62 61 63 6b 20 6c 6f 67 20 63 6f 6e 6e 65  llback log conne
4840: 63 74 69 6f 6e 20 64 62 20 5c 0d 0a 20 20 20 20  ction db \..    
4850: 20 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63    fileName..} -c
4860: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
4870: 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
4880: 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
4890: 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
48a0: 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73  ATA SQLite\..Sys
48b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
48c0: 20 2d 72 65 73 75 6c 74 20 7b 31 20 7b 72 65 61   -result {1 {rea
48d0: 64 69 6e 67 20 6f 66 20 76 61 6c 75 65 20 63 61  ding of value ca
48e0: 6e 63 65 6c 65 64 7d 20 30 20 31 20 7b 7b 63 6f  nceled} 0 1 {{co
48f0: 6e 76 65 72 74 20 74 72 75 65 7d 5c 0d 0a 7b 64  nvert true}\..{d
4900: 61 74 61 52 65 61 64 65 72 20 74 72 75 65 7d 20  ataReader true} 
4910: 7b 66 6c 61 67 73 20 55 73 65 43 6f 6e 6e 65 63  {flags UseConnec
4920: 74 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c  tionReadValueCal
4930: 6c 62 61 63 6b 73 7d 20 7b 65 76 65 6e 74 41 72  lbacks} {eventAr
4940: 67 73 20 74 72 75 65 7d 5c 0d 0a 7b 74 79 70 65  gs true}\..{type
4950: 4e 61 6d 65 20 53 50 45 43 49 41 4c 7d 20 7b 69  Name SPECIAL} {i
4960: 6e 64 65 78 20 30 7d 20 7b 75 73 65 72 44 61 74  ndex 0} {userDat
4970: 61 20 33 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23  a 3}}}}....#####
4980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
49a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
49b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
49c0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
49d0: 6e 54 65 73 74 20 7b 74 65 73 74 20 74 79 70 65  nTest {test type
49e0: 73 2d 35 2e 31 20 7b 62 69 6e 64 20 63 61 6c 6c  s-5.1 {bind call
49f0: 62 61 63 6b 20 28 65 78 63 65 70 74 69 6f 6e 29  back (exception)
4a00: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75 6e  } -setup {..  un
4a10: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
4a20: 6c 6f 67 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62  log....  setupDb
4a30: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 74   [set fileName t
4a40: 79 70 65 73 2d 35 2e 31 2e 64 62 5d 20 22 22 20  ypes-5.1.db] "" 
4a50: 22 22 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 22  "" "" \..      "
4a60: 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 42 69 6e  UseConnectionBin
4a70: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 73 20  dValueCallbacks 
4a80: 55 73 65 50 61 72 61 6d 65 74 65 72 4e 61 6d 65  UseParameterName
4a90: 46 6f 72 54 79 70 65 4e 61 6d 65 22 0d 0a 7d 20  ForTypeName"..} 
4aa0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
4ab0: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
4ac0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4ad0: 31 28 78 20 53 50 45 43 49 41 4c 29 3b 0d 0a 20  1(x SPECIAL);.. 
4ae0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 61 6c 6c   }....  set call
4af0: 62 61 63 6b 20 7b 2d 63 61 6c 6c 62 61 63 6b 66  back {-callbackf
4b00: 6c 61 67 73 20 7b 2b 44 65 66 61 75 6c 74 20 54  lags {+Default T
4b10: 68 72 6f 77 4f 6e 45 72 72 6f 72 7d 20 62 69 6e  hrowOnError} bin
4b20: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 31 7d  dValueCallback1}
4b30: 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69  ..  set connecti
4b40: 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74  on [getDbConnect
4b50: 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 74 79  ion]....  set ty
4b60: 70 65 43 61 6c 6c 62 61 63 6b 73 20 5b 6f 62 6a  peCallbacks [obj
4b70: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6d 61 72 73  ect invoke -mars
4b80: 68 61 6c 66 6c 61 67 73 20 2b 44 79 6e 61 6d 69  halflags +Dynami
4b90: 63 43 61 6c 6c 62 61 63 6b 20 5c 0d 0a 20 20 20  cCallback \..   
4ba0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
4bb0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 54 79 70 65  QLite.SQLiteType
4bc0: 43 61 6c 6c 62 61 63 6b 73 20 43 72 65 61 74 65  Callbacks Create
4bd0: 20 24 63 61 6c 6c 62 61 63 6b 20 6e 75 6c 6c 20   $callback null 
4be0: 5c 0d 0a 20 20 20 20 20 20 33 20 6e 75 6c 6c 5d  \..      3 null]
4bf0: 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f  ....  $connectio
4c00: 6e 20 53 65 74 54 79 70 65 43 61 6c 6c 62 61 63  n SetTypeCallbac
4c10: 6b 73 20 53 50 45 43 49 41 4c 20 24 74 79 70 65  ks SPECIAL $type
4c20: 43 61 6c 6c 62 61 63 6b 73 0d 0a 0d 0a 20 20 63  Callbacks....  c
4c30: 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20  atch {..    sql 
4c40: 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
4c50: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4c60: 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 3f   t1 (x) VALUES(?
4c70: 29 3b 0d 0a 20 20 20 20 7d 20 5b 6c 69 73 74 20  );..    } [list 
4c80: 53 70 65 63 69 61 6c 20 49 6e 74 36 34 20 34 33  Special Int64 43
4c90: 32 31 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  21]..  }....  se
4ca0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
4cb0: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
4cc0: 75 6c 74 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  ult [expr {..   
4cd0: 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6c 6f   [info exists lo
4ce0: 67 28 62 69 6e 64 29 5d 20 3f 20 24 6c 6f 67 28  g(bind)] ? $log(
4cf0: 62 69 6e 64 29 20 3a 20 22 3c 4d 49 53 53 49 4e  bind) : "<MISSIN
4d00: 47 3e 22 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6c  G>"..  }]....  l
4d10: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
4d20: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
4d30: 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d  ute reader -form
4d40: 61 74 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20  at list $db \.. 
4d50: 20 20 20 20 20 22 53 45 4c 45 43 54 20 2a 20 46       "SELECT * F
4d60: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
4d70: 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  x;"]....  set re
4d80: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
4d90: 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a   {..  catch {obj
4da0: 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62 61  ect removecallba
4db0: 63 6b 20 24 63 61 6c 6c 62 61 63 6b 7d 0d 0a 0d  ck $callback}...
4dc0: 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
4dd0: 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ion....  cleanup
4de0: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
4df0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
4e00: 61 69 6e 20 72 65 73 75 6c 74 20 74 79 70 65 43  ain result typeC
4e10: 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62 61 63  allbacks callbac
4e20: 6b 20 6c 6f 67 20 63 6f 6e 6e 65 63 74 69 6f 6e  k log connection
4e30: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
4e40: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
4e50: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
4e60: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
4e70: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
4e80: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
4e90: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
4ea0: 65 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 7b 63 6f  e} -result {{{co
4eb0: 6e 76 65 72 74 20 74 72 75 65 7d 20 7b 63 6f 6d  nvert true} {com
4ec0: 6d 61 6e 64 20 74 72 75 65 7d 20 7b 66 6c 61 67  mand true} {flag
4ed0: 73 5c 0d 0a 7b 55 73 65 43 6f 6e 6e 65 63 74 69  s\..{UseConnecti
4ee0: 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62  onBindValueCallb
4ef0: 61 63 6b 73 2c 20 55 73 65 50 61 72 61 6d 65 74  acks, UseParamet
4f00: 65 72 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d  erNameForTypeNam
4f10: 65 7d 7d 20 7b 70 61 72 61 6d 65 74 65 72 5c 0d  e}} {parameter\.
4f20: 0a 74 72 75 65 7d 20 7b 74 79 70 65 4e 61 6d 65  .true} {typeName
4f30: 20 53 70 65 63 69 61 6c 7d 20 7b 69 6e 64 65 78   Special} {index
4f40: 20 31 7d 20 7b 75 73 65 72 44 61 74 61 20 33 7d   1} {userData 3}
4f50: 7d 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  } {}}}....######
4f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4fa0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 63 61 74  #########....cat
4fb0: 63 68 20 7b 65 76 61 6c 20 6f 62 6a 65 63 74 20  ch {eval object 
4fc0: 64 69 73 70 6f 73 65 20 5b 69 6e 66 6f 20 6f 62  dispose [info ob
4fd0: 6a 65 63 74 73 20 53 79 73 74 65 6d 23 42 6f 6f  jects System#Boo
4fe0: 6c 65 61 6e 23 2a 5d 7d 0d 0a 0d 0a 23 23 23 23  lean#*]}....####
4ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5030: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
5040: 65 6e 61 6d 65 20 72 65 61 64 56 61 6c 75 65 43  ename readValueC
5050: 61 6c 6c 62 61 63 6b 31 20 22 22 0d 0a 72 65 6e  allback1 ""..ren
5060: 61 6d 65 20 62 69 6e 64 56 61 6c 75 65 43 61 6c  ame bindValueCal
5070: 6c 62 61 63 6b 31 20 22 22 0d 0a 0d 0a 23 23 23  lback1 ""....###
5080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
50a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
50b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
50c0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
50d0: 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69  runSQLiteTestEpi
50e0: 6c 6f 67 75 65 0d 0a 72 75 6e 54 65 73 74 45 70  logue..runTestEp
50f0: 69 6c 6f 67 75 65 0d 0a                          ilogue..