System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact cb7f21de16b5349fd2bed5c522dbd8f5a99a4477:


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 62 61 73 69 63 2e 65 61 67 6c  .#..# basic.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 72  eTestPrologue..r
0210: 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65  unSQLiteTestFile
0220: 73 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23  sPrologue....###
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
0280: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
0290: 74 61 2d 31 2e 31 20 7b 75 6e 69 74 20 74 65 73  ta-1.1 {unit tes
02a0: 74 73 20 66 72 6f 6d 20 74 68 65 20 27 74 65 73  ts from the 'tes
02b0: 74 27 20 70 72 6f 6a 65 63 74 7d 20 2d 73 65 74  t' project} -set
02c0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 46  up {..  cleanupF
02d0: 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ile [file join [
02e0: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 65  file dirname $te
02f0: 73 74 45 78 65 46 69 6c 65 5d 20 54 65 73 74 2e  stExeFile] Test.
0300: 64 62 33 5d 0d 0a 20 20 73 65 74 20 66 69 6c 65  db3]..  set file
0310: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join 
0320: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
0330: 63 74 6f 72 79 5d 20 64 61 74 61 2d 31 2e 31 2e  ctory] data-1.1.
0340: 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
0350: 20 20 73 65 74 20 6f 75 74 70 75 74 20 22 22 0d    set output "".
0360: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
0370: 61 74 63 68 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  atch {..    #.. 
0380: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 74     # NOTE: For t
0390: 68 65 20 73 61 6b 65 20 6f 66 20 62 61 63 6b 77  he sake of backw
03a0: 61 72 64 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ard compatibilit
03b0: 79 2c 20 74 68 65 20 22 2d 61 75 74 6f 52 75 6e  y, the "-autoRun
03c0: 22 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20 20 20  " argument..    
03d0: 23 20 20 20 20 20 20 20 6d 75 73 74 20 62 65 20  #       must be 
03e0: 66 69 72 73 74 2e 0d 0a 20 20 20 20 23 0d 0a 20  first...    #.. 
03f0: 20 20 20 74 65 73 74 43 6c 72 45 78 65 63 20 24     testClrExec $
0400: 74 65 73 74 45 78 65 46 69 6c 65 20 5b 6c 69 73  testExeFile [lis
0410: 74 20 2d 65 76 65 6e 74 66 6c 61 67 73 20 57 61  t -eventflags Wa
0420: 69 74 20 2d 64 69 72 65 63 74 6f 72 79 20 5c 0d  it -directory \.
0430: 0a 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64  .        [file d
0440: 69 72 6e 61 6d 65 20 24 74 65 73 74 45 78 65 46  irname $testExeF
0450: 69 6c 65 5d 20 2d 73 74 64 6f 75 74 20 6f 75 74  ile] -stdout out
0460: 70 75 74 20 2d 73 75 63 63 65 73 73 20 53 75 63  put -success Suc
0470: 63 65 73 73 5d 20 5c 0d 0a 20 20 20 20 20 20 20  cess] \..       
0480: 20 2d 61 75 74 6f 52 75 6e 20 2d 66 69 6c 65 4e   -autoRun -fileN
0490: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ame [appendArgs 
04a0: 5c 22 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  \" [file nativen
04b0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5c  ame $fileName] \
04c0: 22 5d 0d 0a 20 20 7d 20 65 72 72 6f 72 5d 0d 0a  "]..  } error]..
04d0: 0d 0a 20 20 73 65 74 20 73 75 63 63 65 73 73 43  ..  set successC
04e0: 6f 75 6e 74 20 5b 72 65 67 65 78 70 20 2d 61 6c  ount [regexp -al
04f0: 6c 20 2d 2d 20 7b 5c 74 53 75 63 63 65 65 64 65  l -- {\tSucceede
0500: 64 5c 74 7d 20 24 6f 75 74 70 75 74 5d 0d 0a 20  d\t} $output].. 
0510: 20 73 65 74 20 66 61 69 6c 75 72 65 43 6f 75 6e   set failureCoun
0520: 74 20 5b 72 65 67 65 78 70 20 2d 61 6c 6c 20 2d  t [regexp -all -
0530: 2d 20 7b 5c 74 46 61 69 6c 65 64 5c 74 7d 20 24  - {\tFailed\t} $
0540: 6f 75 74 70 75 74 5d 0d 0a 20 20 73 65 74 20 74  output]..  set t
0550: 6f 74 61 6c 43 6f 75 6e 74 20 5b 65 78 70 72 20  otalCount [expr 
0560: 7b 24 73 75 63 63 65 73 73 43 6f 75 6e 74 20 2b  {$successCount +
0570: 20 24 66 61 69 6c 75 72 65 43 6f 75 6e 74 7d 5d   $failureCount}]
0580: 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73  ....  tputs $tes
0590: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
05a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22  dArgs \..      "
05b0: 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 6e 64 20 65  ---- found and e
05c0: 78 65 63 75 74 65 64 20 22 20 24 74 6f 74 61 6c  xecuted " $total
05d0: 43 6f 75 6e 74 20 22 20 75 6e 69 74 20 74 65 73  Count " unit tes
05e0: 74 73 20 66 72 6f 6d 20 5c 22 22 20 5c 0d 0a 20  ts from \"" \.. 
05f0: 20 20 20 20 20 24 74 65 73 74 45 78 65 46 69 6c       $testExeFil
0600: 65 20 22 5c 22 2c 20 22 20 24 73 75 63 63 65 73  e "\", " $succes
0610: 73 43 6f 75 6e 74 20 22 20 70 61 73 73 65 64 2c  sCount " passed,
0620: 20 22 20 24 66 61 69 6c 75 72 65 43 6f 75 6e 74   " $failureCount
0630: 20 5c 0d 0a 20 20 20 20 20 20 22 20 66 61 69 6c   \..      " fail
0640: 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 74 6c 6f 67  ed\n"]....  tlog
0650: 20 22 2d 2d 2d 2d 20 42 45 47 49 4e 20 53 54 44   "---- BEGIN STD
0660: 4f 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 20  OUT OUTPUT\n".. 
0670: 20 74 6c 6f 67 20 24 6f 75 74 70 75 74 0d 0a 20   tlog $output.. 
0680: 20 74 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d 20 45 4e   tlog "\n---- EN
0690: 44 20 53 54 44 4f 55 54 20 4f 55 54 50 55 54 5c  D STDOUT OUTPUT\
06a0: 6e 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  n"....  list $co
06b0: 64 65 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20  de [expr {$code 
06c0: 3d 3d 20 30 20 3f 20 22 22 20 3a 20 24 65 72 72  == 0 ? "" : $err
06d0: 6f 72 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  or}]..} -cleanup
06e0: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 46 69 6c   {..  cleanupFil
06f0: 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  e $fileName.... 
0700: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
0710: 69 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 20 66 61  in totalCount fa
0720: 69 6c 75 72 65 43 6f 75 6e 74 20 73 75 63 63 65  ilureCount succe
0730: 73 73 43 6f 75 6e 74 20 63 6f 64 65 20 6f 75 74  ssCount code out
0740: 70 75 74 20 5c 0d 0a 20 20 20 20 20 20 65 72 72  put \..      err
0750: 6f 72 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  or fileName..} -
0760: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
0770: 6c 65 20 53 51 4c 69 74 65 20 66 69 6c 65 5f 53  le SQLite file_S
0780: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
0790: 65 2e 64 6c 6c 20 66 69 6c 65 5f 74 65 73 74 2e  e.dll file_test.
07a0: 65 78 65 5c 0d 0a 74 65 73 74 45 78 65 63 20 77  exe\..testExec w
07b0: 69 6e 46 6f 72 6d 73 7d 20 2d 72 65 73 75 6c 74  inForms} -result
07c0: 20 7b 30 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23   {0 {}}}....####
07d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
07e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
07f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0810: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
0820: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
0830: 61 2d 31 2e 32 20 7b 75 6e 69 74 20 74 65 73 74  a-1.2 {unit test
0840: 73 20 66 72 6f 6d 20 74 68 65 20 27 74 65 73 74  s from the 'test
0850: 6c 69 6e 71 27 20 70 72 6f 6a 65 63 74 7d 20 2d  linq' project} -
0860: 73 65 74 75 70 20 7b 0d 0a 20 20 63 6f 70 79 53  setup {..  copyS
0870: 61 6d 70 6c 65 44 61 74 61 62 61 73 65 46 69 6c  ampleDatabaseFil
0880: 65 73 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e  es....  #..  # N
0890: 4f 54 45 3a 20 57 65 20 6e 65 65 64 20 74 6f 20  OTE: We need to 
08a0: 6d 61 6b 65 20 31 30 30 25 20 73 75 72 65 20 74  make 100% sure t
08b0: 68 61 74 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20  hat the console 
08c0: 6f 75 74 70 75 74 20 65 6e 63 6f 64 69 6e 67 20  output encoding 
08d0: 69 73 20 74 68 65 0d 0a 20 20 23 20 20 20 20 20  is the..  #     
08e0: 20 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74    same as when t
08f0: 68 65 20 27 74 65 73 74 6c 69 6e 71 2e 6f 75 74  he 'testlinq.out
0900: 27 20 66 69 6c 65 20 77 61 73 20 63 72 65 61 74  ' file was creat
0910: 65 64 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20  ed...  #..  set 
0920: 73 61 76 65 64 45 6e 63 6f 64 69 6e 67 20 5b 6f  savedEncoding [o
0930: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e  bject invoke Con
0940: 73 6f 6c 65 20 4f 75 74 70 75 74 45 6e 63 6f 64  sole OutputEncod
0950: 69 6e 67 5d 0d 0a 20 20 73 65 74 20 65 6e 63 6f  ing]..  set enco
0960: 64 69 6e 67 20 5b 6f 62 6a 65 63 74 20 69 6e 76  ding [object inv
0970: 6f 6b 65 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  oke System.Text.
0980: 45 6e 63 6f 64 69 6e 67 20 47 65 74 45 6e 63 6f  Encoding GetEnco
0990: 64 69 6e 67 20 57 69 6e 64 6f 77 73 2d 31 32 35  ding Windows-125
09a0: 32 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69  2]....  object i
09b0: 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65 20 4f 75  nvoke Console Ou
09c0: 74 70 75 74 45 6e 63 6f 64 69 6e 67 20 24 65 6e  tputEncoding $en
09d0: 63 6f 64 69 6e 67 0d 0a 7d 20 2d 62 6f 64 79 20  coding..} -body 
09e0: 7b 0d 0a 20 20 73 65 74 20 6f 75 74 70 75 74 20  {..  set output 
09f0: 22 22 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65  ""....  set code
0a00: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 74   [catch {..    t
0a10: 65 73 74 43 6c 72 45 78 65 63 20 24 74 65 73 74  estClrExec $test
0a20: 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 6c 69 73  LinqExeFile [lis
0a30: 74 20 2d 65 76 65 6e 74 66 6c 61 67 73 20 57 61  t -eventflags Wa
0a40: 69 74 20 2d 64 69 72 65 63 74 6f 72 79 20 5c 0d  it -directory \.
0a50: 0a 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64  .        [file d
0a60: 69 72 6e 61 6d 65 20 24 74 65 73 74 4c 69 6e 71  irname $testLinq
0a70: 45 78 65 46 69 6c 65 5d 20 2d 73 74 64 6f 75 74  ExeFile] -stdout
0a80: 20 6f 75 74 70 75 74 20 2d 73 75 63 63 65 73 73   output -success
0a90: 20 53 75 63 63 65 73 73 5d 0d 0a 20 20 7d 20 65   Success]..  } e
0aa0: 72 72 6f 72 5d 0d 0a 0d 0a 20 20 74 6c 6f 67 20  rror]....  tlog 
0ab0: 22 2d 2d 2d 2d 20 42 45 47 49 4e 20 53 54 44 4f  "---- BEGIN STDO
0ac0: 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 20 20  UT OUTPUT\n"..  
0ad0: 74 6c 6f 67 20 24 6f 75 74 70 75 74 0d 0a 20 20  tlog $output..  
0ae0: 74 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d 20 45 4e 44  tlog "\n---- END
0af0: 20 53 54 44 4f 55 54 20 4f 55 54 50 55 54 5c 6e   STDOUT OUTPUT\n
0b00: 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  "....  list $cod
0b10: 65 20 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20  e [string equal 
0b20: 24 6f 75 74 70 75 74 20 5b 72 65 61 64 46 69 6c  $output [readFil
0b30: 65 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69  e $testLinqOutFi
0b40: 6c 65 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  le]] \..      [e
0b50: 78 70 72 20 7b 24 63 6f 64 65 20 3d 3d 20 30 20  xpr {$code == 0 
0b60: 3f 20 22 22 20 3a 20 24 65 72 72 6f 72 7d 5d 0d  ? "" : $error}].
0b70: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
0b80: 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69   catch {object i
0b90: 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65 20 4f 75  nvoke Console Ou
0ba0: 74 70 75 74 45 6e 63 6f 64 69 6e 67 20 24 73 61  tputEncoding $sa
0bb0: 76 65 64 45 6e 63 6f 64 69 6e 67 7d 0d 0a 0d 0a  vedEncoding}....
0bc0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
0bd0: 61 69 6e 20 63 6f 64 65 20 6f 75 74 70 75 74 20  ain code output 
0be0: 65 72 72 6f 72 20 73 61 76 65 64 45 6e 63 6f 64  error savedEncod
0bf0: 69 6e 67 20 65 6e 63 6f 64 69 6e 67 0d 0a 7d 20  ing encoding..} 
0c00: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
0c10: 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
0c20: 62 6a 65 63 74 20 6d 6f 6e 6f 54 6f 44 6f 20 53  bject monoToDo S
0c30: 51 4c 69 74 65 20 66 69 6c 65 5f 53 79 73 74 65  QLite file_Syste
0c40: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
0c50: 6c 5c 0d 0a 66 69 6c 65 5f 53 79 73 74 65 6d 2e  l\..file_System.
0c60: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
0c70: 2e 64 6c 6c 20 66 69 6c 65 5f 74 65 73 74 6c 69  .dll file_testli
0c80: 6e 71 2e 65 78 65 20 66 69 6c 65 5f 6e 6f 72 74  nq.exe file_nort
0c90: 68 77 69 6e 64 45 46 2e 64 62 5c 0d 0a 66 69 6c  hwindEF.db\..fil
0ca0: 65 5f 74 65 73 74 6c 69 6e 71 2e 6f 75 74 20 74  e_testlinq.out t
0cb0: 65 73 74 45 78 65 63 7d 20 2d 72 65 73 75 6c 74  estExec} -result
0cc0: 20 7b 30 20 54 72 75 65 20 7b 7d 7d 7d 0d 0a 0d   {0 True {}}}...
0cd0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
0ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0d20: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
0d30: 74 20 64 61 74 61 2d 31 2e 33 20 7b 75 6e 69 74  t data-1.3 {unit
0d40: 20 74 65 73 74 73 20 66 72 6f 6d 20 74 68 65 20   tests from the 
0d50: 27 74 65 73 74 65 66 36 27 20 70 72 6f 6a 65 63  'testef6' projec
0d60: 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 63  t} -setup {..  c
0d70: 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 62 61 73  opySampleDatabas
0d80: 65 46 69 6c 65 73 0d 0a 0d 0a 20 20 23 0d 0a 20  eFiles....  #.. 
0d90: 20 23 20 4e 4f 54 45 3a 20 57 65 20 6e 65 65 64   # NOTE: We need
0da0: 20 74 6f 20 6d 61 6b 65 20 31 30 30 25 20 73 75   to make 100% su
0db0: 72 65 20 74 68 61 74 20 74 68 65 20 63 6f 6e 73  re that the cons
0dc0: 6f 6c 65 20 6f 75 74 70 75 74 20 65 6e 63 6f 64  ole output encod
0dd0: 69 6e 67 20 69 73 20 74 68 65 0d 0a 20 20 23 20  ing is the..  # 
0de0: 20 20 20 20 20 20 73 61 6d 65 20 61 73 20 77 68        same as wh
0df0: 65 6e 20 74 68 65 20 27 74 65 73 74 6c 69 6e 71  en the 'testlinq
0e00: 2e 6f 75 74 27 20 66 69 6c 65 20 77 61 73 20 63  .out' file was c
0e10: 72 65 61 74 65 64 2e 0d 0a 20 20 23 0d 0a 20 20  reated...  #..  
0e20: 73 65 74 20 73 61 76 65 64 45 6e 63 6f 64 69 6e  set savedEncodin
0e30: 67 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  g [object invoke
0e40: 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75 74 45   Console OutputE
0e50: 6e 63 6f 64 69 6e 67 5d 0d 0a 20 20 73 65 74 20  ncoding]..  set 
0e60: 65 6e 63 6f 64 69 6e 67 20 5b 6f 62 6a 65 63 74  encoding [object
0e70: 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 54   invoke System.T
0e80: 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 47 65 74  ext.Encoding Get
0e90: 45 6e 63 6f 64 69 6e 67 20 57 69 6e 64 6f 77 73  Encoding Windows
0ea0: 2d 31 32 35 32 5d 0d 0a 0d 0a 20 20 6f 62 6a 65  -1252]....  obje
0eb0: 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c  ct invoke Consol
0ec0: 65 20 4f 75 74 70 75 74 45 6e 63 6f 64 69 6e 67  e OutputEncoding
0ed0: 20 24 65 6e 63 6f 64 69 6e 67 0d 0a 7d 20 2d 62   $encoding..} -b
0ee0: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 6f 75 74  ody {..  set out
0ef0: 70 75 74 20 22 22 0d 0a 0d 0a 20 20 73 65 74 20  put ""....  set 
0f00: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20  code [catch {.. 
0f10: 20 20 20 74 65 73 74 43 6c 72 45 78 65 63 20 24     testClrExec $
0f20: 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 5b  testEf6ExeFile [
0f30: 6c 69 73 74 20 2d 65 76 65 6e 74 66 6c 61 67 73  list -eventflags
0f40: 20 57 61 69 74 20 2d 64 69 72 65 63 74 6f 72 79   Wait -directory
0f50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 66 69 6c   \..        [fil
0f60: 65 20 64 69 72 6e 61 6d 65 20 24 74 65 73 74 45  e dirname $testE
0f70: 66 36 45 78 65 46 69 6c 65 5d 20 2d 73 74 64 6f  f6ExeFile] -stdo
0f80: 75 74 20 6f 75 74 70 75 74 20 2d 73 75 63 63 65  ut output -succe
0f90: 73 73 20 53 75 63 63 65 73 73 5d 0d 0a 20 20 7d  ss Success]..  }
0fa0: 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 74 6c 6f   error]....  tlo
0fb0: 67 20 22 2d 2d 2d 2d 20 42 45 47 49 4e 20 53 54  g "---- BEGIN ST
0fc0: 44 4f 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a  DOUT OUTPUT\n"..
0fd0: 20 20 74 6c 6f 67 20 24 6f 75 74 70 75 74 0d 0a    tlog $output..
0fe0: 20 20 74 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d 20 45    tlog "\n---- E
0ff0: 4e 44 20 53 54 44 4f 55 54 20 4f 55 54 50 55 54  ND STDOUT OUTPUT
1000: 5c 6e 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  \n"....  list $c
1010: 6f 64 65 20 5b 73 74 72 69 6e 67 20 65 71 75 61  ode [string equa
1020: 6c 20 24 6f 75 74 70 75 74 20 5b 72 65 61 64 46  l $output [readF
1030: 69 6c 65 20 24 74 65 73 74 4c 69 6e 71 4f 75 74  ile $testLinqOut
1040: 46 69 6c 65 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  File]] \..      
1050: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 3d 3d 20  [expr {$code == 
1060: 30 20 3f 20 22 22 20 3a 20 24 65 72 72 6f 72 7d  0 ? "" : $error}
1070: 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
1080: 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74  .  catch {object
1090: 20 69 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65 20   invoke Console 
10a0: 4f 75 74 70 75 74 45 6e 63 6f 64 69 6e 67 20 24  OutputEncoding $
10b0: 73 61 76 65 64 45 6e 63 6f 64 69 6e 67 7d 0d 0a  savedEncoding}..
10c0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
10d0: 70 6c 61 69 6e 20 63 6f 64 65 20 6f 75 74 70 75  plain code outpu
10e0: 74 20 65 72 72 6f 72 20 73 61 76 65 64 45 6e 63  t error savedEnc
10f0: 6f 64 69 6e 67 20 65 6e 63 6f 64 69 6e 67 0d 0a  oding encoding..
1100: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
1110: 0d 0a 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  ..{eagle command
1120: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 54 6f 44 6f  .object monoToDo
1130: 20 53 51 4c 69 74 65 20 66 69 6c 65 5f 45 6e 74   SQLite file_Ent
1140: 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c  ityFramework.dll
1150: 5c 0d 0a 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44  \..file_System.D
1160: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 66  ata.SQLite.dll f
1170: 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e  ile_System.Data.
1180: 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66  SQLite.EF6.dll f
1190: 69 6c 65 5f 74 65 73 74 65 66 36 2e 65 78 65 5c  ile_testef6.exe\
11a0: 0d 0a 66 69 6c 65 5f 6e 6f 72 74 68 77 69 6e 64  ..file_northwind
11b0: 45 46 2e 64 62 20 66 69 6c 65 5f 74 65 73 74 6c  EF.db file_testl
11c0: 69 6e 71 2e 6f 75 74 20 74 65 73 74 45 78 65 63  inq.out testExec
11d0: 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 54 72 75  } -result {0 Tru
11e0: 65 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  e {}}}....######
11f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1230: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
1240: 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
1250: 31 2e 34 20 7b 53 45 4c 45 43 54 20 73 63 61 6c  1.4 {SELECT scal
1260: 61 72 2f 72 65 61 64 65 72 2c 20 43 52 45 41 54  ar/reader, CREAT
1270: 45 2c 20 49 4e 53 45 52 54 7d 20 2d 73 65 74 75  E, INSERT} -setu
1280: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
1290: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
12a0: 61 2d 31 2e 34 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  a-1.4.db]..} -bo
12b0: 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75  dy {..  set resu
12c0: 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c  lt [list]....  l
12d0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
12e0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
12f0: 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
1300: 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
1310: 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f 69 64  sqlite_source_id
1320: 28 29 3b 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  ();"]....  sql e
1330: 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41  xecute $db "CREA
1340: 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e  TE TABLE t1(x IN
1350: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1360: 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 22 0d 0a  Y ASC, y, z);"..
1370: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
1380: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
1390: 31 20 28 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55  1 (x, y, z) VALU
13a0: 45 53 28 31 2c 20 27 66 6f 6f 27 2c 20 31 32 33  ES(1, 'foo', 123
13b0: 34 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  4);"....  sql ex
13c0: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72  ecute -execute r
13d0: 65 61 64 65 72 20 24 64 62 20 22 53 45 4c 45 43  eader $db "SELEC
13e0: 54 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20 74  T x, y, z FROM t
13f0: 31 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68  1;"....  foreach
1400: 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 5b 61 72   name [lsort [ar
1410: 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73 5d 5d  ray names rows]]
1420: 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
1430: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61  result [list $na
1440: 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d  me $rows($name)]
1450: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72  ..  }....  set r
1460: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
1470: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
1480: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
1490: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
14a0: 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73 75  n name rows resu
14b0: 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  lt db fileName..
14c0: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
14d0: 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  ..{eagle monoBug
14e0: 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
14f0: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
1500: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
1510: 51 4c 69 74 65 7d 20 5c 0d 0a 2d 6d 61 74 63 68  QLite} \..-match
1520: 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20   regexp -result 
1530: 7b 5e 5c 7b 5c 64 7b 34 7d 2d 5c 64 7b 32 7d 2d  {^\{\d{4}-\d{2}-
1540: 5c 64 7b 32 7d 20 5c 64 7b 32 7d 3a 5c 64 7b 32  \d{2} \d{2}:\d{2
1550: 7d 3a 5c 64 7b 32 7d 20 5b 30 2d 39 61 2d 66 5d  }:\d{2} [0-9a-f]
1560: 7b 34 30 2c 36 34 7d 5c 7d 5c 0d 0a 5c 7b 31 20  {40,64}\}\..\{1 
1570: 5c 7b 5c 7b 78 20 31 5c 7d 20 5c 7b 79 20 66 6f  \{\{x 1\} \{y fo
1580: 6f 5c 7d 20 5c 7b 7a 20 31 32 33 34 5c 7d 5c 7d  o\} \{z 1234\}\}
1590: 5c 7d 20 5c 7b 63 6f 75 6e 74 20 31 5c 7d 20 5c  \} \{count 1\} \
15a0: 7b 6e 61 6d 65 73 20 5c 7b 78 20 79 20 7a 5c 7d  {names \{x y z\}
15b0: 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  \}$}}....#######
15c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1600: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
1610: 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
1620: 2e 35 20 7b 47 65 74 53 63 68 65 6d 61 20 77 69  .5 {GetSchema wi
1630: 74 68 20 52 65 73 65 72 76 65 64 57 6f 72 64 73  th ReservedWords
1640: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
1650: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
1660: 61 6d 65 20 64 61 74 61 2d 31 2e 35 2e 64 62 5d  ame data-1.5.db]
1670: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
1680: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
1690: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
16a0: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
16b0: 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f  d]..  set dataSo
16c0: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
16d0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
16e0: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
16f0: 5d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  ]....  unset -no
1700: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
1710: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
1720: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
1730: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
1740: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
1750: 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75  tem.Data;..    u
1760: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
1770: 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20  .SQLite;....    
1780: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
1790: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
17a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
17b0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
17c0: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
17d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
17e0: 74 69 63 20 44 61 74 61 54 61 62 6c 65 20 47 65  tic DataTable Ge
17f0: 74 52 65 73 65 72 76 65 64 57 6f 72 64 73 28 29  tReservedWords()
1800: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1810: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1820: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
1830: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
1840: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1850: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1860: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
1870: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
1880: 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22  TestProperties]"
1890: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
18a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
18b0: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
18c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
18d0: 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  eturn connection
18e0: 2e 47 65 74 53 63 68 65 6d 61 28 22 52 65 73 65  .GetSchema("Rese
18f0: 72 76 65 64 57 6f 72 64 73 22 29 3b 0d 0a 20 20  rvedWords");..  
1900: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1910: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1970: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1980: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
1990: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19a0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
19b0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
19c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
19d0: 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74 72  }] true false tr
19e0: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
19f0: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
1a00: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
1a10: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
1a20: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
1a30: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
1a40: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
1a50: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
1a60: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
1a70: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
1a80: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
1a90: 74 20 69 6e 76 6f 6b 65 20 2d 61 6c 69 61 73 20  t invoke -alias 
1aa0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
1ab0: 73 74 24 7b 69 64 7d 20 47 65 74 52 65 73 65 72  st${id} GetReser
1ac0: 76 65 64 57 6f 72 64 73 0d 0a 20 20 20 20 20 20  vedWords..      
1ad0: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
1ae0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
1af0: 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61  esult [string ma
1b00: 70 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  p [list \..     
1b10: 20 5c 7b 5c 7b 20 22 22 20 5c 7d 5c 7d 20 22 22   \{\{ "" \}\} ""
1b20: 5d 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c  ] [string map [l
1b30: 69 73 74 20 22 52 65 73 65 72 76 65 64 57 6f 72  ist "ReservedWor
1b40: 64 20 22 20 22 22 20 5c 0d 0a 20 20 20 20 20 20  d " "" \..      
1b50: 22 20 4d 61 78 69 6d 75 6d 56 65 72 73 69 6f 6e  " MaximumVersion
1b60: 20 4d 69 6e 69 6d 75 6d 56 65 72 73 69 6f 6e 22   MinimumVersion"
1b70: 20 22 22 5d 20 5b 67 65 74 52 6f 77 73 46 72 6f   ""] [getRowsFro
1b80: 6d 44 61 74 61 54 61 62 6c 65 20 24 72 65 73 75  mDataTable $resu
1b90: 6c 74 5d 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  lt]]]..} -cleanu
1ba0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
1bb0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
1bc0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1bd0: 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73  n result results
1be0: 20 65 72 72 6f 72 73 20 63 6f 64 65 20 64 61 74   errors code dat
1bf0: 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66 69  aSource id db fi
1c00: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
1c10: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
1c20: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
1c30: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
1c40: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
1c50: 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
1c60: 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70  Data.SQLite comp
1c70: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
1c80: 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
1c90: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
1ca0: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
1cb0: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
1cc0: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 53 79 73 74 65  \d+ \{\} 0 Syste
1cd0: 6d 23 44 61 74 61 23 44 61 74 61 54 61 62 6c 65  m#Data#DataTable
1ce0: 23 5c 64 2b 5c 0d 0a 5c 7b 41 42 4f 52 54 20 41  #\d+\..\{ABORT A
1cf0: 43 54 49 4f 4e 20 41 44 44 20 41 46 54 45 52 20  CTION ADD AFTER 
1d00: 41 4c 4c 20 41 4c 54 45 52 20 41 4e 41 4c 59 5a  ALL ALTER ANALYZ
1d10: 45 20 41 4e 44 20 41 53 20 41 53 43 20 41 54 54  E AND AS ASC ATT
1d20: 41 43 48 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ACH AUTOINCREMEN
1d30: 54 5c 0d 0a 42 45 46 4f 52 45 20 42 45 47 49 4e  T\..BEFORE BEGIN
1d40: 20 42 45 54 57 45 45 4e 20 42 59 20 43 41 53 43   BETWEEN BY CASC
1d50: 41 44 45 20 43 41 53 45 20 43 41 53 54 20 43 48  ADE CASE CAST CH
1d60: 45 43 4b 20 43 4f 4c 4c 41 54 45 20 43 4f 4c 55  ECK COLLATE COLU
1d70: 4d 4e 20 43 4f 4d 4d 49 54 20 43 4f 4e 46 4c 49  MN COMMIT CONFLI
1d80: 43 54 5c 0d 0a 43 4f 4e 53 54 52 41 49 4e 54 20  CT\..CONSTRAINT 
1d90: 43 52 45 41 54 45 20 43 52 4f 53 53 20 43 55 52  CREATE CROSS CUR
1da0: 52 45 4e 54 5f 44 41 54 45 20 43 55 52 52 45 4e  RENT_DATE CURREN
1db0: 54 5f 54 49 4d 45 20 43 55 52 52 45 4e 54 5f 54  T_TIME CURRENT_T
1dc0: 49 4d 45 53 54 41 4d 50 20 44 41 54 41 42 41 53  IMESTAMP DATABAS
1dd0: 45 5c 0d 0a 44 45 46 41 55 4c 54 20 44 45 46 45  E\..DEFAULT DEFE
1de0: 52 52 41 42 4c 45 20 44 45 46 45 52 52 45 44 20  RRABLE DEFERRED 
1df0: 44 45 4c 45 54 45 20 44 45 53 43 20 44 45 54 41  DELETE DESC DETA
1e00: 43 48 20 44 49 53 54 49 4e 43 54 20 44 4f 20 44  CH DISTINCT DO D
1e10: 52 4f 50 20 45 41 43 48 20 45 4c 53 45 20 45 4e  ROP EACH ELSE EN
1e20: 44 5c 0d 0a 45 53 43 41 50 45 20 45 58 43 45 50  D\..ESCAPE EXCEP
1e30: 54 20 45 58 43 4c 55 53 49 56 45 20 45 58 49 53  T EXCLUSIVE EXIS
1e40: 54 53 20 45 58 50 4c 41 49 4e 20 46 41 49 4c 20  TS EXPLAIN FAIL 
1e50: 46 4f 52 20 46 4f 52 45 49 47 4e 20 46 52 4f 4d  FOR FOREIGN FROM
1e60: 20 46 55 4c 4c 20 47 4c 4f 42 20 47 52 4f 55 50   FULL GLOB GROUP
1e70: 5c 0d 0a 48 41 56 49 4e 47 20 49 46 20 49 47 4e  \..HAVING IF IGN
1e80: 4f 52 45 20 49 4d 4d 45 44 49 41 54 45 20 49 4e  ORE IMMEDIATE IN
1e90: 20 49 4e 44 45 58 20 49 4e 44 45 58 45 44 20 49   INDEX INDEXED I
1ea0: 4e 49 54 49 41 4c 4c 59 20 49 4e 4e 45 52 20 49  NITIALLY INNER I
1eb0: 4e 53 45 52 54 20 49 4e 53 54 45 41 44 5c 0d 0a  NSERT INSTEAD\..
1ec0: 49 4e 54 45 52 53 45 43 54 20 49 4e 54 4f 20 49  INTERSECT INTO I
1ed0: 53 20 49 53 4e 55 4c 4c 20 4a 4f 49 4e 20 4b 45  S ISNULL JOIN KE
1ee0: 59 20 4c 45 46 54 20 4c 49 4b 45 20 4c 49 4d 49  Y LEFT LIKE LIMI
1ef0: 54 20 4d 41 54 43 48 20 4e 41 54 55 52 41 4c 20  T MATCH NATURAL 
1f00: 4e 4f 20 4e 4f 54 20 4e 4f 54 48 49 4e 47 5c 0d  NO NOT NOTHING\.
1f10: 0a 4e 4f 54 4e 55 4c 4c 20 4e 55 4c 4c 20 4f 46  .NOTNULL NULL OF
1f20: 20 4f 46 46 53 45 54 20 4f 4e 20 4f 52 20 4f 52   OFFSET ON OR OR
1f30: 44 45 52 20 4f 55 54 45 52 20 50 4c 41 4e 20 50  DER OUTER PLAN P
1f40: 52 41 47 4d 41 20 50 52 49 4d 41 52 59 20 51 55  RAGMA PRIMARY QU
1f50: 45 52 59 20 52 41 49 53 45 5c 0d 0a 52 45 43 55  ERY RAISE\..RECU
1f60: 52 53 49 56 45 20 52 45 46 45 52 45 4e 43 45 53  RSIVE REFERENCES
1f70: 20 52 45 47 45 58 50 20 52 45 49 4e 44 45 58 20   REGEXP REINDEX 
1f80: 52 45 4c 45 41 53 45 20 52 45 4e 41 4d 45 20 52  RELEASE RENAME R
1f90: 45 50 4c 41 43 45 20 52 45 53 54 52 49 43 54 20  EPLACE RESTRICT 
1fa0: 52 49 47 48 54 5c 0d 0a 52 4f 4c 4c 42 41 43 4b  RIGHT\..ROLLBACK
1fb0: 20 52 4f 57 20 53 41 56 45 50 4f 49 4e 54 20 53   ROW SAVEPOINT S
1fc0: 45 4c 45 43 54 20 53 45 54 20 54 41 42 4c 45 20  ELECT SET TABLE 
1fd0: 54 45 4d 50 20 54 45 4d 50 4f 52 41 52 59 20 54  TEMP TEMPORARY T
1fe0: 48 45 4e 20 54 4f 20 54 52 41 4e 53 41 43 54 49  HEN TO TRANSACTI
1ff0: 4f 4e 5c 0d 0a 54 52 49 47 47 45 52 20 55 4e 49  ON\..TRIGGER UNI
2000: 4f 4e 20 55 4e 49 51 55 45 20 55 50 44 41 54 45  ON UNIQUE UPDATE
2010: 20 55 53 49 4e 47 20 56 41 43 55 55 4d 20 56 41   USING VACUUM VA
2020: 4c 55 45 53 20 56 49 45 57 20 56 49 52 54 55 41  LUES VIEW VIRTUA
2030: 4c 20 57 48 45 4e 20 57 48 45 52 45 20 57 49 54  L WHEN WHERE WIT
2040: 48 5c 0d 0a 57 49 54 48 4f 55 54 5c 7d 24 7d 7d  H\..WITHOUT\}$}}
2050: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
2060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
20b0: 74 65 73 74 20 64 61 74 61 2d 31 2e 36 20 7b 47  test data-1.6 {G
20c0: 65 74 53 63 68 65 6d 61 20 77 69 74 68 20 46 6f  etSchema with Fo
20d0: 72 65 69 67 6e 4b 65 79 73 7d 20 2d 73 65 74 75  reignKeys} -setu
20e0: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
20f0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
2100: 61 2d 31 2e 36 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  a-1.6.db]..} -bo
2110: 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63  dy {..  sql exec
2120: 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43  ute $db {..    C
2130: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 0d  REATE TABLE t1(.
2140: 0a 20 20 20 20 20 20 78 20 49 4e 54 45 47 45 52  .      x INTEGER
2150: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d   REFERENCES t2 M
2160: 41 54 43 48 20 46 55 4c 4c 0d 0a 20 20 20 20 20  ATCH FULL..     
2170: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44   ON UPDATE SET D
2180: 45 46 41 55 4c 54 20 4f 4e 20 44 45 4c 45 54 45  EFAULT ON DELETE
2190: 20 43 41 53 43 41 44 45 0d 0a 20 20 20 20 20 20   CASCADE..      
21a0: 44 45 46 41 55 4c 54 20 31 0d 0a 20 20 20 20 29  DEFAULT 1..    )
21b0: 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20  ;..  }....  sql 
21c0: 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45  execute $db "CRE
21d0: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 49  ATE TABLE t2(x I
21e0: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
21f0: 53 20 74 33 29 3b 22 0d 0a 0d 0a 20 20 73 65 74  S t3);"....  set
2200: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
2210: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
2220: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
2230: 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
2240: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
2250: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
2260: 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ory] $fileName].
2270: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
2280: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
2290: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
22a0: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
22b0: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
22c0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
22d0: 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75 73 69  m.Data;..    usi
22e0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
22f0: 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61  QLite;....    na
2300: 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63  mespace _Dynamic
2310: 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20  ${id}..    {..  
2320: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2330: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
2340: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
2350: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2360: 63 20 44 61 74 61 52 6f 77 43 6f 6c 6c 65 63 74  c DataRowCollect
2370: 69 6f 6e 20 47 65 74 46 6f 72 65 69 67 6e 4b 65  ion GetForeignKe
2380: 79 73 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ys()..        {.
2390: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
23a0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
23b0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
23c0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
23d0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
23e0: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
23f0: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
2400: 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69  [getTestProperti
2410: 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  es]"))..        
2420: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2430: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
2440: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2450: 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63     return connec
2460: 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61 28 22  tion.GetSchema("
2470: 46 6f 72 65 69 67 6e 4b 65 79 73 22 29 2e 52 6f  ForeignKeys").Ro
2480: 77 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ws;..          }
2490: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24f0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
2500: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
2510: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
2520: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
2530: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
2540: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
2550: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 66    }..  }] true f
2560: 61 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c 74  alse true result
2570: 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e  s errors System.
2580: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
2590: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
25a0: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
25b0: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
25c0: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
25d0: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
25e0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
25f0: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
2600: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
2610: 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 74    set rows [list
2620: 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  ]..        set f
2630: 6f 72 65 69 67 6e 4b 65 79 73 20 5b 6f 62 6a 65  oreignKeys [obje
2640: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
2650: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
2660: 7d 20 47 65 74 46 6f 72 65 69 67 6e 4b 65 79 73  } GetForeignKeys
2670: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ]....        obj
2680: 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
2690: 61 73 20 66 6f 72 65 69 67 6e 4b 65 79 20 24 66  as foreignKey $f
26a0: 6f 72 65 69 67 6e 4b 65 79 73 20 7b 0d 0a 20 20  oreignKeys {..  
26b0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
26c0: 72 6f 77 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  rows [list \..  
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f              [$fo
26e0: 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 43 4f  reignKey Item CO
26f0: 4e 53 54 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47  NSTRAINT_CATALOG
2700: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..           
2710: 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20     [$foreignKey 
2720: 49 74 65 6d 20 43 4f 4e 53 54 52 41 49 4e 54 5f  Item CONSTRAINT_
2730: 4e 41 4d 45 5d 20 5c 0d 0a 20 20 20 20 20 20 20  NAME] \..       
2740: 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e         [$foreign
2750: 4b 65 79 20 49 74 65 6d 20 54 41 42 4c 45 5f 43  Key Item TABLE_C
2760: 41 54 41 4c 4f 47 5d 20 5c 0d 0a 20 20 20 20 20  ATALOG] \..     
2770: 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69           [$forei
2780: 67 6e 4b 65 79 20 49 74 65 6d 20 54 41 42 4c 45  gnKey Item TABLE
2790: 5f 4e 41 4d 45 5d 20 5c 0d 0a 20 20 20 20 20 20  _NAME] \..      
27a0: 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67          [$foreig
27b0: 6e 4b 65 79 20 49 74 65 6d 20 43 4f 4e 53 54 52  nKey Item CONSTR
27c0: 41 49 4e 54 5f 54 59 50 45 5d 20 5c 0d 0a 20 20  AINT_TYPE] \..  
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f              [$fo
27e0: 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 49 53  reignKey Item IS
27f0: 5f 44 45 46 45 52 52 41 42 4c 45 5d 20 5c 0d 0a  _DEFERRABLE] \..
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$
2810: 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20  foreignKey Item 
2820: 49 4e 49 54 49 41 4c 4c 59 5f 44 45 46 45 52 52  INITIALLY_DEFERR
2830: 45 44 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ED] \..         
2840: 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65       [$foreignKe
2850: 79 20 49 74 65 6d 20 46 4b 45 59 5f 49 44 5d 20  y Item FKEY_ID] 
2860: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
2870: 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74   [$foreignKey It
2880: 65 6d 20 46 4b 45 59 5f 46 52 4f 4d 5f 43 4f 4c  em FKEY_FROM_COL
2890: 55 4d 4e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  UMN] \..        
28a0: 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b        [$foreignK
28b0: 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 54 4f 5f  ey Item FKEY_TO_
28c0: 43 41 54 41 4c 4f 47 5d 20 5c 0d 0a 20 20 20 20  CATALOG] \..    
28d0: 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65            [$fore
28e0: 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45 59  ignKey Item FKEY
28f0: 5f 54 4f 5f 54 41 42 4c 45 5d 20 5c 0d 0a 20 20  _TO_TABLE] \..  
2900: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f              [$fo
2910: 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b  reignKey Item FK
2920: 45 59 5f 54 4f 5f 43 4f 4c 55 4d 4e 5d 20 5c 0d  EY_TO_COLUMN] \.
2930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2940: 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d  $foreignKey Item
2950: 20 46 4b 45 59 5f 46 52 4f 4d 5f 4f 52 44 49 4e   FKEY_FROM_ORDIN
2960: 41 4c 5f 50 4f 53 49 54 49 4f 4e 5d 20 5c 0d 0a  AL_POSITION] \..
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$
2980: 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20  foreignKey Item 
2990: 46 4b 45 59 5f 4f 4e 5f 55 50 44 41 54 45 5d 20  FKEY_ON_UPDATE] 
29a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
29b0: 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74   [$foreignKey It
29c0: 65 6d 20 46 4b 45 59 5f 4f 4e 5f 44 45 4c 45 54  em FKEY_ON_DELET
29d0: 45 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  E] \..          
29e0: 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79      [$foreignKey
29f0: 20 49 74 65 6d 20 46 4b 45 59 5f 4d 41 54 43 48   Item FKEY_MATCH
2a00: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ]]..        }...
2a10: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 6f 77  .        set row
2a20: 73 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  s..      } resul
2a30: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
2a40: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a   ""]}] $result..
2a50: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
2a60: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
2a70: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
2a80: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
2a90: 74 20 72 6f 77 73 20 66 6f 72 65 69 67 6e 4b 65  t rows foreignKe
2aa0: 79 20 66 6f 72 65 69 67 6e 4b 65 79 73 20 72 65  y foreignKeys re
2ab0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 63 6f 64  sults errors cod
2ac0: 65 20 5c 0d 0a 20 20 20 20 20 20 64 61 74 61 53  e \..      dataS
2ad0: 6f 75 72 63 65 20 69 64 20 64 62 20 66 69 6c 65  ource id db file
2ae0: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
2af0: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
2b00: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
2b10: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
2b20: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
2b30: 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61  Lite\..System.Da
2b40: 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c  ta.SQLite compil
2b50: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
2b60: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b  regexp -result {
2b70: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
2b80: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
2b90: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
2ba0: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 6d 61 69  + \{\} 0 \{\{mai
2bb0: 6e 20 46 4b 5f 74 31 5f 30 5f 30 20 6d 61 69 6e  n FK_t1_0_0 main
2bc0: 20 74 31 5c 0d 0a 5c 7b 46 4f 52 45 49 47 4e 20   t1\..\{FOREIGN 
2bd0: 4b 45 59 5c 7d 20 46 61 6c 73 65 20 46 61 6c 73  KEY\} False Fals
2be0: 65 20 30 20 78 20 6d 61 69 6e 20 74 32 20 5c 7b  e 0 x main t2 \{
2bf0: 5c 7d 20 30 20 5c 7b 53 45 54 20 44 45 46 41 55  \} 0 \{SET DEFAU
2c00: 4c 54 5c 7d 20 43 41 53 43 41 44 45 20 4e 4f 4e  LT\} CASCADE NON
2c10: 45 5c 7d 5c 0d 0a 5c 7b 6d 61 69 6e 20 46 4b 5f  E\}\..\{main FK_
2c20: 74 32 5f 30 5f 30 20 6d 61 69 6e 20 74 32 20 5c  t2_0_0 main t2 \
2c30: 7b 46 4f 52 45 49 47 4e 20 4b 45 59 5c 7d 20 46  {FOREIGN KEY\} F
2c40: 61 6c 73 65 20 46 61 6c 73 65 20 30 20 78 20 6d  alse False 0 x m
2c50: 61 69 6e 20 74 33 20 5c 7b 5c 7d 20 30 20 5c 7b  ain t3 \{\} 0 \{
2c60: 4e 4f 5c 0d 0a 41 43 54 49 4f 4e 5c 7d 20 5c 7b  NO\..ACTION\} \{
2c70: 4e 4f 20 41 43 54 49 4f 4e 5c 7d 20 4e 4f 4e 45  NO ACTION\} NONE
2c80: 5c 7d 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23  \}\}$}}....#####
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2cd0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
2ce0: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
2cf0: 2d 31 2e 37 20 7b 53 51 4c 49 54 45 5f 46 43 4e  -1.7 {SQLITE_FCN
2d00: 54 4c 5f 57 49 4e 33 32 5f 41 56 5f 52 45 54 52  TL_WIN32_AV_RETR
2d10: 59 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  Y} -setup {..  s
2d20: 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
2d30: 4e 61 6d 65 20 64 61 74 61 2d 31 2e 37 2e 64 62  Name data-1.7.db
2d40: 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
2d50: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
2d60: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
2d70: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
2d80: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
2d90: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
2da0: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
2db0: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
2dc0: 65 5d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  e]....  unset -n
2dd0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
2de0: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
2df0: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
2e00: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
2e10: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
2e20: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2e30: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
2e40: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
2e50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
2e60: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
2e70: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
2e80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
2e90: 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
2ea0: 6c 20 54 65 73 74 53 65 74 41 76 52 65 74 72 79  l TestSetAvRetry
2eb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66  (..          ref
2ec0: 20 69 6e 74 20 63 6f 75 6e 74 2c 0d 0a 20 20 20   int count,..   
2ed0: 20 20 20 20 20 20 20 72 65 66 20 69 6e 74 20 69         ref int i
2ee0: 6e 74 65 72 76 61 6c 0d 0a 20 20 20 20 20 20 20  nterval..       
2ef0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2f00: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
2f10: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
2f20: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
2f30: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
2f40: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
2f50: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
2f60: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
2f70: 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69  [getTestProperti
2f80: 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  es]"))..        
2f90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2fa0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
2fb0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2fc0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2fd0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 65 74 20     // NOTE: Set 
2fe0: 74 68 65 20 72 65 71 75 65 73 74 65 64 20 72 65  the requested re
2ff0: 74 72 79 20 70 61 72 61 6d 65 74 65 72 20 76 61  try parameter va
3000: 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  lues...         
3010: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3020: 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f     if (connectio
3030: 6e 2e 53 65 74 41 76 52 65 74 72 79 28 72 65 66  n.SetAvRetry(ref
3040: 20 63 6f 75 6e 74 2c 20 72 65 66 20 69 6e 74 65   count, ref inte
3050: 72 76 61 6c 29 20 21 3d 20 30 29 0d 0a 20 20 20  rval) != 0)..   
3060: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3070: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
3080: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3090: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
30a0: 20 51 75 65 72 79 20 74 68 65 20 72 65 74 72 79   Query the retry
30b0: 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65   parameter value
30c0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
30d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
30e0: 69 6e 74 20 6e 65 77 43 6f 75 6e 74 20 3d 20 2d  int newCount = -
30f0: 31 3b 20 69 6e 74 20 6e 65 77 49 6e 74 65 72 76  1; int newInterv
3100: 61 6c 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20  al = -1;....    
3110: 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e          if (conn
3120: 65 63 74 69 6f 6e 2e 53 65 74 41 76 52 65 74 72  ection.SetAvRetr
3130: 79 28 72 65 66 20 6e 65 77 43 6f 75 6e 74 2c 20  y(ref newCount, 
3140: 72 65 66 20 6e 65 77 49 6e 74 65 72 76 61 6c 29  ref newInterval)
3150: 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   != 0)..        
3160: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
3170: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
3180: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3190: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6b 65     // NOTE: Make
31a0: 20 73 75 72 65 20 74 68 65 20 72 65 74 72 79 20   sure the retry 
31b0: 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73  parameter values
31c0: 20 77 65 72 65 20 73 65 74 2e 0d 0a 20 20 20 20   were set...    
31d0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
31e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
31f0: 6e 65 77 43 6f 75 6e 74 20 3d 3d 20 63 6f 75 6e  newCount == coun
3200: 74 20 26 26 20 6e 65 77 49 6e 74 65 72 76 61 6c  t && newInterval
3210: 20 3d 3d 20 69 6e 74 65 72 76 61 6c 29 3b 0d 0a   == interval);..
3220: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3230: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3240: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3290: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
32a0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
32b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32c0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
32d0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
32e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
32f0: 20 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20    }] true false 
3300: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
3310: 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ors System.Data.
3320: 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20  SQLite.dll].... 
3330: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
3340: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
3350: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
3360: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
3370: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
3380: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
3390: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
33a0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  h {..        set
33b0: 20 73 61 76 65 64 43 6f 75 6e 74 20 2d 31 3b 20   savedCount -1; 
33c0: 73 65 74 20 73 61 76 65 64 49 6e 74 65 72 76 61  set savedInterva
33d0: 6c 20 2d 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l -1....        
33e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
33f0: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
3400: 24 7b 69 64 7d 20 54 65 73 74 53 65 74 41 76 52  ${id} TestSetAvR
3410: 65 74 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  etry \..        
3420: 20 20 20 20 73 61 76 65 64 43 6f 75 6e 74 20 73      savedCount s
3430: 61 76 65 64 49 6e 74 65 72 76 61 6c 0d 0a 0d 0a  avedInterval....
3440: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e          set coun
3450: 74 20 35 3b 20 73 65 74 20 69 6e 74 65 72 76 61  t 5; set interva
3460: 6c 20 35 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l 50....        
3470: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
3480: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
3490: 24 7b 69 64 7d 20 54 65 73 74 53 65 74 41 76 52  ${id} TestSetAvR
34a0: 65 74 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  etry \..        
34b0: 20 20 20 20 63 6f 75 6e 74 20 69 6e 74 65 72 76      count interv
34c0: 61 6c 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  al..      } resu
34d0: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
34e0: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
34f0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
3500: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
3510: 73 20 73 61 76 65 64 43 6f 75 6e 74 5d 7d 20 74  s savedCount]} t
3520: 68 65 6e 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20  hen {..    #..  
3530: 20 20 23 20 4e 4f 54 45 3a 20 52 65 73 74 6f 72    # NOTE: Restor
3540: 65 20 74 68 65 20 73 61 76 65 64 20 72 65 74 72  e the saved retr
3550: 79 20 63 6f 75 6e 74 2c 20 69 66 20 70 6f 73 73  y count, if poss
3560: 69 62 6c 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20  ible...    #..  
3570: 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..     
3580: 20 73 65 74 20 69 6e 74 65 72 76 61 6c 20 2d 31   set interval -1
3590: 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69  ..      object i
35a0: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
35b0: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 54 65  id}.Test${id} Te
35c0: 73 74 53 65 74 41 76 52 65 74 72 79 20 73 61 76  stSetAvRetry sav
35d0: 65 64 43 6f 75 6e 74 20 69 6e 74 65 72 76 61 6c  edCount interval
35e0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
35f0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3600: 74 73 20 73 61 76 65 64 49 6e 74 65 72 76 61 6c  ts savedInterval
3610: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 23  ]} then {..    #
3620: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65  ..    # NOTE: Re
3630: 73 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20  store the saved 
3640: 72 65 74 72 79 20 69 6e 74 65 72 76 61 6c 2c 20  retry interval, 
3650: 69 66 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20  if possible...  
3660: 20 20 23 0d 0a 20 20 20 20 63 61 74 63 68 20 7b    #..    catch {
3670: 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e  ..      set coun
3680: 74 20 2d 31 0d 0a 20 20 20 20 20 20 6f 62 6a 65  t -1..      obje
3690: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
36a0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
36b0: 7d 20 54 65 73 74 53 65 74 41 76 52 65 74 72 79  } TestSetAvRetry
36c0: 20 63 6f 75 6e 74 20 73 61 76 65 64 49 6e 74 65   count savedInte
36d0: 72 76 61 6c 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  rval..    }..  }
36e0: 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
36f0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
3700: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
3710: 20 72 65 73 75 6c 74 20 63 6f 75 6e 74 20 69 6e   result count in
3720: 74 65 72 76 61 6c 20 73 61 76 65 64 43 6f 75 6e  terval savedCoun
3730: 74 20 73 61 76 65 64 49 6e 74 65 72 76 61 6c 20  t savedInterval 
3740: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
3750: 20 65 72 72 6f 72 73 20 63 6f 64 65 20 64 61 74   errors code dat
3760: 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66 69  aSource id db fi
3770: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
3780: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
3790: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 77 69 6e  mmand.object win
37a0: 64 6f 77 73 20 6d 6f 6e 6f 42 75 67 32 38 20 63  dows monoBug28 c
37b0: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
37c0: 6c 65 2e 44 41 54 41 5c 0d 0a 53 51 4c 69 74 65  le.DATA\..SQLite
37d0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
37e0: 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  ite compileCShar
37f0: 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70  p} -match regexp
3800: 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a   -result {^Ok\..
3810: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
3820: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
3830: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
3840: 20 30 20 54 72 75 65 24 7d 7d 0d 0a 0d 0a 23 23   0 True$}}....##
3850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3890: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
38a0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
38b0: 61 74 61 2d 31 2e 38 20 7b 70 72 6f 70 65 72 6c  ata-1.8 {properl
38c0: 79 20 63 6c 6f 73 65 64 20 64 61 74 61 62 61 73  y closed databas
38d0: 65 20 66 69 6c 65 20 28 6e 6f 6e 2d 71 75 65 72  e file (non-quer
38e0: 79 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  y)} -setup {..  
38f0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
3900: 61 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62 6f 64  a-1.8.db..} -bod
3910: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
3920: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
3930: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
3940: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
3950: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
3960: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
3970: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
3980: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
3990: 65 74 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20 20  et sql { \..    
39a0: 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 20  BEGIN EXCLUSIVE 
39b0: 54 52 41 4e 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a  TRANSACTION; \..
39c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
39d0: 20 74 31 28 78 20 49 4e 54 45 47 45 52 29 3b 20   t1(x INTEGER); 
39e0: 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  \..    INSERT IN
39f0: 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
3a00: 28 31 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  (1); \..    SELE
3a10: 43 54 20 78 20 46 52 4f 4d 20 74 31 3b 20 5c 0d  CT x FROM t1; \.
3a20: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
3a30: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
3a40: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
3a50: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
3a60: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
3a70: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
3a80: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
3a90: 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73  te;....    names
3aa0: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
3ab0: 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d}..    {..     
3ac0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
3ad0: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
3ae0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3af0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
3b00: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
3b10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3b20: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
3b30: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
3b40: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
3b50: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
3b60: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
3b70: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
3b80: 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72  urce};[getTestPr
3b90: 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20  operties]"))..  
3ba0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3bb0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
3bc0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
3bd0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
3be0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
3bf0: 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53 51 4c 69  mmand = new SQLi
3c00: 74 65 43 6f 6d 6d 61 6e 64 28 22 24 7b 73 71 6c  teCommand("${sql
3c10: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
3c20: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29       connection)
3c30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c50: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
3c60: 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20  onQuery();..    
3c70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3c80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3c90: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
3ca0: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 66 61 6c  }..  }] true fal
3cb0: 73 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  se true results 
3cc0: 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61  errors System.Da
3cd0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a  ta.SQLite.dll]..
3ce0: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
3cf0: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
3d00: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
3d10: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
3d20: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
3d30: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
3d40: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
3d50: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
3d60: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
3d70: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
3d80: 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20  ${id} Main..    
3d90: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
3da0: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
3db0: 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20  $result \..     
3dc0: 20 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20 24 64   [close [open $d
3dd0: 61 74 61 53 6f 75 72 63 65 20 52 44 4f 4e 4c 59  ataSource RDONLY
3de0: 20 30 20 22 22 20 2d 73 68 61 72 65 20 4e 6f 6e   0 "" -share Non
3df0: 65 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  e]]..} -cleanup 
3e00: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
3e10: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
3e20: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3e30: 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65  result results e
3e40: 72 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20 64  rrors code sql d
3e50: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
3e60: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
3e70: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
3e80: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
3e90: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
3ea0: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
3eb0: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
3ec0: 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69  ata.SQLite compi
3ed0: 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68  leCSharp} -match
3ee0: 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20   regexp -result 
3ef0: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
3f00: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
3f10: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
3f20: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 5c  d+ \{\} 0 \{\} \
3f30: 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  {\}$}}....######
3f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f80: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
3f90: 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
3fa0: 31 2e 39 20 7b 70 72 6f 70 65 72 6c 79 20 63 6c  1.9 {properly cl
3fb0: 6f 73 65 64 20 64 61 74 61 62 61 73 65 20 66 69  osed database fi
3fc0: 6c 65 20 28 72 65 61 64 65 72 20 23 31 29 7d 20  le (reader #1)} 
3fd0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20  -setup {..  set 
3fe0: 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
3ff0: 39 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  9.db..} -body {.
4000: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
4010: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
4020: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
4030: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
4040: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
4050: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
4060: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
4070: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
4080: 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42 45 47 49  ql { \..    BEGI
4090: 4e 20 45 58 43 4c 55 53 49 56 45 20 54 52 41 4e  N EXCLUSIVE TRAN
40a0: 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20 20 20 20  SACTION; \..    
40b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
40c0: 78 20 49 4e 54 45 47 45 52 29 3b 20 5c 0d 0a 20  x INTEGER); \.. 
40d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
40e0: 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
40f0: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 78   \..    SELECT x
4100: 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a 20 20 7d   FROM t1; \..  }
4110: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
4120: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
4130: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
4140: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
4150: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
4160: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
4170: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
4180: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
4190: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
41a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
41b0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
41c0: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
41d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
41e0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
41f0: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
4200: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  {..          usi
4210: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
4220: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
4230: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
4240: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
4250: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
4260: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
4270: 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72  };[getTestProper
4280: 74 69 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20  ties]"))..      
4290: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
42a0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
42b0: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
42c0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
42d0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
42e0: 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  d = new SQLiteCo
42f0: 6d 6d 61 6e 64 28 22 24 7b 73 71 6c 7d 22 2c 0d  mmand("${sql}",.
4300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4310: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20   connection)).. 
4320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4330: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4340: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
4350: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
4360: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
4370: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
4380: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
43a0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
43b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
43c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
43d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
43e0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
43f0: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 66 61   }..  }] true fa
4400: 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  lse true results
4410: 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44   errors System.D
4420: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d  ata.SQLite.dll].
4430: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
4440: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
4450: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
4460: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
4470: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
4480: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
4490: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
44a0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
44b0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
44c0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
44d0: 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20  t${id} Main..   
44e0: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
44f0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
4500: 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20   $result \..    
4510: 20 20 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20 24    [close [open $
4520: 64 61 74 61 53 6f 75 72 63 65 20 52 44 4f 4e 4c  dataSource RDONL
4530: 59 20 30 20 22 22 20 2d 73 68 61 72 65 20 4e 6f  Y 0 "" -share No
4540: 6e 65 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ne]]..} -cleanup
4550: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
4560: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
4570: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
4580: 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20   result results 
4590: 65 72 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20  errors code sql 
45a0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
45b0: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
45c0: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
45d0: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
45e0: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
45f0: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
4600: 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
4610: 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70  Data.SQLite comp
4620: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
4630: 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
4640: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
4650: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
4660: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
4670: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20  \d+ \{\} 0 \{\} 
4680: 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23  \{\}$}}....#####
4690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
46d0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
46e0: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
46f0: 2d 31 2e 31 30 20 7b 70 72 6f 70 65 72 6c 79 20  -1.10 {properly 
4700: 63 6c 6f 73 65 64 20 64 61 74 61 62 61 73 65 20  closed database 
4710: 66 69 6c 65 20 28 72 65 61 64 65 72 20 23 32 29  file (reader #2)
4720: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
4730: 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
4740: 31 2e 31 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  1.10.db..} -body
4750: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
4760: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
4770: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
4780: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
4790: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
47a0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
47b0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
47c0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
47d0: 74 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42  t sql { \..    B
47e0: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 20 54  EGIN EXCLUSIVE T
47f0: 52 41 4e 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20  RANSACTION; \.. 
4800: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4810: 74 31 28 78 20 49 4e 54 45 47 45 52 29 3b 20 5c  t1(x INTEGER); \
4820: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
4830: 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
4840: 31 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  1); \..    SELEC
4850: 54 20 78 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a  T x FROM t1; \..
4860: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
4870: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
4880: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
4890: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
48a0: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
48b0: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
48c0: 79 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20  ystem.Data;..   
48d0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
48e0: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20  ta.SQLite;....  
48f0: 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e    namespace _Dyn
4900: 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b  amic${id}..    {
4910: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
4920: 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74  tatic class Test
4930: 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a  ${id}..      {..
4940: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
4950: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
4960: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4970: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
4980: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
4990: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
49a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
49b0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
49c0: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
49d0: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
49e0: 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 5d  tTestProperties]
49f0: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
4a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
4a10: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
4a20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4a30: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
4a40: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e  mand command = n
4a50: 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  ew SQLiteCommand
4a60: 28 22 24 7b 73 71 6c 7d 22 2c 0d 0a 20 20 20 20  ("${sql}",..    
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
4a80: 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ection))..      
4a90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4aa0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
4ab0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64  LiteDataReader d
4ac0: 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d  ataReader = comm
4ad0: 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65  and.ExecuteReade
4ae0: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
4af0: 20 20 20 20 20 20 43 6f 6d 6d 61 6e 64 42 65 68        CommandBeh
4b00: 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65  avior.CloseConne
4b10: 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
4b20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4b30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
4b40: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
4b50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4b60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4b70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4b80: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4b90: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 66 61 6c 73  ..  }] true fals
4ba0: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
4bb0: 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74  rrors System.Dat
4bc0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d  a.SQLite.dll]...
4bd0: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
4be0: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
4bf0: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
4c00: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
4c10: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
4c20: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
4c30: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
4c40: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
4c50: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
4c60: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
4c70: 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20  {id} Main..     
4c80: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
4c90: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
4ca0: 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20  result \..      
4cb0: 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20 24 64 61  [close [open $da
4cc0: 74 61 53 6f 75 72 63 65 20 52 44 4f 4e 4c 59 20  taSource RDONLY 
4cd0: 30 20 22 22 20 2d 73 68 61 72 65 20 4e 6f 6e 65  0 "" -share None
4ce0: 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ]]..} -cleanup {
4cf0: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
4d00: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
4d10: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
4d20: 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72  esult results er
4d30: 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20 64 61  rors code sql da
4d40: 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65  taSource id file
4d50: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
4d60: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
4d70: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
4d80: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
4d90: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
4da0: 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61  Lite\..System.Da
4db0: 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c  ta.SQLite compil
4dc0: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
4dd0: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b  regexp -result {
4de0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
4df0: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
4e00: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
4e10: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 5c 7b  + \{\} 0 \{\} \{
4e20: 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  \}$}}....#######
4e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e70: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
4e80: 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
4e90: 2e 31 31 20 7b 43 68 61 6e 67 65 73 20 70 72 6f  .11 {Changes pro
4ea0: 70 65 72 74 79 7d 20 2d 73 65 74 75 70 20 7b 0d  perty} -setup {.
4eb0: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
4ec0: 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
4ed0: 31 31 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  11.db]..} -body 
4ee0: 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  {..  set connect
4ef0: 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
4f00: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  tion]....  set r
4f10: 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
4f20: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
4f30: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
4f40: 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t1(x INTEGER PRI
4f50: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 2c  MARY KEY ASC, y,
4f60: 20 7a 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65   z);"....  sql e
4f70: 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
4f80: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
4f90: 2c 20 7a 29 20 56 41 4c 55 45 53 28 31 2c 20 27  , z) VALUES(1, '
4fa0: 66 6f 6f 27 2c 20 31 32 33 34 29 3b 22 0d 0a 20  foo', 1234);".. 
4fb0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
4fc0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
4fd0: 20 28 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45   (x, y, z) VALUE
4fe0: 53 28 32 2c 20 27 62 61 72 27 2c 20 35 36 37 38  S(2, 'bar', 5678
4ff0: 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  );"..  lappend r
5000: 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e  esult [object in
5010: 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  voke $connection
5020: 20 43 68 61 6e 67 65 73 5d 0d 0a 0d 0a 20 20 73   Changes]....  s
5030: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
5040: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 20  UPDATE t1 SET y 
5050: 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a 20 20  = 'foobar';"..  
5060: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5070: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
5080: 6f 6e 6e 65 63 74 69 6f 6e 20 43 68 61 6e 67 65  onnection Change
5090: 73 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  s]....  sql exec
50a0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
50b0: 64 65 72 20 24 64 62 20 22 53 45 4c 45 43 54 20  der $db "SELECT 
50c0: 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20 74 31 3b  x, y, z FROM t1;
50d0: 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  "..  lappend res
50e0: 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ult [object invo
50f0: 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 43  ke $connection C
5100: 68 61 6e 67 65 73 5d 0d 0a 0d 0a 20 20 66 6f 72  hanges]....  for
5110: 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72 74  each name [lsort
5120: 20 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61 79   -integer [array
5130: 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d 72 65 67   names rows -reg
5140: 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b 0d  exp {^\d+$}]] {.
5150: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
5160: 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20  ult [list $name 
5170: 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a 20  $rows($name)].. 
5180: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75   }....  set resu
5190: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
51a0: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
51b0: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 66 72 65  ileName....  fre
51c0: 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
51d0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
51e0: 6c 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72  lain name rows r
51f0: 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  esult connection
5200: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
5210: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
5220: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
5230: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
5240: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
5250: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
5260: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
5270: 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 31  e} \..-result {1
5280: 20 32 20 32 20 7b 31 20 7b 7b 78 20 31 7d 20 7b   2 2 {1 {{x 1} {
5290: 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20 31 32 33  y foobar} {z 123
52a0: 34 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b  4}}} {2 {{x 2} {
52b0: 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20 35 36 37  y foobar} {z 567
52c0: 38 7d 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  8}}}}}....######
52d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
52e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
52f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5310: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
5320: 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
5330: 31 2e 31 32 20 7b 4c 61 73 74 49 6e 73 65 72 74  1.12 {LastInsert
5340: 52 6f 77 49 64 20 70 72 6f 70 65 72 74 79 7d 20  RowId property} 
5350: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
5360: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
5370: 65 20 64 61 74 61 2d 31 2e 31 32 2e 64 62 5d 0d  e data-1.12.db].
5380: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
5390: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65  t connection [ge
53a0: 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a  tDbConnection]..
53b0: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b  ..  set result [
53c0: 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  list]....  sql e
53d0: 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41  xecute $db "CREA
53e0: 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e  TE TABLE t1(x IN
53f0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
5400: 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 22 0d 0a  Y ASC, y, z);"..
5410: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
5420: 24 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c  $db "CREATE TABL
5430: 45 20 74 32 28 78 20 49 4e 54 45 47 45 52 20 50  E t2(x INTEGER P
5440: 52 49 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49  RIMARY KEY AUTOI
5450: 4e 43 52 45 4d 45 4e 54 2c 20 79 2c 20 7a 29 3b  NCREMENT, y, z);
5460: 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  "..  lappend res
5470: 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ult [object invo
5480: 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c  ke $connection L
5490: 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d  astInsertRowId].
54a0: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
54b0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
54c0: 4f 20 74 31 20 28 78 2c 20 79 2c 20 7a 29 20 56  O t1 (x, y, z) V
54d0: 41 4c 55 45 53 28 31 2c 20 27 66 6f 6f 27 2c 20  ALUES(1, 'foo', 
54e0: 31 32 33 34 29 3b 22 0d 0a 20 20 6c 61 70 70 65  1234);"..  lappe
54f0: 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63  nd result [objec
5500: 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63  t invoke $connec
5510: 74 69 6f 6e 20 4c 61 73 74 49 6e 73 65 72 74 52  tion LastInsertR
5520: 6f 77 49 64 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  owId]....  sql e
5530: 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
5540: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
5550: 2c 20 7a 29 20 56 41 4c 55 45 53 28 32 2c 20 27  , z) VALUES(2, '
5560: 62 61 72 27 2c 20 35 36 37 38 29 3b 22 0d 0a 20  bar', 5678);".. 
5570: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
5580: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $
5590: 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49  connection LastI
55a0: 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20  nsertRowId].... 
55b0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
55c0: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
55d0: 79 20 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a  y = 'foobar';"..
55e0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
55f0: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
5600: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74  $connection Last
5610: 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a  InsertRowId]....
5620: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
5630: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
5640: 32 20 28 79 2c 20 7a 29 20 56 41 4c 55 45 53 28  2 (y, z) VALUES(
5650: 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b 22 0d 0a  'foo', 1234);"..
5660: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
5670: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
5680: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74  $connection Last
5690: 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a  InsertRowId]....
56a0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
56b0: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
56c0: 32 20 28 79 2c 20 7a 29 20 56 41 4c 55 45 53 28  2 (y, z) VALUES(
56d0: 27 62 61 72 27 2c 20 35 36 37 38 29 3b 22 0d 0a  'bar', 5678);"..
56e0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
56f0: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
5700: 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74  $connection Last
5710: 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a  InsertRowId]....
5720: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
5730: 62 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54  b "UPDATE t2 SET
5740: 20 79 20 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d   y = 'foobar';".
5750: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
5760: 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  t [object invoke
5770: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73   $connection Las
5780: 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d  tInsertRowId]...
5790: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
57a0: 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 24  execute reader $
57b0: 64 62 20 22 53 45 4c 45 43 54 20 78 2c 20 79 2c  db "SELECT x, y,
57c0: 20 7a 20 46 52 4f 4d 20 74 31 3b 22 0d 0a 20 20   z FROM t1;"..  
57d0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
57e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
57f0: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
5800: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
5810: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73  foreach name [ls
5820: 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72  ort -integer [ar
5830: 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d  ray names rows -
5840: 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d  regexp {^\d+$}]]
5850: 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
5860: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61  result [list $na
5870: 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d  me $rows($name)]
5880: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65  ..  }....  sql e
5890: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
58a0: 72 65 61 64 65 72 20 24 64 62 20 22 53 45 4c 45  reader $db "SELE
58b0: 43 54 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20  CT x, y, z FROM 
58c0: 74 32 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t2;"..  lappend 
58d0: 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69  result [object i
58e0: 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f  nvoke $connectio
58f0: 6e 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49  n LastInsertRowI
5900: 64 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20  d]....  foreach 
5910: 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74  name [lsort -int
5920: 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61 6d 65  eger [array name
5930: 73 20 72 6f 77 73 20 2d 72 65 67 65 78 70 20 7b  s rows -regexp {
5940: 5e 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20  ^\d+$}]] {..    
5950: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5960: 6c 69 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73  list $name $rows
5970: 28 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d  ($name)]..  }...
5980: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
5990: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
59a0: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
59b0: 6d 65 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f  me....  freeDbCo
59c0: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e  nnection....  un
59d0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
59e0: 6e 61 6d 65 20 72 6f 77 73 20 72 65 73 75 6c 74  name rows result
59f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66   connection db f
5a00: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
5a10: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
5a20: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
5a30: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
5a40: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
5a50: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
5a60: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d  .Data.SQLite} \.
5a70: 0a 2d 72 65 73 75 6c 74 20 7b 30 20 31 20 32 20  .-result {0 1 2 
5a80: 32 20 31 20 32 20 32 20 32 20 7b 31 20 7b 7b 78  2 1 2 2 2 {1 {{x
5a90: 20 31 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 20 7b   1} {y foobar} {
5aa0: 7a 20 31 32 33 34 7d 7d 7d 20 7b 32 20 7b 7b 78  z 1234}}} {2 {{x
5ab0: 20 32 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 5c 0d   2} {y foobar}\.
5ac0: 0a 7b 7a 20 35 36 37 38 7d 7d 7d 20 32 20 7b 31  .{z 5678}}} 2 {1
5ad0: 20 7b 7b 78 20 31 7d 20 7b 79 20 66 6f 6f 62 61   {{x 1} {y fooba
5ae0: 72 7d 20 7b 7a 20 31 32 33 34 7d 7d 7d 20 7b 32  r} {z 1234}}} {2
5af0: 20 7b 7b 78 20 32 7d 20 7b 79 20 66 6f 6f 62 61   {{x 2} {y fooba
5b00: 72 7d 20 7b 7a 20 35 36 37 38 7d 7d 7d 7d 7d 0d  r} {z 5678}}}}}.
5b10: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
5b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b60: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
5b70: 65 73 74 20 64 61 74 61 2d 31 2e 31 33 20 7b 44  est data-1.13 {D
5b80: 61 74 65 54 69 6d 65 20 75 73 69 6e 67 20 55 6e  ateTime using Un
5b90: 69 78 20 65 70 6f 63 68 7d 20 2d 73 65 74 75 70  ix epoch} -setup
5ba0: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
5bb0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
5bc0: 2d 31 2e 31 33 2e 64 62 5d 20 22 22 20 55 6e 69  -1.13.db] "" Uni
5bd0: 78 45 70 6f 63 68 20 55 74 63 0d 0a 7d 20 2d 62  xEpoch Utc..} -b
5be0: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73  ody {..  set res
5bf0: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
5c00: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
5c10: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
5c20: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
5c30: 52 59 20 4b 45 59 20 41 53 43 2c 20 79 20 44 41  RY KEY ASC, y DA
5c40: 54 45 54 49 4d 45 29 3b 22 0d 0a 20 20 73 71 6c  TETIME);"..  sql
5c50: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
5c60: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
5c70: 20 79 29 20 56 41 4c 55 45 53 28 31 2c 20 31 33   y) VALUES(1, 13
5c80: 30 32 38 32 35 36 30 30 29 3b 22 0d 0a 20 20 73  02825600);"..  s
5c90: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
5ca0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
5cb0: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20  x, y) VALUES(2, 
5cc0: 31 33 33 34 34 34 38 30 30 30 29 3b 22 0d 0a 20  1334448000);".. 
5cd0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
5ce0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
5cf0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 33   (x, y) VALUES(3
5d00: 2c 20 31 33 36 35 39 38 34 30 30 30 29 3b 22 0d  , 1365984000);".
5d10: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5d20: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5d30: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
5d40: 45 53 28 34 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(4, ?);" \..  
5d50: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
5d60: 20 49 6e 74 33 32 20 31 33 30 32 38 32 35 36 30   Int32 130282560
5d70: 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  0]....  sql exec
5d80: 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
5d90: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5da0: 41 4c 55 45 53 28 35 2c 20 3f 29 3b 22 20 5c 0d  ALUES(5, ?);" \.
5db0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5dc0: 61 6d 31 20 49 6e 74 33 32 20 31 33 33 34 34 34  am1 Int32 133444
5dd0: 38 30 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  8000]....  sql e
5de0: 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
5df0: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
5e00: 29 20 56 41 4c 55 45 53 28 36 2c 20 3f 29 3b 22  ) VALUES(6, ?);"
5e10: 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20   \..      [list 
5e20: 70 61 72 61 6d 31 20 49 6e 74 33 32 20 31 33 36  param1 Int32 136
5e30: 35 39 38 34 30 30 30 5d 0d 0a 0d 0a 20 20 73 71  5984000]....  sq
5e40: 6c 20 65 78 65 63 75 74 65 20 2d 76 65 72 62 61  l execute -verba
5e50: 74 69 6d 20 24 64 62 20 22 49 4e 53 45 52 54 20  tim $db "INSERT 
5e60: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5e70: 41 4c 55 45 53 28 37 2c 20 3f 29 3b 22 20 5c 0d  ALUES(7, ?);" \.
5e80: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5e90: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 33 30  am1 DateTime 130
5ea0: 32 38 32 35 36 30 30 5d 0d 0a 0d 0a 20 20 73 71  2825600]....  sq
5eb0: 6c 20 65 78 65 63 75 74 65 20 2d 76 65 72 62 61  l execute -verba
5ec0: 74 69 6d 20 24 64 62 20 22 49 4e 53 45 52 54 20  tim $db "INSERT 
5ed0: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5ee0: 41 4c 55 45 53 28 38 2c 20 3f 29 3b 22 20 5c 0d  ALUES(8, ?);" \.
5ef0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5f00: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 33 33  am1 DateTime 133
5f10: 34 34 34 38 30 30 30 5d 0d 0a 0d 0a 20 20 73 71  4448000]....  sq
5f20: 6c 20 65 78 65 63 75 74 65 20 2d 76 65 72 62 61  l execute -verba
5f30: 74 69 6d 20 24 64 62 20 22 49 4e 53 45 52 54 20  tim $db "INSERT 
5f40: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5f50: 41 4c 55 45 53 28 39 2c 20 3f 29 3b 22 20 5c 0d  ALUES(9, ?);" \.
5f60: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5f70: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 33 36  am1 DateTime 136
5f80: 35 39 38 34 30 30 30 5d 0d 0a 0d 0a 20 20 73 71  5984000]....  sq
5f90: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
5fa0: 74 65 20 72 65 61 64 65 72 20 2d 64 61 74 65 74  te reader -datet
5fb0: 69 6d 65 66 6f 72 6d 61 74 20 5b 67 65 74 44 61  imeformat [getDa
5fc0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 24 64  teTimeFormat] $d
5fd0: 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45  b \..      "SELE
5fe0: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20  CT x, y FROM t1 
5ff0: 4f 52 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d 0a  ORDER BY x;"....
6000: 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b    foreach name [
6010: 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b  lsort -integer [
6020: 61 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73  array names rows
6030: 20 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d   -regexp {^\d+$}
6040: 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e  ]] {..    lappen
6050: 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24  d result [list $
6060: 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65  name $rows($name
6070: 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  )]..  }....  set
6080: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
6090: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
60a0: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
60b0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
60c0: 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65  ain name rows re
60d0: 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
60e0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
60f0: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
6100: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
6110: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
6120: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
6130: 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73  .SQLite} \..-res
6140: 75 6c 74 20 7b 7b 31 20 7b 7b 78 20 31 7d 20 7b  ult {{1 {{x 1} {
6150: 79 20 7b 32 30 31 31 2d 30 34 2d 31 35 20 30 30  y {2011-04-15 00
6160: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 32 20 7b  :00:00Z}}}} {2 {
6170: 7b 78 20 32 7d 20 7b 79 20 7b 32 30 31 32 2d 30  {x 2} {y {2012-0
6180: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
6190: 7d 7d 7d 7d 20 7b 33 20 7b 7b 78 20 33 7d 20 7b  }}}} {3 {{x 3} {
61a0: 79 20 7b 32 30 31 33 2d 30 34 2d 31 35 20 30 30  y {2013-04-15 00
61b0: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 34 20 7b  :00:00Z}}}} {4 {
61c0: 7b 78 20 34 7d 20 7b 79 20 7b 32 30 31 31 2d 30  {x 4} {y {2011-0
61d0: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
61e0: 7d 7d 7d 7d 20 7b 35 20 7b 7b 78 20 35 7d 20 7b  }}}} {5 {{x 5} {
61f0: 79 20 7b 32 30 31 32 2d 30 34 2d 31 35 20 30 30  y {2012-04-15 00
6200: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 36 20 7b  :00:00Z}}}} {6 {
6210: 7b 78 20 36 7d 20 7b 79 20 7b 32 30 31 33 2d 30  {x 6} {y {2013-0
6220: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
6230: 7d 7d 7d 7d 20 7b 37 20 7b 7b 78 20 37 7d 20 7b  }}}} {7 {{x 7} {
6240: 79 20 7b 32 30 31 31 2d 30 34 2d 31 35 20 30 30  y {2011-04-15 00
6250: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 38 20 7b  :00:00Z}}}} {8 {
6260: 7b 78 20 38 7d 20 7b 79 20 7b 32 30 31 32 2d 30  {x 8} {y {2012-0
6270: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
6280: 7d 7d 7d 7d 20 7b 39 20 7b 7b 78 20 39 7d 20 7b  }}}} {9 {{x 9} {
6290: 79 20 7b 32 30 31 33 2d 30 34 2d 31 35 20 30 30  y {2013-04-15 00
62a0: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 7d 7d 0d 0a 0d  :00:00Z}}}}}}...
62b0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
62c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
62f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6300: 0d 0a 0d 0a 73 65 74 20 64 61 74 65 20 5b 63 6c  ....set date [cl
6310: 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63  ock format [cloc
6320: 6b 20 73 65 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d  k seconds] -form
6330: 61 74 20 79 79 79 79 2d 4d 4d 2d 64 64 5d 0d 0a  at yyyy-MM-dd]..
6340: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
6350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6390: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
63a0: 73 74 20 64 61 74 61 2d 31 2e 31 34 20 7b 44 61  st data-1.14 {Da
63b0: 74 65 54 69 6d 65 20 75 73 69 6e 67 20 69 6e 76  teTime using inv
63c0: 61 72 69 61 6e 74 20 63 75 6c 74 75 72 65 7d 20  ariant culture} 
63d0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
63e0: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
63f0: 65 20 64 61 74 61 2d 31 2e 31 34 2e 64 62 5d 20  e data-1.14.db] 
6400: 22 22 20 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  "" InvariantCult
6410: 75 72 65 20 55 74 63 0d 0a 7d 20 2d 62 6f 64 79  ure Utc..} -body
6420: 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74   {..  set result
6430: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c   [list]....  sql
6440: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52   execute $db "CR
6450: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
6460: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6470: 4b 45 59 20 41 53 43 2c 20 79 20 44 41 54 45 54  KEY ASC, y DATET
6480: 49 4d 45 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  IME);"....  sql 
6490: 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
64a0: 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
64b0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
64c0: 45 53 28 31 2c 20 27 57 65 64 6e 65 73 64 61 79  ES(1, 'Wednesday
64d0: 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30  , 16 December 20
64e0: 30 39 27 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  09');"....  sql 
64f0: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
6500: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6510: 79 29 20 56 41 4c 55 45 53 28 32 2c 20 27 31 32  y) VALUES(2, '12
6520: 3a 30 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20  :00:00');"....  
6530: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
6540: 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54  \..      "INSERT
6550: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
6560: 56 41 4c 55 45 53 28 33 2c 20 27 57 65 64 6e 65  VALUES(3, 'Wedne
6570: 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65  sday, 16 Decembe
6580: 72 20 32 30 30 39 20 31 32 3a 30 30 3a 30 30 27  r 2009 12:00:00'
6590: 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  );"....  sql exe
65a0: 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
65b0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
65c0: 56 41 4c 55 45 53 28 34 2c 20 27 31 32 2f 31 36  VALUES(4, '12/16
65d0: 2f 32 30 30 39 27 29 3b 22 0d 0a 20 20 73 71 6c  /2009');"..  sql
65e0: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
65f0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
6600: 20 79 29 20 56 41 4c 55 45 53 28 35 2c 20 27 31   y) VALUES(5, '1
6610: 32 3a 30 30 27 29 3b 22 0d 0a 20 20 73 71 6c 20  2:00');"..  sql 
6620: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
6630: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6640: 79 29 20 56 41 4c 55 45 53 28 36 2c 20 27 31 32  y) VALUES(6, '12
6650: 2f 31 36 2f 32 30 30 39 20 31 32 3a 30 30 27 29  /16/2009 12:00')
6660: 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  ;"....  sql exec
6670: 75 74 65 20 2d 64 61 74 65 74 69 6d 65 6b 69 6e  ute -datetimekin
6680: 64 20 55 74 63 20 24 64 62 20 22 49 4e 53 45 52  d Utc $db "INSER
6690: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
66a0: 20 56 41 4c 55 45 53 28 37 2c 20 3f 29 3b 22 20   VALUES(7, ?);" 
66b0: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
66c0: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 22  aram1 DateTime "
66d0: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
66e0: 63 65 6d 62 65 72 20 32 30 30 39 22 5d 0d 0a 0d  cember 2009"]...
66f0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
6700: 64 61 74 65 74 69 6d 65 6b 69 6e 64 20 55 74 63  datetimekind Utc
6710: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
6720: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
6730: 45 53 28 38 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(8, ?);" \..  
6740: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
6750: 20 44 61 74 65 54 69 6d 65 20 31 32 3a 30 30 3a   DateTime 12:00:
6760: 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  00]....  sql exe
6770: 63 75 74 65 20 2d 64 61 74 65 74 69 6d 65 6b 69  cute -datetimeki
6780: 6e 64 20 55 74 63 20 24 64 62 20 22 49 4e 53 45  nd Utc $db "INSE
6790: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
67a0: 29 20 56 41 4c 55 45 53 28 39 2c 20 3f 29 3b 22  ) VALUES(9, ?);"
67b0: 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20   \..      [list 
67c0: 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20  param1 DateTime 
67d0: 22 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44  "Wednesday, 16 D
67e0: 65 63 65 6d 62 65 72 20 32 30 30 39 20 31 32 3a  ecember 2009 12:
67f0: 30 30 3a 30 30 22 5d 0d 0a 0d 0a 20 20 73 71 6c  00:00"]....  sql
6800: 20 65 78 65 63 75 74 65 20 2d 64 61 74 65 74 69   execute -dateti
6810: 6d 65 6b 69 6e 64 20 55 74 63 20 24 64 62 20 22  mekind Utc $db "
6820: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
6830: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 30 2c  x, y) VALUES(10,
6840: 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b   ?);" \..      [
6850: 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65  list param1 Date
6860: 54 69 6d 65 20 31 32 2f 31 36 2f 32 30 30 39 5d  Time 12/16/2009]
6870: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
6880: 65 20 2d 64 61 74 65 74 69 6d 65 6b 69 6e 64 20  e -datetimekind 
6890: 55 74 63 20 24 64 62 20 22 49 4e 53 45 52 54 20  Utc $db "INSERT 
68a0: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
68b0: 41 4c 55 45 53 28 31 31 2c 20 3f 29 3b 22 20 5c  ALUES(11, ?);" \
68c0: 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61  ..      [list pa
68d0: 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 32  ram1 DateTime 12
68e0: 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  :00]....  sql ex
68f0: 65 63 75 74 65 20 2d 64 61 74 65 74 69 6d 65 6b  ecute -datetimek
6900: 69 6e 64 20 55 74 63 20 24 64 62 20 22 49 4e 53  ind Utc $db "INS
6910: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6920: 79 29 20 56 41 4c 55 45 53 28 31 32 2c 20 3f 29  y) VALUES(12, ?)
6930: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
6940: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
6950: 65 20 22 31 32 2f 31 36 2f 32 30 30 39 20 31 32  e "12/16/2009 12
6960: 3a 30 30 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  :00"]....  sql e
6970: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
6980: 72 65 61 64 65 72 20 2d 64 61 74 65 74 69 6d 65  reader -datetime
6990: 66 6f 72 6d 61 74 20 5b 67 65 74 44 61 74 65 54  format [getDateT
69a0: 69 6d 65 46 6f 72 6d 61 74 5d 20 24 64 62 20 5c  imeFormat] $db \
69b0: 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
69c0: 78 2c 20 43 41 53 54 28 79 20 41 53 20 54 45 58  x, CAST(y AS TEX
69d0: 54 29 20 41 53 20 79 32 20 46 52 4f 4d 20 74 31  T) AS y2 FROM t1
69e0: 20 4f 52 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d   ORDER BY x;"...
69f0: 0a 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20  .  foreach name 
6a00: 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20  [lsort -integer 
6a10: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77  [array names row
6a20: 73 20 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24  s -regexp {^\d+$
6a30: 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65  }]] {..    lappe
6a40: 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  nd result [list 
6a50: 24 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d  $name $rows($nam
6a60: 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  e)]..  }....  se
6a70: 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65  t result..} -cle
6a80: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
6a90: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
6aa0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
6ab0: 6c 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72  lain name rows r
6ac0: 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d  esult db fileNam
6ad0: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
6ae0: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
6af0: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
6b00: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
6b10: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
6b20: 61 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65  a.SQLite} \..-re
6b30: 73 75 6c 74 20 5b 73 75 62 73 74 20 7b 7b 31 20  sult [subst {{1 
6b40: 7b 7b 78 20 31 7d 20 7b 79 32 20 7b 57 65 64 6e  {{x 1} {y2 {Wedn
6b50: 65 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62  esday, 16 Decemb
6b60: 65 72 20 32 30 30 39 7d 7d 7d 7d 20 7b 32 20 7b  er 2009}}}} {2 {
6b70: 7b 78 20 32 7d 20 7b 79 32 5c 0d 0a 31 32 3a 30  {x 2} {y2\..12:0
6b80: 30 3a 30 30 7d 7d 7d 20 7b 33 20 7b 7b 78 20 33  0:00}}} {3 {{x 3
6b90: 7d 20 7b 79 32 20 7b 57 65 64 6e 65 73 64 61 79  } {y2 {Wednesday
6ba0: 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30  , 16 December 20
6bb0: 30 39 20 31 32 3a 30 30 3a 30 30 7d 7d 7d 7d 20  09 12:00:00}}}} 
6bc0: 7b 34 20 7b 7b 78 20 34 7d 5c 0d 0a 7b 79 32 20  {4 {{x 4}\..{y2 
6bd0: 31 32 2f 31 36 2f 32 30 30 39 7d 7d 7d 20 7b 35  12/16/2009}}} {5
6be0: 20 7b 7b 78 20 35 7d 20 7b 79 32 20 31 32 3a 30   {{x 5} {y2 12:0
6bf0: 30 7d 7d 7d 20 7b 36 20 7b 7b 78 20 36 7d 20 7b  0}}} {6 {{x 6} {
6c00: 79 32 20 7b 31 32 2f 31 36 2f 32 30 30 39 20 31  y2 {12/16/2009 1
6c10: 32 3a 30 30 7d 7d 7d 7d 20 7b 37 5c 0d 0a 7b 7b  2:00}}}} {7\..{{
6c20: 78 20 37 7d 20 7b 79 32 20 32 30 30 39 2d 31 32  x 7} {y2 2009-12
6c30: 2d 31 36 54 30 30 3a 30 30 3a 30 30 2e 30 30 30  -16T00:00:00.000
6c40: 30 30 30 30 5a 7d 7d 7d 20 7b 38 20 7b 7b 78 20  0000Z}}} {8 {{x 
6c50: 38 7d 20 7b 79 32 5c 0d 0a 24 7b 64 61 74 65 7d  8} {y2\..${date}
6c60: 54 31 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30  T12:00:00.000000
6c70: 30 5a 7d 7d 7d 20 7b 39 20 7b 7b 78 20 39 7d 20  0Z}}} {9 {{x 9} 
6c80: 7b 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54 31  {y2 2009-12-16T1
6c90: 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a  2:00:00.0000000Z
6ca0: 7d 7d 7d 5c 0d 0a 7b 31 30 20 7b 7b 78 20 31 30  }}}\..{10 {{x 10
6cb0: 7d 20 7b 79 32 20 32 30 30 39 2d 31 32 2d 31 36  } {y2 2009-12-16
6cc0: 54 30 30 3a 30 30 3a 30 30 2e 30 30 30 30 30 30  T00:00:00.000000
6cd0: 30 5a 7d 7d 7d 20 7b 31 31 20 7b 7b 78 20 31 31  0Z}}} {11 {{x 11
6ce0: 7d 20 7b 79 32 5c 0d 0a 24 7b 64 61 74 65 7d 54  } {y2\..${date}T
6cf0: 31 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30  12:00:00.0000000
6d00: 5a 7d 7d 7d 20 7b 31 32 20 7b 7b 78 20 31 32 7d  Z}}} {12 {{x 12}
6d10: 20 7b 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54   {y2 2009-12-16T
6d20: 31 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30  12:00:00.0000000
6d30: 5a 7d 7d 7d 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23  Z}}}}]}....#####
6d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d80: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
6d90: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
6da0: 2d 31 2e 31 35 20 7b 44 61 74 65 54 69 6d 65 20  -1.15 {DateTime 
6db0: 75 73 69 6e 67 20 63 75 72 72 65 6e 74 20 63 75  using current cu
6dc0: 6c 74 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0d  lture} -setup {.
6dd0: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
6de0: 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
6df0: 31 35 2e 64 62 5d 20 22 22 20 43 75 72 72 65 6e  15.db] "" Curren
6e00: 74 43 75 6c 74 75 72 65 20 55 74 63 0d 0a 7d 20  tCulture Utc..} 
6e10: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72  -body {..  set r
6e20: 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
6e30: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
6e40: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
6e50: 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t1(x INTEGER PRI
6e60: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 20  MARY KEY ASC, y 
6e70: 44 41 54 45 54 49 4d 45 29 3b 22 0d 0a 0d 0a 20  DATETIME);".... 
6e80: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6e90: 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52   \..      "INSER
6ea0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
6eb0: 20 56 41 4c 55 45 53 28 31 2c 20 27 57 65 64 6e   VALUES(1, 'Wedn
6ec0: 65 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62  esday, 16 Decemb
6ed0: 65 72 20 32 30 30 39 27 29 3b 22 0d 0a 0d 0a 20  er 2009');".... 
6ee0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6ef0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
6f00: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32   (x, y) VALUES(2
6f10: 2c 20 27 31 32 3a 30 30 3a 30 30 27 29 3b 22 0d  , '12:00:00');".
6f20: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6f30: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
6f40: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6f50: 2c 20 79 29 20 56 41 4c 55 45 53 28 33 2c 20 27  , y) VALUES(3, '
6f60: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
6f70: 63 65 6d 62 65 72 20 32 30 30 39 20 31 32 3a 30  cember 2009 12:0
6f80: 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20 73 71  0:00');"....  sq
6f90: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
6fa0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6fb0: 2c 20 79 29 20 56 41 4c 55 45 53 28 34 2c 20 27  , y) VALUES(4, '
6fc0: 31 32 2f 31 36 2f 32 30 30 39 27 29 3b 22 0d 0a  12/16/2009');"..
6fd0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
6fe0: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
6ff0: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
7000: 35 2c 20 27 31 32 3a 30 30 27 29 3b 22 0d 0a 20  5, '12:00');".. 
7010: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
7020: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
7030: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 36   (x, y) VALUES(6
7040: 2c 20 27 31 32 2f 31 36 2f 32 30 30 39 20 31 32  , '12/16/2009 12
7050: 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c  :00');"....  sql
7060: 20 65 78 65 63 75 74 65 20 2d 64 61 74 65 74 69   execute -dateti
7070: 6d 65 6b 69 6e 64 20 55 74 63 20 24 64 62 20 22  mekind Utc $db "
7080: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
7090: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 37 2c 20  x, y) VALUES(7, 
70a0: 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  ?);" \..      [l
70b0: 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54  ist param1 DateT
70c0: 69 6d 65 20 22 57 65 64 6e 65 73 64 61 79 2c 20  ime "Wednesday, 
70d0: 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39  16 December 2009
70e0: 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  "]....  sql exec
70f0: 75 74 65 20 2d 64 61 74 65 74 69 6d 65 6b 69 6e  ute -datetimekin
7100: 64 20 55 74 63 20 24 64 62 20 22 49 4e 53 45 52  d Utc $db "INSER
7110: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
7120: 20 56 41 4c 55 45 53 28 38 2c 20 3f 29 3b 22 20   VALUES(8, ?);" 
7130: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
7140: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31  aram1 DateTime 1
7150: 32 3a 30 30 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71  2:00:00]....  sq
7160: 6c 20 65 78 65 63 75 74 65 20 2d 64 61 74 65 74  l execute -datet
7170: 69 6d 65 6b 69 6e 64 20 55 74 63 20 24 64 62 20  imekind Utc $db 
7180: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
7190: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 39 2c  (x, y) VALUES(9,
71a0: 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b   ?);" \..      [
71b0: 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65  list param1 Date
71c0: 54 69 6d 65 20 22 57 65 64 6e 65 73 64 61 79 2c  Time "Wednesday,
71d0: 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30   16 December 200
71e0: 39 20 31 32 3a 30 30 3a 30 30 22 5d 0d 0a 0d 0a  9 12:00:00"]....
71f0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 64    sql execute -d
7200: 61 74 65 74 69 6d 65 6b 69 6e 64 20 55 74 63 20  atetimekind Utc 
7210: 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $db "INSERT INTO
7220: 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45   t1 (x, y) VALUE
7230: 53 28 31 30 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  S(10, ?);" \..  
7240: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
7250: 20 44 61 74 65 54 69 6d 65 20 31 32 2f 31 36 2f   DateTime 12/16/
7260: 32 30 30 39 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  2009]....  sql e
7270: 78 65 63 75 74 65 20 2d 64 61 74 65 74 69 6d 65  xecute -datetime
7280: 6b 69 6e 64 20 55 74 63 20 24 64 62 20 22 49 4e  kind Utc $db "IN
7290: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
72a0: 20 79 29 20 56 41 4c 55 45 53 28 31 31 2c 20 3f   y) VALUES(11, ?
72b0: 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69  );" \..      [li
72c0: 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69  st param1 DateTi
72d0: 6d 65 20 31 32 3a 30 30 5d 0d 0a 0d 0a 20 20 73  me 12:00]....  s
72e0: 71 6c 20 65 78 65 63 75 74 65 20 2d 64 61 74 65  ql execute -date
72f0: 74 69 6d 65 6b 69 6e 64 20 55 74 63 20 24 64 62  timekind Utc $db
7300: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
7310: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31   (x, y) VALUES(1
7320: 32 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20  2, ?);" \..     
7330: 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61   [list param1 Da
7340: 74 65 54 69 6d 65 20 22 31 32 2f 31 36 2f 32 30  teTime "12/16/20
7350: 30 39 20 31 32 3a 30 30 22 5d 0d 0a 0d 0a 20 20  09 12:00"]....  
7360: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
7370: 63 75 74 65 20 72 65 61 64 65 72 20 2d 64 61 74  cute reader -dat
7380: 65 74 69 6d 65 66 6f 72 6d 61 74 20 5b 67 65 74  etimeformat [get
7390: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20  DateTimeFormat] 
73a0: 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45  $db \..      "SE
73b0: 4c 45 43 54 20 78 2c 20 43 41 53 54 28 79 20 41  LECT x, CAST(y A
73c0: 53 20 54 45 58 54 29 20 41 53 20 79 32 20 46 52  S TEXT) AS y2 FR
73d0: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78  OM t1 ORDER BY x
73e0: 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20  ;"....  foreach 
73f0: 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74  name [lsort -int
7400: 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61 6d 65  eger [array name
7410: 73 20 72 6f 77 73 20 2d 72 65 67 65 78 70 20 7b  s rows -regexp {
7420: 5e 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20  ^\d+$}]] {..    
7430: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
7440: 6c 69 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73  list $name $rows
7450: 28 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d  ($name)]..  }...
7460: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
7470: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
7480: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
7490: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
74a0: 6f 63 6f 6d 70 6c 61 69 6e 20 6e 61 6d 65 20 72  ocomplain name r
74b0: 6f 77 73 20 72 65 73 75 6c 74 20 64 62 20 66 69  ows result db fi
74c0: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
74d0: 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
74e0: 20 63 75 6c 74 75 72 65 2e 69 6e 76 61 72 69 61   culture.invaria
74f0: 6e 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  nt monoBug28 com
7500: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
7510: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
7520: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
7530: 65 7d 20 2d 72 65 73 75 6c 74 20 5b 73 75 62 73  e} -result [subs
7540: 74 20 7b 7b 31 20 7b 7b 78 20 31 7d 20 7b 79 32  t {{1 {{x 1} {y2
7550: 20 7b 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20   {Wednesday, 16 
7560: 44 65 63 65 6d 62 65 72 5c 0d 0a 32 30 30 39 7d  December\..2009}
7570: 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b 79  }}} {2 {{x 2} {y
7580: 32 20 31 32 3a 30 30 3a 30 30 7d 7d 7d 20 7b 33  2 12:00:00}}} {3
7590: 20 7b 7b 78 20 33 7d 20 7b 79 32 20 7b 57 65 64   {{x 3} {y2 {Wed
75a0: 6e 65 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d  nesday, 16 Decem
75b0: 62 65 72 20 32 30 30 39 5c 0d 0a 31 32 3a 30 30  ber 2009\..12:00
75c0: 3a 30 30 7d 7d 7d 7d 20 7b 34 20 7b 7b 78 20 34  :00}}}} {4 {{x 4
75d0: 7d 20 7b 79 32 20 31 32 2f 31 36 2f 32 30 30 39  } {y2 12/16/2009
75e0: 7d 7d 7d 20 7b 35 20 7b 7b 78 20 35 7d 20 7b 79  }}} {5 {{x 5} {y
75f0: 32 20 31 32 3a 30 30 7d 7d 7d 20 7b 36 20 7b 7b  2 12:00}}} {6 {{
7600: 78 20 36 7d 20 7b 79 32 5c 0d 0a 7b 31 32 2f 31  x 6} {y2\..{12/1
7610: 36 2f 32 30 30 39 20 31 32 3a 30 30 7d 7d 7d 7d  6/2009 12:00}}}}
7620: 20 7b 37 20 7b 7b 78 20 37 7d 20 7b 79 32 20 32   {7 {{x 7} {y2 2
7630: 30 30 39 2d 31 32 2d 31 36 54 30 30 3a 30 30 3a  009-12-16T00:00:
7640: 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b  00.0000000Z}}} {
7650: 38 20 7b 7b 78 20 38 7d 5c 0d 0a 7b 79 32 20 24  8 {{x 8}\..{y2 $
7660: 7b 64 61 74 65 7d 54 31 32 3a 30 30 3a 30 30 2e  {date}T12:00:00.
7670: 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b 39 20 7b  0000000Z}}} {9 {
7680: 7b 78 20 39 7d 20 7b 79 32 20 32 30 30 39 2d 31  {x 9} {y2 2009-1
7690: 32 2d 31 36 54 31 32 3a 30 30 3a 30 30 2e 30 30  2-16T12:00:00.00
76a0: 30 30 30 30 30 5a 7d 7d 7d 5c 0d 0a 7b 31 30 20  00000Z}}}\..{10 
76b0: 7b 7b 78 20 31 30 7d 20 7b 79 32 20 32 30 30 39  {{x 10} {y2 2009
76c0: 2d 31 32 2d 31 36 54 30 30 3a 30 30 3a 30 30 2e  -12-16T00:00:00.
76d0: 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b 31 31 20  0000000Z}}} {11 
76e0: 7b 7b 78 20 31 31 7d 20 7b 79 32 5c 0d 0a 24 7b  {{x 11} {y2\..${
76f0: 64 61 74 65 7d 54 31 32 3a 30 30 3a 30 30 2e 30  date}T12:00:00.0
7700: 30 30 30 30 30 30 5a 7d 7d 7d 20 7b 31 32 20 7b  000000Z}}} {12 {
7710: 7b 78 20 31 32 7d 20 7b 79 32 20 32 30 30 39 2d  {x 12} {y2 2009-
7720: 31 32 2d 31 36 54 31 32 3a 30 30 3a 30 30 2e 30  12-16T12:00:00.0
7730: 30 30 30 30 30 30 5a 7d 7d 7d 7d 5d 7d 0d 0a 0d  000000Z}}}}]}...
7740: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
7750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7790: 0d 0a 0d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ....unset -nocom
77a0: 70 6c 61 69 6e 20 64 61 74 65 0d 0a 0d 0a 23 23  plain date....##
77b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
77f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
7800: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
7810: 61 74 61 2d 31 2e 31 36 20 7b 53 51 4c 69 74 65  ata-1.16 {SQLite
7820: 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67  ConnectionString
7830: 42 75 69 6c 64 65 72 20 44 61 74 65 54 69 6d 65  Builder DateTime
7840: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
7850: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
7860: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
7870: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
7880: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
7890: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
78a0: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
78b0: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
78c0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
78d0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
78e0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
78f0: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
7900: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
7910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
7920: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
7930: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
7940: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
7950: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
7960: 67 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53  g GetConnectionS
7970: 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
7980: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 2c    string format,
7990: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
79a0: 6e 67 20 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20  ng kind,..      
79b0: 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
79c0: 74 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20 20  tString..       
79d0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
79e0: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
79f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  eConnectionStrin
7a00: 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
7a10: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
7a20: 20 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e    new SQLiteConn
7a30: 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c  ectionStringBuil
7a40: 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  der();....      
7a50: 20 20 20 20 62 75 69 6c 64 65 72 2e 41 64 64 28      builder.Add(
7a60: 22 44 61 74 61 20 53 6f 75 72 63 65 22 2c 20 22  "Data Source", "
7a70: 74 65 73 74 2e 64 62 22 29 3b 0d 0a 20 20 20 20  test.db");..    
7a80: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 64        builder.Ad
7a90: 64 28 22 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  d("DateTimeForma
7aa0: 74 22 2c 20 66 6f 72 6d 61 74 29 3b 0d 0a 20 20  t", format);..  
7ab0: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
7ac0: 41 64 64 28 22 44 61 74 65 54 69 6d 65 4b 69 6e  Add("DateTimeKin
7ad0: 64 22 2c 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20  d", kind);..    
7ae0: 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 64        builder.Ad
7af0: 64 28 22 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  d("DateTimeForma
7b00: 74 53 74 72 69 6e 67 22 2c 20 66 6f 72 6d 61 74  tString", format
7b10: 53 74 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  String);....    
7b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 75 69        return bui
7b30: 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b  lder.ToString();
7b40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
7b50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7ba0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
7bb0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
7bc0: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
7bd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
7be0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7bf0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
7c00: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 66    }..  }] true f
7c10: 61 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c 74  alse true result
7c20: 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e  s errors System.
7c30: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
7c40: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
7c50: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
7c60: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
7c70: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
7c80: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
7c90: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
7ca0: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
7cb0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
7cc0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
7cd0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
7ce0: 73 74 24 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65  st${id} GetConne
7cf0: 63 74 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20  ctionString \.. 
7d00: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 20             null 
7d10: 6e 75 6c 6c 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  null null..     
7d20: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
7d30: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
7d40: 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20  result \..      
7d50: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
7d60: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
7d70: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
7d80: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
7d90: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
7da0: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  etConnectionStri
7db0: 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng \..          
7dc0: 20 20 44 65 66 61 75 6c 74 20 6e 75 6c 6c 20 6e    Default null n
7dd0: 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  ull..      } res
7de0: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
7df0: 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74  lt ""]}] $result
7e00: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
7e10: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
7e20: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
7e30: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
7e40: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
7e50: 65 73 74 24 7b 69 64 7d 20 47 65 74 43 6f 6e 6e  est${id} GetConn
7e60: 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a  ectionString \..
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
7e80: 20 55 6e 73 70 65 63 69 66 69 65 64 20 6e 75 6c   Unspecified nul
7e90: 6c 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  l..      } resul
7ea0: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
7eb0: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c   ""]}] $result \
7ec0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
7ed0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
7ee0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
7ef0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
7f00: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
7f10: 74 24 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63  t${id} GetConnec
7f20: 74 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20  tionString \..  
7f30: 20 20 20 20 20 20 20 20 20 20 49 53 4f 38 36 30            ISO860
7f40: 31 20 55 74 63 20 6e 75 6c 6c 0d 0a 20 20 20 20  1 Utc null..    
7f50: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
7f60: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
7f70: 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20  $result \..     
7f80: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
7f90: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
7fa0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
7fb0: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
7fc0: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
7fd0: 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72  GetConnectionStr
7fe0: 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ing \..         
7ff0: 20 20 20 54 69 63 6b 73 20 4c 6f 63 61 6c 20 79     Ticks Local y
8000: 79 79 79 2d 4d 4d 2d 64 64 0d 0a 20 20 20 20 20  yyy-MM-dd..     
8010: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
8020: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
8030: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
8040: 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  up {..  unset -n
8050: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
8060: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
8070: 63 6f 64 65 20 69 64 0d 0a 7d 20 2d 63 6f 6e 73  code id..} -cons
8080: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
8090: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
80a0: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
80b0: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
80c0: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
80d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d  .Data.SQLite com
80e0: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
80f0: 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c  ch regexp -resul
8100: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
8110: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
8120: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
8130: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 44 61  #\d+ \{\} 0 \{Da
8140: 74 61 20 53 6f 75 72 63 65 3d 74 65 73 74 5c 2e  ta Source=test\.
8150: 64 62 5c 7d 20 30 5c 0d 0a 5c 7b 44 61 74 61 20  db\} 0\..\{Data 
8160: 53 6f 75 72 63 65 3d 74 65 73 74 5c 2e 64 62 3b  Source=test\.db;
8170: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 28  DateTimeFormat=(
8180: 3f 3a 44 65 66 61 75 6c 74 7c 49 53 4f 38 36 30  ?:Default|ISO860
8190: 31 29 5c 7d 20 30 20 5c 7b 44 61 74 61 5c 0d 0a  1)\} 0 \{Data\..
81a0: 53 6f 75 72 63 65 3d 74 65 73 74 5c 2e 64 62 3b  Source=test\.db;
81b0: 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 55 6e 73  DateTimeKind=Uns
81c0: 70 65 63 69 66 69 65 64 5c 7d 20 30 20 5c 7b 44  pecified\} 0 \{D
81d0: 61 74 61 5c 0d 0a 53 6f 75 72 63 65 3d 74 65 73  ata\..Source=tes
81e0: 74 5c 2e 64 62 3b 44 61 74 65 54 69 6d 65 46 6f  t\.db;DateTimeFo
81f0: 72 6d 61 74 3d 28 3f 3a 44 65 66 61 75 6c 74 7c  rmat=(?:Default|
8200: 49 53 4f 38 36 30 31 29 3b 44 61 74 65 54 69 6d  ISO8601);DateTim
8210: 65 4b 69 6e 64 3d 55 74 63 5c 7d 20 30 20 5c 7b  eKind=Utc\} 0 \{
8220: 44 61 74 61 5c 0d 0a 53 6f 75 72 63 65 3d 74 65  Data\..Source=te
8230: 73 74 5c 2e 64 62 3b 44 61 74 65 54 69 6d 65 46  st\.db;DateTimeF
8240: 6f 72 6d 61 74 3d 54 69 63 6b 73 3b 44 61 74 65  ormat=Ticks;Date
8250: 54 69 6d 65 4b 69 6e 64 3d 4c 6f 63 61 6c 3b 44  TimeKind=Local;D
8260: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74 72  ateTimeFormatStr
8270: 69 6e 67 3d 79 79 79 79 2d 4d 4d 2d 64 64 5c 7d  ing=yyyy-MM-dd\}
8280: 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  $}}....#########
8290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
82d0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
82e0: 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 31  t {test data-1.1
82f0: 37 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  7 {SQLiteConnect
8300: 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ionStringBuilder
8310: 20 70 72 6f 70 65 72 74 69 65 73 7d 20 2d 62 6f   properties} -bo
8320: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
8330: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
8340: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
8350: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 0d 0a 20  ive NextId].... 
8360: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
8370: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
8380: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
8390: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
83a0: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
83b0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
83c0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
83d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
83e0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
83f0: 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 20 20 20  Reflection;..   
8400: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65   using System.Te
8410: 78 74 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73  xt;....    names
8420: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
8430: 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d}..    {..     
8440: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
8450: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
8460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8470: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
8480: 73 74 72 69 6e 67 20 54 6f 48 65 78 53 74 72 69  string ToHexStri
8490: 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 62  ng(..          b
84a0: 79 74 65 5c 5b 5c 5d 20 61 72 72 61 79 0d 0a 20  yte\[\] array.. 
84b0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
84c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
84d0: 20 69 66 20 28 61 72 72 61 79 20 3d 3d 20 6e 75   if (array == nu
84e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
84f0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
8500: 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e  .          Strin
8510: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
8520: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
8530: 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  der();....      
8540: 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
8550: 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a   array.Length;..
8560: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20  ..          for 
8570: 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
8580: 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
8590: 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
85a0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
85b0: 65 6e 64 46 6f 72 6d 61 74 28 22 7b 30 3a 78 32  endFormat("{0:x2
85c0: 7d 22 2c 20 61 72 72 61 79 5c 5b 69 6e 64 65 78  }", array\[index
85d0: 5c 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  \]);....        
85e0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
85f0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
8600: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8610: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8660: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
8670: 69 63 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e  ic string GetCon
8680: 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 28 0d 0a  nectionString(..
8690: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
86a0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
86b0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c 0d 0a   string value,..
86c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
86d0: 20 70 72 6f 70 65 72 74 79 4e 61 6d 65 0d 0a 20   propertyName.. 
86e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
86f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8700: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8710: 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62  nStringBuilder b
8720: 75 69 6c 64 65 72 20 3d 0d 0a 20 20 20 20 20 20  uilder =..      
8730: 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
8740: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  teConnectionStri
8750: 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a  ngBuilder();....
8760: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
8770: 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
8780: 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e          builder.
8790: 41 64 64 28 6b 65 79 2c 20 76 61 6c 75 65 29 3b  Add(key, value);
87a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  ....          ob
87b0: 6a 65 63 74 20 70 72 6f 70 65 72 74 79 56 61 6c  ject propertyVal
87c0: 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ue = null;....  
87d0: 20 20 20 20 20 20 20 20 69 66 20 28 70 72 6f 70          if (prop
87e0: 65 72 74 79 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  ertyName != null
87f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
8800: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 70              prop
8810: 65 72 74 79 56 61 6c 75 65 20 3d 20 74 79 70 65  ertyValue = type
8820: 6f 66 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  of(SQLiteConnect
8830: 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ionStringBuilder
8840: 29 2e 49 6e 76 6f 6b 65 4d 65 6d 62 65 72 28 0d  ).InvokeMember(.
8850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8860: 20 70 72 6f 70 65 72 74 79 4e 61 6d 65 2c 20 42   propertyName, B
8870: 69 6e 64 69 6e 67 46 6c 61 67 73 2e 49 6e 73 74  indingFlags.Inst
8880: 61 6e 63 65 20 7c 20 42 69 6e 64 69 6e 67 46 6c  ance | BindingFl
8890: 61 67 73 2e 50 75 62 6c 69 63 20 7c 0d 0a 20 20  ags.Public |..  
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 69                Bi
88b0: 6e 64 69 6e 67 46 6c 61 67 73 2e 47 65 74 50 72  ndingFlags.GetPr
88c0: 6f 70 65 72 74 79 2c 20 6e 75 6c 6c 2c 20 62 75  operty, null, bu
88d0: 69 6c 64 65 72 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  ilder, null);.. 
88e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
88f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
8900: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
8910: 7d 2c 20 7b 31 7d 22 2c 20 28 70 72 6f 70 65 72  }, {1}", (proper
8920: 74 79 56 61 6c 75 65 20 69 73 20 62 79 74 65 5c  tyValue is byte\
8930: 5b 5c 5d 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  [\]) ?..        
8940: 20 20 20 20 20 20 54 6f 48 65 78 53 74 72 69 6e        ToHexStrin
8950: 67 28 28 62 79 74 65 5c 5b 5c 5d 29 70 72 6f 70  g((byte\[\])prop
8960: 65 72 74 79 56 61 6c 75 65 29 20 3a 20 70 72 6f  ertyValue) : pro
8970: 70 65 72 74 79 56 61 6c 75 65 2c 20 62 75 69 6c  pertyValue, buil
8980: 64 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  der);..        }
8990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
89f0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
8a00: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
8a10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
8a20: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8a30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8a40: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
8a50: 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20 72  rue false true r
8a60: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79  esults errors Sy
8a70: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
8a80: 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  .dll]....  lappe
8a90: 6e 64 20 72 65 73 75 6c 74 73 20 24 63 6f 64 65  nd results $code
8aa0: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
8ab0: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
8ac0: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 0d 0a 0d  errors : ""}]...
8ad0: 0a 20 20 69 66 20 7b 24 63 6f 64 65 20 65 71 20  .  if {$code eq 
8ae0: 22 4f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  "Ok"} then {..  
8af0: 20 20 73 65 74 20 6b 65 79 73 20 5b 6c 69 73 74    set keys [list
8b00: 20 6e 75 6c 6c 20 56 65 72 73 69 6f 6e 20 53 79   null Version Sy
8b10: 6e 63 68 72 6f 6e 6f 75 73 20 55 73 65 55 54 46  nchronous UseUTF
8b20: 31 36 45 6e 63 6f 64 69 6e 67 20 50 6f 6f 6c 69  16Encoding Pooli
8b30: 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng \..          
8b40: 20 20 20 20 20 20 20 20 20 42 69 6e 61 72 79 47           BinaryG
8b50: 55 49 44 20 22 44 61 74 61 20 53 6f 75 72 63 65  UID "Data Source
8b60: 22 20 55 72 69 20 46 75 6c 6c 55 72 69 20 22 44  " Uri FullUri "D
8b70: 65 66 61 75 6c 74 20 54 69 6d 65 6f 75 74 22 20  efault Timeout" 
8b80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
8b90: 20 20 20 20 20 20 45 6e 6c 69 73 74 20 46 61 69        Enlist Fai
8ba0: 6c 49 66 4d 69 73 73 69 6e 67 20 22 4c 65 67 61  lIfMissing "Lega
8bb0: 63 79 20 46 6f 72 6d 61 74 22 20 22 52 65 61 64  cy Format" "Read
8bc0: 20 4f 6e 6c 79 22 20 5c 0d 0a 20 20 20 20 20 20   Only" \..      
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 73               Pas
8be0: 73 77 6f 72 64 20 22 50 61 67 65 20 53 69 7a 65  sword "Page Size
8bf0: 22 20 22 4d 61 78 20 50 61 67 65 20 43 6f 75 6e  " "Max Page Coun
8c00: 74 22 20 22 43 61 63 68 65 20 53 69 7a 65 22 20  t" "Cache Size" 
8c10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
8c20: 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 46 6f        DateTimeFo
8c30: 72 6d 61 74 20 44 61 74 65 54 69 6d 65 4b 69 6e  rmat DateTimeKin
8c40: 64 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  d DateTimeFormat
8c50: 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20  String \..      
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 42 61 73               Bas
8c70: 65 53 63 68 65 6d 61 4e 61 6d 65 20 22 4a 6f 75  eSchemaName "Jou
8c80: 72 6e 61 6c 20 4d 6f 64 65 22 20 22 44 65 66 61  rnal Mode" "Defa
8c90: 75 6c 74 20 49 73 6f 6c 61 74 69 6f 6e 4c 65 76  ult IsolationLev
8ca0: 65 6c 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  el" \..         
8cb0: 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 65 69            "Forei
8cc0: 67 6e 20 4b 65 79 73 22 20 46 6c 61 67 73 20 53  gn Keys" Flags S
8cd0: 65 74 44 65 66 61 75 6c 74 73 20 54 6f 46 75 6c  etDefaults ToFul
8ce0: 6c 50 61 74 68 20 48 65 78 50 61 73 73 77 6f 72  lPath HexPasswor
8cf0: 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d \..           
8d00: 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 44          DefaultD
8d10: 62 54 79 70 65 20 44 65 66 61 75 6c 74 54 79 70  bType DefaultTyp
8d20: 65 4e 61 6d 65 20 4e 6f 53 68 61 72 65 64 46 6c  eName NoSharedFl
8d30: 61 67 73 20 50 72 65 70 61 72 65 52 65 74 72 69  ags PrepareRetri
8d40: 65 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  es \..          
8d50: 20 20 20 20 20 20 20 20 20 5a 69 70 56 66 73 56           ZipVfsV
8d60: 65 72 73 69 6f 6e 20 56 66 73 4e 61 6d 65 20 42  ersion VfsName B
8d70: 75 73 79 54 69 6d 65 6f 75 74 20 50 72 6f 67 72  usyTimeout Progr
8d80: 65 73 73 4f 70 73 20 5c 0d 0a 20 20 20 20 20 20  essOps \..      
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 6f 44               NoD
8da0: 65 66 61 75 6c 74 46 6c 61 67 73 20 22 52 65 63  efaultFlags "Rec
8db0: 75 72 73 69 76 65 20 54 72 69 67 67 65 72 73 22  ursive Triggers"
8dc0: 20 57 61 69 74 54 69 6d 65 6f 75 74 5d 0d 0a 0d   WaitTimeout]...
8dd0: 0a 20 20 20 20 73 65 74 20 76 61 6c 75 65 73 20  .    set values 
8de0: 5b 6c 69 73 74 20 6e 75 6c 6c 20 33 20 4e 6f 72  [list null 3 Nor
8df0: 6d 61 6c 20 54 72 75 65 20 46 61 6c 73 65 20 5c  mal True False \
8e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e10: 20 20 20 20 20 20 20 54 72 75 65 20 74 65 73 74         True test
8e20: 2e 64 62 20 74 65 73 74 2e 64 62 20 66 69 6c 65  .db test.db file
8e30: 3a 74 65 73 74 2e 64 62 20 36 30 20 5c 0d 0a 20  :test.db 60 \.. 
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 46 61 6c 73 65 20 54 72 75 65 20 46      False True F
8e60: 61 6c 73 65 20 54 72 75 65 20 5c 0d 0a 20 20 20  alse True \..   
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e80: 20 20 73 65 63 72 65 74 20 34 30 39 36 20 31 30    secret 4096 10
8e90: 32 34 20 38 31 39 32 20 5c 0d 0a 20 20 20 20 20  24 8192 \..     
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8eb0: 55 6e 69 78 45 70 6f 63 68 20 55 74 63 20 79 79  UnixEpoch Utc yy
8ec0: 79 79 2d 4d 4d 2d 64 64 20 73 71 6c 69 74 65 5f  yy-MM-dd sqlite_
8ed0: 73 63 68 65 6d 61 20 5c 0d 0a 20 20 20 20 20 20  schema \..      
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
8ef0: 65 6d 6f 72 79 20 53 65 72 69 61 6c 69 7a 61 62  emory Serializab
8f00: 6c 65 20 46 61 6c 73 65 20 5c 0d 0a 20 20 20 20  le False \..    
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f20: 20 44 65 66 61 75 6c 74 20 46 61 6c 73 65 20 46   Default False F
8f30: 61 6c 73 65 20 37 33 36 35 36 33 37 32 36 35 37  alse 73656372657
8f40: 34 20 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20  4 String \..    
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 54 45 58 54 20 54 72 75 65 20 32 30 20 76 32   TEXT True 20 v2
8f70: 20 74 65 73 74 20 31 30 30 30 20 32 30 30 30 20   test 1000 2000 
8f80: 54 72 75 65 20 54 72 75 65 20 33 30 30 30 30 5d  True True 30000]
8f90: 0d 0a 0d 0a 20 20 20 20 73 65 74 20 70 72 6f 70  ....    set prop
8fa0: 65 72 74 79 4e 61 6d 65 73 20 5b 6c 69 73 74 20  ertyNames [list 
8fb0: 6e 75 6c 6c 20 56 65 72 73 69 6f 6e 20 53 79 6e  null Version Syn
8fc0: 63 4d 6f 64 65 20 55 73 65 55 54 46 31 36 45 6e  cMode UseUTF16En
8fd0: 63 6f 64 69 6e 67 20 50 6f 6f 6c 69 6e 67 20 5c  coding Pooling \
8fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 69                Bi
9000: 6e 61 72 79 47 55 49 44 20 44 61 74 61 53 6f 75  naryGUID DataSou
9010: 72 63 65 20 55 72 69 20 46 75 6c 6c 55 72 69 20  rce Uri FullUri 
9020: 44 65 66 61 75 6c 74 54 69 6d 65 6f 75 74 20 5c  DefaultTimeout \
9030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e                En
9050: 6c 69 73 74 20 46 61 69 6c 49 66 4d 69 73 73 69  list FailIfMissi
9060: 6e 67 20 4c 65 67 61 63 79 46 6f 72 6d 61 74 20  ng LegacyFormat 
9070: 52 65 61 64 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20  ReadOnly \..    
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 20 20 20 20 20 20 20 50 61 73 73 77 6f 72 64          Password
90a0: 20 50 61 67 65 53 69 7a 65 20 4d 61 78 50 61 67   PageSize MaxPag
90b0: 65 43 6f 75 6e 74 20 43 61 63 68 65 53 69 7a 65  eCount CacheSize
90c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 44  DateTimeFormat D
90f0: 61 74 65 54 69 6d 65 4b 69 6e 64 20 44 61 74 65  ateTimeKind Date
9100: 54 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67  TimeFormatString
9110: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 4a  BaseSchemaName J
9140: 6f 75 72 6e 61 6c 4d 6f 64 65 20 44 65 66 61 75  ournalMode Defau
9150: 6c 74 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c  ltIsolationLevel
9160: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 46 6f 72 65 69 67 6e 4b 65 79 73 20 46 6c 61 67  ForeignKeys Flag
9190: 73 20 53 65 74 44 65 66 61 75 6c 74 73 20 54 6f  s SetDefaults To
91a0: 46 75 6c 6c 50 61 74 68 20 5c 0d 0a 20 20 20 20  FullPath \..    
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 20 20 20 20 48 65 78 50 61 73 73 77          HexPassw
91d0: 6f 72 64 20 44 65 66 61 75 6c 74 44 62 54 79 70  ord DefaultDbTyp
91e0: 65 20 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d  e DefaultTypeNam
91f0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..           
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9210: 20 4e 6f 53 68 61 72 65 64 46 6c 61 67 73 20 50   NoSharedFlags P
9220: 72 65 70 61 72 65 52 65 74 72 69 65 73 20 5a 69  repareRetries Zi
9230: 70 56 66 73 56 65 72 73 69 6f 6e 20 5c 0d 0a 20  pVfsVersion \.. 
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9250: 20 20 20 20 20 20 20 20 20 20 20 56 66 73 4e 61             VfsNa
9260: 6d 65 20 42 75 73 79 54 69 6d 65 6f 75 74 20 50  me BusyTimeout P
9270: 72 6f 67 72 65 73 73 4f 70 73 20 4e 6f 44 65 66  rogressOps NoDef
9280: 61 75 6c 74 46 6c 61 67 73 20 5c 0d 0a 20 20 20  aultFlags \..   
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92a0: 20 20 20 20 20 20 20 20 20 52 65 63 75 72 73 69           Recursi
92b0: 76 65 54 72 69 67 67 65 72 73 20 57 61 69 74 54  veTriggers WaitT
92c0: 69 6d 65 6f 75 74 5d 0d 0a 0d 0a 20 20 20 20 66  imeout]....    f
92d0: 6f 72 65 61 63 68 20 6b 65 79 20 24 6b 65 79 73  oreach key $keys
92e0: 20 76 61 6c 75 65 20 24 76 61 6c 75 65 73 20 70   value $values p
92f0: 72 6f 70 65 72 74 79 4e 61 6d 65 20 24 70 72 6f  ropertyName $pro
9300: 70 65 72 74 79 4e 61 6d 65 73 20 7b 0d 0a 20 20  pertyNames {..  
9310: 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61      set code [ca
9320: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
9330: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
9340: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
9350: 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63 74 69  {id} GetConnecti
9360: 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20  onString \..    
9370: 20 20 20 20 20 20 20 20 24 6b 65 79 20 24 76 61          $key $va
9380: 6c 75 65 20 24 70 72 6f 70 65 72 74 79 4e 61 6d  lue $propertyNam
9390: 65 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  e..      } resul
93a0: 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 6c 61 70 70  t]....      lapp
93b0: 65 6e 64 20 72 65 73 75 6c 74 73 20 24 63 6f 64  end results $cod
93c0: 65 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d  e $result..    }
93d0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72  ..  }....  set r
93e0: 65 73 75 6c 74 73 0d 0a 7d 20 2d 63 6c 65 61 6e  esults..} -clean
93f0: 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  up {..  unset -n
9400: 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72  ocomplain proper
9410: 74 79 4e 61 6d 65 20 70 72 6f 70 65 72 74 79 4e  tyName propertyN
9420: 61 6d 65 73 20 76 61 6c 75 65 20 6b 65 79 20 76  ames value key v
9430: 61 6c 75 65 73 20 6b 65 79 73 20 72 65 73 75 6c  alues keys resul
9440: 74 20 5c 0d 0a 20 20 20 20 20 20 72 65 73 75 6c  t \..      resul
9450: 74 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20 69  ts errors code i
9460: 64 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  d..} -constraint
9470: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
9480: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
9490: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
94a0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
94b0: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
94c0: 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53  SQLite compileCS
94d0: 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67  harp} -match reg
94e0: 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b  exp -result \..{
94f0: 5e 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  ^System#CodeDom#
9500: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
9510: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 4f 6b 20  rResults#\d+ Ok 
9520: 5c 7b 5c 7d 20 30 20 5c 7b 2c 20 5c 7d 20 30 20  \{\} 0 \{, \} 0 
9530: 5c 7b 33 2c 5c 0d 0a 56 65 72 73 69 6f 6e 3d 33  \{3,\..Version=3
9540: 5c 7d 20 30 20 5c 7b 4e 6f 72 6d 61 6c 2c 20 53  \} 0 \{Normal, S
9550: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 6f 72 6d 61  ynchronous=Norma
9560: 6c 5c 7d 20 30 20 5c 7b 54 72 75 65 2c 20 55 73  l\} 0 \{True, Us
9570: 65 55 54 46 31 36 45 6e 63 6f 64 69 6e 67 3d 54  eUTF16Encoding=T
9580: 72 75 65 5c 7d 5c 0d 0a 30 20 5c 7b 46 61 6c 73  rue\}\..0 \{Fals
9590: 65 2c 20 50 6f 6f 6c 69 6e 67 3d 46 61 6c 73 65  e, Pooling=False
95a0: 5c 7d 20 30 20 5c 7b 54 72 75 65 2c 20 42 69 6e  \} 0 \{True, Bin
95b0: 61 72 79 47 55 49 44 3d 54 72 75 65 5c 7d 20 30  aryGUID=True\} 0
95c0: 20 5c 7b 74 65 73 74 5c 2e 64 62 2c 20 44 61 74   \{test\.db, Dat
95d0: 61 5c 0d 0a 53 6f 75 72 63 65 3d 74 65 73 74 5c  a\..Source=test\
95e0: 2e 64 62 5c 7d 20 30 20 5c 7b 74 65 73 74 5c 2e  .db\} 0 \{test\.
95f0: 64 62 2c 20 55 72 69 3d 74 65 73 74 5c 2e 64 62  db, Uri=test\.db
9600: 5c 7d 20 30 20 5c 7b 66 69 6c 65 3a 74 65 73 74  \} 0 \{file:test
9610: 2e 64 62 2c 5c 0d 0a 46 75 6c 6c 55 72 69 3d 66  .db,\..FullUri=f
9620: 69 6c 65 3a 74 65 73 74 5c 2e 64 62 5c 7d 20 30  ile:test\.db\} 0
9630: 20 5c 7b 36 30 2c 20 44 65 66 61 75 6c 74 20 54   \{60, Default T
9640: 69 6d 65 6f 75 74 3d 36 30 5c 7d 20 30 20 5c 7b  imeout=60\} 0 \{
9650: 46 61 6c 73 65 2c 20 45 6e 6c 69 73 74 3d 46 61  False, Enlist=Fa
9660: 6c 73 65 5c 7d 5c 0d 0a 30 20 5c 7b 54 72 75 65  lse\}\..0 \{True
9670: 2c 20 46 61 69 6c 49 66 4d 69 73 73 69 6e 67 3d  , FailIfMissing=
9680: 54 72 75 65 5c 7d 20 30 20 5c 7b 46 61 6c 73 65  True\} 0 \{False
9690: 2c 20 4c 65 67 61 63 79 20 46 6f 72 6d 61 74 3d  , Legacy Format=
96a0: 46 61 6c 73 65 5c 7d 20 30 20 5c 7b 54 72 75 65  False\} 0 \{True
96b0: 2c 20 52 65 61 64 5c 0d 0a 4f 6e 6c 79 3d 54 72  , Read\..Only=Tr
96c0: 75 65 5c 7d 20 30 20 5c 7b 73 65 63 72 65 74 2c  ue\} 0 \{secret,
96d0: 20 50 61 73 73 77 6f 72 64 3d 73 65 63 72 65 74   Password=secret
96e0: 5c 7d 20 30 20 5c 7b 34 30 39 36 2c 20 50 61 67  \} 0 \{4096, Pag
96f0: 65 20 53 69 7a 65 3d 34 30 39 36 5c 7d 20 30 20  e Size=4096\} 0 
9700: 5c 7b 31 30 32 34 2c 5c 0d 0a 4d 61 78 20 50 61  \{1024,\..Max Pa
9710: 67 65 20 43 6f 75 6e 74 3d 31 30 32 34 5c 7d 20  ge Count=1024\} 
9720: 30 20 5c 7b 38 31 39 32 2c 20 43 61 63 68 65 20  0 \{8192, Cache 
9730: 53 69 7a 65 3d 38 31 39 32 5c 7d 20 30 20 5c 7b  Size=8192\} 0 \{
9740: 55 6e 69 78 45 70 6f 63 68 2c 5c 0d 0a 44 61 74  UnixEpoch,\..Dat
9750: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 55 6e 69 78  eTimeFormat=Unix
9760: 45 70 6f 63 68 5c 7d 20 30 20 5c 7b 55 74 63 2c  Epoch\} 0 \{Utc,
9770: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 55 74   DateTimeKind=Ut
9780: 63 5c 7d 20 30 20 5c 7b 79 79 79 79 2d 4d 4d 2d  c\} 0 \{yyyy-MM-
9790: 64 64 2c 5c 0d 0a 44 61 74 65 54 69 6d 65 46 6f  dd,\..DateTimeFo
97a0: 72 6d 61 74 53 74 72 69 6e 67 3d 79 79 79 79 2d  rmatString=yyyy-
97b0: 4d 4d 2d 64 64 5c 7d 20 30 20 5c 7b 73 71 6c 69  MM-dd\} 0 \{sqli
97c0: 74 65 5f 73 63 68 65 6d 61 2c 5c 0d 0a 42 61 73  te_schema,\..Bas
97d0: 65 53 63 68 65 6d 61 4e 61 6d 65 3d 73 71 6c 69  eSchemaName=sqli
97e0: 74 65 5f 73 63 68 65 6d 61 5c 7d 20 30 20 5c 7b  te_schema\} 0 \{
97f0: 4d 65 6d 6f 72 79 2c 20 4a 6f 75 72 6e 61 6c 20  Memory, Journal 
9800: 4d 6f 64 65 3d 4d 65 6d 6f 72 79 5c 7d 20 30 5c  Mode=Memory\} 0\
9810: 0d 0a 5c 7b 53 65 72 69 61 6c 69 7a 61 62 6c 65  ..\{Serializable
9820: 2c 20 44 65 66 61 75 6c 74 20 49 73 6f 6c 61 74  , Default Isolat
9830: 69 6f 6e 4c 65 76 65 6c 3d 53 65 72 69 61 6c 69  ionLevel=Seriali
9840: 7a 61 62 6c 65 5c 7d 20 30 20 5c 7b 46 61 6c 73  zable\} 0 \{Fals
9850: 65 2c 20 46 6f 72 65 69 67 6e 5c 0d 0a 4b 65 79  e, Foreign\..Key
9860: 73 3d 46 61 6c 73 65 5c 7d 20 30 20 5c 7b 28 3f  s=False\} 0 \{(?
9870: 3a 44 65 66 61 75 6c 74 7c 4c 6f 67 43 61 6c 6c  :Default|LogCall
9880: 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 2c 5c  backException),\
9890: 0d 0a 46 6c 61 67 73 3d 28 3f 3a 44 65 66 61 75  ..Flags=(?:Defau
98a0: 6c 74 7c 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78  lt|LogCallbackEx
98b0: 63 65 70 74 69 6f 6e 29 5c 7d 20 30 20 5c 7b 46  ception)\} 0 \{F
98c0: 61 6c 73 65 2c 20 53 65 74 44 65 66 61 75 6c 74  alse, SetDefault
98d0: 73 3d 46 61 6c 73 65 5c 7d 20 30 5c 0d 0a 5c 7b  s=False\} 0\..\{
98e0: 46 61 6c 73 65 2c 20 54 6f 46 75 6c 6c 50 61 74  False, ToFullPat
98f0: 68 3d 46 61 6c 73 65 5c 7d 20 30 20 7b 37 33 36  h=False\} 0 {736
9900: 35 36 33 37 32 36 35 37 34 2c 20 48 65 78 50 61  563726574, HexPa
9910: 73 73 77 6f 72 64 3d 37 33 36 35 36 33 37 32 36  ssword=736563726
9920: 35 37 34 7d 20 30 5c 0d 0a 5c 7b 53 74 72 69 6e  574} 0\..\{Strin
9930: 67 2c 20 44 65 66 61 75 6c 74 44 62 54 79 70 65  g, DefaultDbType
9940: 3d 53 74 72 69 6e 67 5c 7d 20 30 20 5c 7b 54 45  =String\} 0 \{TE
9950: 58 54 2c 20 44 65 66 61 75 6c 74 54 79 70 65 4e  XT, DefaultTypeN
9960: 61 6d 65 3d 54 45 58 54 5c 7d 20 30 20 5c 7b 54  ame=TEXT\} 0 \{T
9970: 72 75 65 2c 5c 0d 0a 4e 6f 53 68 61 72 65 64 46  rue,\..NoSharedF
9980: 6c 61 67 73 3d 54 72 75 65 5c 7d 20 30 20 5c 7b  lags=True\} 0 \{
9990: 32 30 2c 20 50 72 65 70 61 72 65 52 65 74 72 69  20, PrepareRetri
99a0: 65 73 3d 32 30 5c 7d 20 30 20 5c 7b 76 32 2c 20  es=20\} 0 \{v2, 
99b0: 5a 69 70 56 66 73 56 65 72 73 69 6f 6e 3d 76 32  ZipVfsVersion=v2
99c0: 5c 7d 20 30 5c 0d 0a 5c 7b 74 65 73 74 2c 20 56  \} 0\..\{test, V
99d0: 66 73 4e 61 6d 65 3d 74 65 73 74 5c 7d 20 30 20  fsName=test\} 0 
99e0: 5c 7b 31 30 30 30 2c 20 42 75 73 79 54 69 6d 65  \{1000, BusyTime
99f0: 6f 75 74 3d 31 30 30 30 5c 7d 20 30 20 5c 7b 32  out=1000\} 0 \{2
9a00: 30 30 30 2c 5c 0d 0a 50 72 6f 67 72 65 73 73 4f  000,\..ProgressO
9a10: 70 73 3d 32 30 30 30 5c 7d 20 30 20 5c 7b 54 72  ps=2000\} 0 \{Tr
9a20: 75 65 2c 20 4e 6f 44 65 66 61 75 6c 74 46 6c 61  ue, NoDefaultFla
9a30: 67 73 3d 54 72 75 65 5c 7d 20 30 20 5c 7b 54 72  gs=True\} 0 \{Tr
9a40: 75 65 2c 20 52 65 63 75 72 73 69 76 65 5c 0d 0a  ue, Recursive\..
9a50: 54 72 69 67 67 65 72 73 3d 54 72 75 65 5c 7d 20  Triggers=True\} 
9a60: 30 20 5c 7b 33 30 30 30 30 2c 20 57 61 69 74 54  0 \{30000, WaitT
9a70: 69 6d 65 6f 75 74 3d 33 30 30 30 30 5c 7d 24 7d  imeout=30000\}$}
9a80: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
9a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9aa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9ab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9ac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9ad0: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
9ae0: 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 31 38 20  {test data-1.18 
9af0: 7b 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 54  {SQLiteConvert T
9b00: 6f 44 61 74 65 54 69 6d 65 20 28 4a 75 6c 69 61  oDateTime (Julia
9b10: 6e 20 44 61 79 29 7d 20 2d 62 6f 64 79 20 7b 0d  n Day)} -body {.
9b20: 0a 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20  .  set dateTime 
9b30: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
9b40: 63 72 65 61 74 65 20 53 79 73 74 65 6d 2e 44 61  create System.Da
9b50: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
9b60: 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20 20 20  Convert \..     
9b70: 20 54 6f 44 61 74 65 54 69 6d 65 20 32 34 35 35   ToDateTime 2455
9b80: 39 32 38 2e 30 20 55 74 63 5d 0d 0a 0d 0a 20 20  928.0 Utc]....  
9b90: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64  object invoke $d
9ba0: 61 74 65 54 69 6d 65 20 54 6f 53 74 72 69 6e 67  ateTime ToString
9bb0: 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72   [getDateTimeFor
9bc0: 6d 61 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  mat]..} -cleanup
9bd0: 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
9be0: 6f 6d 70 6c 61 69 6e 20 64 61 74 65 54 69 6d 65  omplain dateTime
9bf0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
9c00: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
9c10: 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 44 61  object System.Da
9c20: 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
9c30: 6c 74 20 5c 0d 0a 7b 32 30 31 32 2d 30 31 2d 30  lt \..{2012-01-0
9c40: 31 20 31 32 3a 30 30 3a 30 30 5a 7d 7d 0d 0a 0d  1 12:00:00Z}}...
9c50: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
9c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9ca0: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
9cb0: 74 20 64 61 74 61 2d 31 2e 31 39 20 7b 53 51 4c  t data-1.19 {SQL
9cc0: 69 74 65 43 6f 6e 76 65 72 74 20 54 6f 4a 75 6c  iteConvert ToJul
9cd0: 69 61 6e 44 61 79 7d 20 2d 62 6f 64 79 20 7b 0d  ianDay} -body {.
9ce0: 0a 20 20 65 78 70 72 20 7b 72 6f 75 6e 64 28 5b  .  expr {round([
9cf0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79  object invoke Sy
9d00: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
9d10: 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 54  .SQLiteConvert T
9d20: 6f 4a 75 6c 69 61 6e 44 61 79 20 5c 0d 0a 20 20  oJulianDay \..  
9d30: 20 20 20 20 22 32 30 31 32 2d 30 31 2d 30 31 20      "2012-01-01 
9d40: 31 32 3a 30 30 3a 30 30 5a 22 5d 29 7d 0d 0a 7d  12:00:00Z"])}..}
9d50: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
9d60: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
9d70: 65 63 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ect System.Data.
9d80: 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20  SQLite} -result 
9d90: 7b 32 34 35 35 39 32 38 7d 7d 0d 0a 0d 0a 23 23  {2455928}}....##
9da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
9df0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
9e00: 61 74 61 2d 31 2e 32 30 20 7b 53 51 4c 69 74 65  ata-1.20 {SQLite
9e10: 43 6f 6e 76 65 72 74 20 54 6f 55 6e 69 78 45 70  Convert ToUnixEp
9e20: 6f 63 68 20 28 55 74 63 29 7d 20 2d 62 6f 64 79  och (Utc)} -body
9e30: 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54   {..  #..  # NOT
9e40: 45 3a 20 41 74 20 66 69 72 73 74 2c 20 74 68 65  E: At first, the
9e50: 20 74 65 73 74 20 72 65 73 75 6c 74 20 68 65 72   test result her
9e60: 65 20 6d 61 79 20 6e 6f 74 20 73 65 65 6d 20 63  e may not seem c
9e70: 6f 72 72 65 63 74 3b 20 68 6f 77 65 76 65 72 2c  orrect; however,
9e80: 20 74 68 65 0d 0a 20 20 23 20 20 20 20 20 20 20   the..  #       
9e90: 73 61 6d 65 20 72 65 73 75 6c 74 20 63 61 6e 20  same result can 
9ea0: 62 65 20 73 65 65 6e 20 62 79 20 63 6f 6d 70 69  be seen by compi
9eb0: 6c 69 6e 67 20 61 6e 64 20 72 75 6e 6e 69 6e 67  ling and running
9ec0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 43   the following C
9ed0: 23 0d 0a 20 20 23 20 20 20 20 20 20 20 63 6f 64  #..  #       cod
9ee0: 65 20 66 72 61 67 6d 65 6e 74 20 74 6f 67 65 74  e fragment toget
9ef0: 68 65 72 20 77 69 74 68 20 74 68 65 20 54 6f 55  her with the ToU
9f00: 6e 69 78 45 70 6f 63 68 20 6d 65 74 68 6f 64 3a  nixEpoch method:
9f10: 0d 0a 20 20 23 0d 0a 20 20 23 20 20 20 20 20 20  ..  #..  #      
9f20: 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 64 61       DateTime da
9f30: 74 65 54 69 6d 65 3b 0d 0a 20 20 23 20 20 20 20  teTime;..  #    
9f40: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
9f50: 72 69 74 65 4c 69 6e 65 28 22 64 61 74 65 54 69  riteLine("dateTi
9f60: 6d 65 20 3d 20 7b 30 7d 2c 20 75 6e 69 78 54 69  me = {0}, unixTi
9f70: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 23 20  me = {1}",..  # 
9f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
9f90: 74 65 54 69 6d 65 20 3d 20 44 61 74 65 54 69 6d  teTime = DateTim
9fa0: 65 2e 50 61 72 73 65 28 22 32 30 31 32 2d 30 31  e.Parse("2012-01
9fb0: 2d 30 31 20 31 32 3a 30 30 3a 30 30 5a 22 29 2c  -01 12:00:00Z"),
9fc0: 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20 20 20  ..  #           
9fd0: 20 20 20 20 54 6f 55 6e 69 78 45 70 6f 63 68 28      ToUnixEpoch(
9fe0: 64 61 74 65 54 69 6d 65 29 29 3b 0d 0a 20 20 23  dateTime));..  #
9ff0: 0d 0a 20 20 23 20 20 20 20 20 20 20 54 68 65 20  ..  #       The 
a000: 62 61 73 69 63 20 70 72 6f 62 6c 65 6d 20 68 65  basic problem he
a010: 72 65 20 69 73 20 74 68 61 74 20 74 68 65 20 50  re is that the P
a020: 61 72 73 65 20 5b 61 6e 64 20 54 72 79 50 61 72  arse [and TryPar
a030: 73 65 5d 20 6d 65 74 68 6f 64 73 20 6f 66 0d 0a  se] methods of..
a040: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 44 61    #       the Da
a050: 74 65 54 69 6d 65 20 73 74 72 75 63 74 75 72 65  teTime structure
a060: 20 73 65 65 6d 20 74 6f 20 61 6c 77 61 79 73 20   seem to always 
a070: 72 65 74 75 72 6e 20 6c 6f 63 61 6c 20 74 69 6d  return local tim
a080: 65 2c 20 65 76 65 6e 20 77 68 65 6e 0d 0a 20 20  e, even when..  
a090: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76  #       string v
a0a0: 61 6c 75 65 20 63 6c 65 61 72 6c 79 20 69 6e 64  alue clearly ind
a0b0: 69 63 61 74 65 73 20 6f 74 68 65 72 77 69 73 65  icates otherwise
a0c0: 20 28 69 2e 65 2e 20 74 68 65 20 74 72 61 69 6c   (i.e. the trail
a0d0: 69 6e 67 20 22 5a 22 2c 0d 0a 20 20 23 20 20 20  ing "Z",..  #   
a0e0: 20 20 20 20 69 6e 64 69 63 61 74 69 6e 67 20 55      indicating U
a0f0: 54 43 29 2e 0d 0a 20 20 23 0d 0a 20 20 65 78 70  TC)...  #..  exp
a100: 72 20 7b 72 6f 75 6e 64 28 5b 6f 62 6a 65 63 74  r {round([object
a110: 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44   invoke System.D
a120: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
a130: 65 43 6f 6e 76 65 72 74 20 54 6f 55 6e 69 78 45  eConvert ToUnixE
a140: 70 6f 63 68 20 5c 0d 0a 20 20 20 20 20 20 5b 73  poch \..      [s
a150: 65 74 20 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a  et dateTime [obj
a160: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61  ect invoke -crea
a170: 74 65 20 2d 61 6c 69 61 73 20 44 61 74 65 54 69  te -alias DateTi
a180: 6d 65 20 50 61 72 73 65 45 78 61 63 74 20 5c 0d  me ParseExact \.
a190: 0a 20 20 20 20 20 20 22 32 30 31 32 2d 30 31 2d  .      "2012-01-
a1a0: 30 31 20 31 32 3a 30 30 3a 30 30 5a 22 20 5b 67  01 12:00:00Z" [g
a1b0: 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74  etDateTimeFormat
a1c0: 5d 20 6e 75 6c 6c 20 41 64 6a 75 73 74 54 6f 55  ] null AdjustToU
a1d0: 6e 69 76 65 72 73 61 6c 5d 5d 5d 29 7d 0d 0a 7d  niversal]]])}..}
a1e0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75   -cleanup {..  u
a1f0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
a200: 20 64 61 74 65 54 69 6d 65 0d 0a 7d 20 2d 63 6f   dateTime..} -co
a210: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
a220: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
a230: 6d 6f 6e 6f 42 75 67 34 32 20 53 79 73 74 65 6d  monoBug42 System
a240: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
a250: 65 73 75 6c 74 20 5c 0d 0a 7b 31 33 32 35 34 31  esult \..{132541
a260: 39 32 30 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  9200}}....######
a270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a2b0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
a2c0: 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
a2d0: 31 2e 32 31 20 7b 53 51 4c 69 74 65 43 6f 6e 76  1.21 {SQLiteConv
a2e0: 65 72 74 20 54 6f 55 6e 69 78 45 70 6f 63 68 20  ert ToUnixEpoch 
a2f0: 28 4c 6f 63 61 6c 29 7d 20 2d 62 6f 64 79 20 7b  (Local)} -body {
a300: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
a310: 20 41 74 20 66 69 72 73 74 2c 20 74 68 65 20 74   At first, the t
a320: 65 73 74 20 72 65 73 75 6c 74 20 68 65 72 65 20  est result here 
a330: 6d 61 79 20 6e 6f 74 20 73 65 65 6d 20 63 6f 72  may not seem cor
a340: 72 65 63 74 3b 20 68 6f 77 65 76 65 72 2c 20 74  rect; however, t
a350: 68 65 0d 0a 20 20 23 20 20 20 20 20 20 20 73 61  he..  #       sa
a360: 6d 65 20 72 65 73 75 6c 74 20 63 61 6e 20 62 65  me result can be
a370: 20 73 65 65 6e 20 62 79 20 63 6f 6d 70 69 6c 69   seen by compili
a380: 6e 67 20 61 6e 64 20 72 75 6e 6e 69 6e 67 20 74  ng and running t
a390: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 43 23 0d  he following C#.
a3a0: 0a 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20  .  #       code 
a3b0: 66 72 61 67 6d 65 6e 74 20 74 6f 67 65 74 68 65  fragment togethe
a3c0: 72 20 77 69 74 68 20 74 68 65 20 54 6f 55 6e 69  r with the ToUni
a3d0: 78 45 70 6f 63 68 20 6d 65 74 68 6f 64 3a 0d 0a  xEpoch method:..
a3e0: 20 20 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20    #..  #        
a3f0: 20 20 20 44 61 74 65 54 69 6d 65 20 64 61 74 65     DateTime date
a400: 54 69 6d 65 3b 0d 0a 20 20 23 20 20 20 20 20 20  Time;..  #      
a410: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
a420: 74 65 4c 69 6e 65 28 22 64 61 74 65 54 69 6d 65  teLine("dateTime
a430: 20 3d 20 7b 30 7d 2c 20 75 6e 69 78 54 69 6d 65   = {0}, unixTime
a440: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 23 20 20 20   = {1}",..  #   
a450: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 65              date
a460: 54 69 6d 65 20 3d 20 44 61 74 65 54 69 6d 65 2e  Time = DateTime.
a470: 50 61 72 73 65 28 22 32 30 31 32 2d 30 31 2d 30  Parse("2012-01-0
a480: 31 20 31 32 3a 30 30 3a 30 30 22 29 2c 0d 0a 20  1 12:00:00"),.. 
a490: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
a4a0: 20 54 6f 55 6e 69 78 45 70 6f 63 68 28 64 61 74   ToUnixEpoch(dat
a4b0: 65 54 69 6d 65 29 29 3b 0d 0a 20 20 23 0d 0a 20  eTime));..  #.. 
a4c0: 20 23 20 20 20 20 20 20 20 54 68 65 20 62 61 73   #       The bas
a4d0: 69 63 20 70 72 6f 62 6c 65 6d 20 68 65 72 65 20  ic problem here 
a4e0: 69 73 20 74 68 61 74 20 74 68 65 20 50 61 72 73  is that the Pars
a4f0: 65 20 5b 61 6e 64 20 54 72 79 50 61 72 73 65 5d  e [and TryParse]
a500: 20 6d 65 74 68 6f 64 73 20 6f 66 0d 0a 20 20 23   methods of..  #
a510: 20 20 20 20 20 20 20 74 68 65 20 44 61 74 65 54         the DateT
a520: 69 6d 65 20 73 74 72 75 63 74 75 72 65 20 73 65  ime structure se
a530: 65 6d 20 74 6f 20 61 6c 77 61 79 73 20 72 65 74  em to always ret
a540: 75 72 6e 20 6c 6f 63 61 6c 20 74 69 6d 65 2c 20  urn local time, 
a550: 65 76 65 6e 20 77 68 65 6e 0d 0a 20 20 23 20 20  even when..  #  
a560: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
a570: 65 20 63 6c 65 61 72 6c 79 20 69 6e 64 69 63 61  e clearly indica
a580: 74 65 73 20 6f 74 68 65 72 77 69 73 65 20 28 69  tes otherwise (i
a590: 2e 65 2e 20 74 68 65 20 74 72 61 69 6c 69 6e 67  .e. the trailing
a5a0: 20 22 5a 22 2c 0d 0a 20 20 23 20 20 20 20 20 20   "Z",..  #      
a5b0: 20 69 6e 64 69 63 61 74 69 6e 67 20 55 54 43 29   indicating UTC)
a5c0: 2e 0d 0a 20 20 23 0d 0a 20 20 65 78 70 72 20 7b  ...  #..  expr {
a5d0: 72 6f 75 6e 64 28 5b 6f 62 6a 65 63 74 20 69 6e  round([object in
a5e0: 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61  voke System.Data
a5f0: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
a600: 6e 76 65 72 74 20 54 6f 55 6e 69 78 45 70 6f 63  nvert ToUnixEpoc
a610: 68 20 5c 0d 0a 20 20 20 20 20 20 22 32 30 31 32  h \..      "2012
a620: 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 22  -01-01 12:00:00"
a630: 5d 29 7d 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ])}..} -constrai
a640: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
a650: 6e 64 2e 6f 62 6a 65 63 74 20 53 79 73 74 65 6d  nd.object System
a660: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
a670: 65 73 75 6c 74 20 7b 31 33 32 35 34 31 39 32 30  esult {132541920
a680: 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  0}}....#########
a690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a6a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a6b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a6c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a6d0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
a6e0: 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 32  t {test data-1.2
a6f0: 32 20 7b 53 51 4c 69 74 65 54 72 61 6e 73 61 63  2 {SQLiteTransac
a700: 74 69 6f 6e 20 64 69 73 70 6f 73 61 6c 20 62 65  tion disposal be
a710: 68 61 76 69 6f 72 7d 20 2d 73 65 74 75 70 20 7b  havior} -setup {
a720: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
a730: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
a740: 2e 32 32 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .22.db]..} -body
a750: 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
a760: 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
a770: 42 4c 45 20 74 31 28 78 20 54 45 58 54 29 3b 22  BLE t1(x TEXT);"
a780: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
a790: 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 49 4e 53  e $db {..    INS
a7a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
a7b0: 56 41 4c 55 45 53 28 27 74 65 73 74 31 27 29 3b  VALUES('test1');
a7c0: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
a7d0: 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
a7e0: 27 74 65 73 74 32 27 29 3b 0d 0a 20 20 20 20 49  'test2');..    I
a7f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
a800: 29 20 56 41 4c 55 45 53 28 27 74 65 73 74 33 27  ) VALUES('test3'
a810: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
a820: 20 73 71 6c 20 22 53 45 4c 45 43 54 20 78 20 46   sql "SELECT x F
a830: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
a840: 78 20 43 4f 4c 4c 41 54 45 20 44 4f 54 48 52 4f  x COLLATE DOTHRO
a850: 57 3b 22 0d 0a 0d 0a 20 20 73 65 74 20 69 64 20  W;"....  set id 
a860: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
a870: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
a880: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
a890: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
a8a0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
a8b0: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
a8c0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
a8d0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
a8e0: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
a8f0: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
a900: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
a910: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
a920: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
a930: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
a940: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d  .Data.SQLite;...
a950: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
a960: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
a970: 20 20 7b 0d 0a 20 20 20 20 20 20 5c 5b 53 51 4c    {..      \[SQL
a980: 69 74 65 46 75 6e 63 74 69 6f 6e 28 4e 61 6d 65  iteFunction(Name
a990: 20 3d 20 22 44 4f 54 48 52 4f 57 22 2c 20 46 75   = "DOTHROW", Fu
a9a0: 6e 63 54 79 70 65 20 3d 20 46 75 6e 63 74 69 6f  ncType = Functio
a9b0: 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e 29  nType.Collation)
a9c0: 5c 5d 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  \]..      public
a9d0: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
a9e0: 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f   : SQLiteFunctio
a9f0: 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  n..      {..    
aa00: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
aa10: 69 64 65 20 69 6e 74 20 43 6f 6d 70 61 72 65 28  ide int Compare(
aa20: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
aa30: 6e 67 20 70 61 72 61 6d 31 2c 0d 0a 20 20 20 20  ng param1,..    
aa40: 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 61 72        string par
aa50: 61 6d 32 0d 0a 20 20 20 20 20 20 20 20 20 20 29  am2..          )
aa60: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
aa70: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
aa80: 20 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 74 20   Exception("not 
aa90: 69 6d 70 6c 65 6d 65 6e 74 65 64 22 29 3b 0d 0a  implemented");..
aaa0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
aab0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ab00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ab10: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
ab20: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ab30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
ab40: 6e 63 74 69 6f 6e 2e 52 65 67 69 73 74 65 72 46  nction.RegisterF
ab50: 75 6e 63 74 69 6f 6e 28 74 79 70 65 6f 66 28 54  unction(typeof(T
ab60: 65 73 74 24 7b 69 64 7d 29 29 3b 0d 0a 0d 0a 20  est${id}));.... 
ab70: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
ab80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
ab90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
aba0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
abb0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
abc0: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
abd0: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
abe0: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
abf0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
ac00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
ac10: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
ac20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ac30: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 54 72   using (SQLiteTr
ac40: 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 61  ansaction transa
ac50: 63 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20  ction =..       
ac60: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
ac70: 69 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63  ion.BeginTransac
ac80: 74 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20 20  tion())..       
ac90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
aca0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
acb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
acd0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
ace0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
acf0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 3b 0d  reateCommand();.
ad00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ad10: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
ad20: 6e 64 54 65 78 74 20 3d 20 22 24 7b 73 71 6c 7d  ndText = "${sql}
ad30: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
ad40: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
ad50: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ad70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
ad80: 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
ad90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ada0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
adb0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
adc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
add0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ade0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
adf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
ae00: 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74   }] true false t
ae10: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
ae20: 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  rs System.Data.S
ae30: 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  QLite.dll]....  
ae40: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
ae50: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
ae60: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
ae70: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
ae80: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
ae90: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
aea0: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
aeb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
aec0: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
aed0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
aee0: 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20  } Main..      } 
aef0: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
af00: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73  esult ""]}] $res
af10: 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
af20: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
af30: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
af40: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
af50: 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65  result results e
af60: 72 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20 64  rrors code sql d
af70: 61 74 61 53 6f 75 72 63 65 20 69 64 20 64 62 20  ataSource id db 
af80: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
af90: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
afa0: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
afb0: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
afc0: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
afd0: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
afe0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f  m.Data.SQLite co
aff0: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
b000: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
b010: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
b020: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
b030: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
b040: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
b050: 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
b060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b0a0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
b0b0: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
b0c0: 32 33 20 7b 53 51 4c 69 74 65 46 75 6e 63 74 69  23 {SQLiteFuncti
b0d0: 6f 6e 20 63 6f 6c 6c 61 74 69 6f 6e 20 65 78 63  on collation exc
b0e0: 65 70 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b  eption} -setup {
b0f0: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
b100: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
b110: 2e 32 33 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .23.db]..} -body
b120: 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
b130: 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
b140: 42 4c 45 20 74 31 28 78 20 54 45 58 54 29 3b 22  BLE t1(x TEXT);"
b150: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
b160: 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 49 4e 53  e $db {..    INS
b170: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
b180: 56 41 4c 55 45 53 28 27 74 65 73 74 31 27 29 3b  VALUES('test1');
b190: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
b1a0: 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
b1b0: 27 74 65 73 74 32 27 29 3b 0d 0a 20 20 20 20 49  'test2');..    I
b1c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
b1d0: 29 20 56 41 4c 55 45 53 28 27 74 65 73 74 33 27  ) VALUES('test3'
b1e0: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
b1f0: 20 73 71 6c 20 22 53 45 4c 45 43 54 20 78 20 46   sql "SELECT x F
b200: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
b210: 78 20 43 4f 4c 4c 41 54 45 20 44 4f 54 48 52 4f  x COLLATE DOTHRO
b220: 57 32 3b 22 0d 0a 0d 0a 20 20 73 65 74 20 69 64  W2;"....  set id
b230: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
b240: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
b250: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
b260: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
b270: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
b280: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
b290: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
b2a0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
b2b0: 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ain results erro
b2c0: 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65  rs....  set code
b2d0: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57   [compileCSharpW
b2e0: 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20  ith [subst {..  
b2f0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d    using System;.
b300: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
b310: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a  m.Data.SQLite;..
b320: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
b330: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
b340: 20 20 20 7b 0d 0a 20 20 20 20 20 20 5c 5b 53 51     {..      \[SQ
b350: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 28 4e 61 6d  LiteFunction(Nam
b360: 65 20 3d 20 22 44 4f 54 48 52 4f 57 32 22 2c 20  e = "DOTHROW2", 
b370: 46 75 6e 63 54 79 70 65 20 3d 20 46 75 6e 63 74  FuncType = Funct
b380: 69 6f 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f  ionType.Collatio
b390: 6e 29 5c 5d 0d 0a 20 20 20 20 20 20 70 75 62 6c  n)\]..      publ
b3a0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
b3b0: 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74  d} : SQLiteFunct
b3c0: 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ion..      {..  
b3d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65        public ove
b3e0: 72 72 69 64 65 20 69 6e 74 20 43 6f 6d 70 61 72  rride int Compar
b3f0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  e(..          st
b400: 72 69 6e 67 20 70 61 72 61 6d 31 2c 0d 0a 20 20  ring param1,..  
b410: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
b420: 61 72 61 6d 32 0d 0a 20 20 20 20 20 20 20 20 20  aram2..         
b430: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
b440: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b450: 65 77 20 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f  ew Exception("no
b460: 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 29 3b  t implemented");
b470: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
b480: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b4d0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
b4e0: 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e   static int Main
b4f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
b500: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46           SQLiteF
b510: 75 6e 63 74 69 6f 6e 2e 52 65 67 69 73 74 65 72  unction.Register
b520: 46 75 6e 63 74 69 6f 6e 28 74 79 70 65 6f 66 28  Function(typeof(
b530: 54 65 73 74 24 7b 69 64 7d 29 29 3b 0d 0a 0d 0a  Test${id}));....
b540: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
b550: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
b560: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
b570: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
b580: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
b590: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
b5a0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
b5b0: 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65  getTestPropertie
b5c0: 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  s]"))..         
b5d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b5e0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
b5f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b600: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 54    using (SQLiteT
b610: 72 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73  ransaction trans
b620: 61 63 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20  action =..      
b630: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
b640: 74 69 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61  tion.BeginTransa
b650: 63 74 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20  ction())..      
b660: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b670: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6d         SQLiteCom
b680: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
b690: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
b6a0: 43 6f 6d 6d 61 6e 64 28 29 3b 0d 0a 0d 0a 20 20  Command();....  
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
b6c0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
b6d0: 3d 20 22 24 7b 73 71 6c 7d 22 3b 0d 0a 0d 0a 20  = "${sql}";.... 
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
b6f0: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
b700: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
b710: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
b720: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
b730: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b740: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
b750: 20 63 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20   count = 0;.... 
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
b770: 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72  hile (dataReader
b780: 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
b790: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e              coun
b7a0: 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t++;....        
b7b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
b7c0: 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ount;..         
b7d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b7e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b7f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
b800: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
b810: 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74   }] true false t
b820: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
b830: 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  rs System.Data.S
b840: 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  QLite.dll]....  
b850: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
b860: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
b870: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
b880: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
b890: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
b8a0: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
b8b0: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
b8c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
b8d0: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
b8e0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
b8f0: 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20  } Main..      } 
b900: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
b910: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20  esult ""]}] \.. 
b920: 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73       [extractSys
b930: 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
b940: 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72  eptionMessage $r
b950: 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  esult]..} -clean
b960: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
b970: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
b980: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
b990: 69 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74  in result result
b9a0: 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20 73 71  s errors code sq
b9b0: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
b9c0: 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
b9d0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
b9e0: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
b9f0: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  t monoBug28 comm
ba00: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
ba10: 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79  DATA SQLite\..Sy
ba20: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
ba30: 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20   compileCSharp} 
ba40: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
ba50: 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  esult {^Ok\..Sys
ba60: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
ba70: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
ba80: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 31 20  ults#\d+ \{\} 1 
ba90: 69 6e 74 65 72 72 75 70 74 65 64 24 7d 7d 0d 0a  interrupted$}}..
baa0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
bab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bac0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bad0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
baf0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
bb00: 73 74 20 64 61 74 61 2d 31 2e 32 34 20 7b 4c 49  st data-1.24 {LI
bb10: 4e 51 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e  NQ SQL_CONSTRAIN
bb20: 54 43 4f 4c 55 4d 4e 53 20 72 65 73 6f 75 72 63  TCOLUMNS resourc
bb30: 65 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 6f 62  e} -body {..  ob
bb40: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
bb50: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
bb60: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
bb70: 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 50  ta.SQLite.Linq.P
bb80: 72 6f 70 65 72 74 69 65 73 2e 52 65 73 6f 75 72  roperties.Resour
bb90: 63 65 73 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49  ces SQL_CONSTRAI
bba0: 4e 54 43 4f 4c 55 4d 4e 53 0d 0a 7d 20 2d 63 6f  NTCOLUMNS..} -co
bbb0: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
bbc0: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
bbd0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
bbe0: 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
bbf0: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 7d 20 2d 72  .SQLite.Linq} -r
bc00: 65 73 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 43  esult {..      C
bc10: 52 45 41 54 45 20 54 45 4d 50 20 56 49 45 57 20  REATE TEMP VIEW 
bc20: 53 43 48 45 4d 41 43 4f 4e 53 54 52 41 49 4e 54  SCHEMACONSTRAINT
bc30: 43 4f 4c 55 4d 4e 53 20 41 53 0d 0a 20 20 20 20  COLUMNS AS..    
bc40: 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e 53 54      SELECT CONST
bc50: 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a  RAINT_CATALOG,..
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
bc70: 55 4c 4c 20 41 53 20 43 4f 4e 53 54 52 41 49 4e  ULL AS CONSTRAIN
bc80: 54 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20  T_SCHEMA,..     
bc90: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52            CONSTR
bca0: 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20  AINT_NAME,..    
bcb0: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
bcc0: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
bcd0: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41            NULL A
bce0: 53 20 54 41 42 4c 45 5f 53 43 48 45 4d 41 2c 0d  S TABLE_SCHEMA,.
bcf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd00: 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20  TABLE_NAME,..   
bd10: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4c 55              COLU
bd20: 4d 4e 5f 4e 41 4d 45 0d 0a 20 20 20 20 20 20 20  MN_NAME..       
bd30: 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d   FROM TEMP.SCHEM
bd40: 41 49 4e 44 45 58 43 4f 4c 55 4d 4e 53 0d 0a 20  AINDEXCOLUMNS.. 
bd50: 20 20 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20 20         UNION..  
bd60: 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e        SELECT CON
bd70: 53 54 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c  STRAINT_CATALOG,
bd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd90: 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20   NULL,..        
bda0: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e         CONSTRAIN
bdb0: 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20  T_NAME,..       
bdc0: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41          TABLE_CA
bdd0: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
bde0: 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20         NULL,..  
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
be00: 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  LE_NAME,..      
be10: 20 20 20 20 20 20 20 20 20 46 4b 45 59 5f 46 52           FKEY_FR
be20: 4f 4d 5f 43 4f 4c 55 4d 4e 0d 0a 20 20 20 20 20  OM_COLUMN..     
be30: 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48     FROM TEMP.SCH
be40: 45 4d 41 46 4f 52 45 49 47 4e 4b 45 59 53 3b 0d  EMAFOREIGNKEYS;.
be50: 0a 20 20 20 20 7d 7d 0d 0a 0d 0a 23 23 23 23 23  .    }}....#####
be60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
be90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bea0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
beb0: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
bec0: 2d 31 2e 32 35 20 7b 45 46 36 20 53 51 4c 5f 43  -1.25 {EF6 SQL_C
bed0: 4f 4e 53 54 52 41 49 4e 54 43 4f 4c 55 4d 4e 53  ONSTRAINTCOLUMNS
bee0: 20 72 65 73 6f 75 72 63 65 7d 20 2d 62 6f 64 79   resource} -body
bef0: 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76   {..  object inv
bf00: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
bf10: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53  ublic \..      S
bf20: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
bf30: 65 2e 45 46 36 2e 50 72 6f 70 65 72 74 69 65 73  e.EF6.Properties
bf40: 2e 52 65 73 6f 75 72 63 65 73 20 53 51 4c 5f 43  .Resources SQL_C
bf50: 4f 4e 53 54 52 41 49 4e 54 43 4f 4c 55 4d 4e 53  ONSTRAINTCOLUMNS
bf60: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
bf70: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
bf80: 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 44 61  object System.Da
bf90: 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74  ta.SQLite\..Syst
bfa0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
bfb0: 46 36 7d 20 2d 72 65 73 75 6c 74 20 7b 0d 0a 20  F6} -result {.. 
bfc0: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
bfd0: 20 56 49 45 57 20 53 43 48 45 4d 41 43 4f 4e 53   VIEW SCHEMACONS
bfe0: 54 52 41 49 4e 54 43 4f 4c 55 4d 4e 53 20 41 53  TRAINTCOLUMNS AS
bff0: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  ..        SELECT
c000: 20 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54 41   CONSTRAINT_CATA
c010: 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  LOG,..          
c020: 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 43 4f 4e       NULL AS CON
c030: 53 54 52 41 49 4e 54 5f 53 43 48 45 4d 41 2c 0d  STRAINT_SCHEMA,.
c040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c050: 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d 45 2c  CONSTRAINT_NAME,
c060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c070: 20 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d   TABLE_CATALOG,.
c080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c090: 4e 55 4c 4c 20 41 53 20 54 41 42 4c 45 5f 53 43  NULL AS TABLE_SC
c0a0: 48 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20 20 20  HEMA,..         
c0b0: 20 20 20 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45        TABLE_NAME
c0c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c0d0: 20 20 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 0d 0a 20    COLUMN_NAME.. 
c0e0: 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45 4d 50         FROM TEMP
c0f0: 2e 53 43 48 45 4d 41 49 4e 44 45 58 43 4f 4c 55  .SCHEMAINDEXCOLU
c100: 4d 4e 53 0d 0a 20 20 20 20 20 20 20 20 55 4e 49  MNS..        UNI
c110: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45  ON..        SELE
c120: 43 54 20 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41  CT CONSTRAINT_CA
c130: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
c140: 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20         NULL,..  
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e               CON
c160: 53 54 52 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20  STRAINT_NAME,.. 
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41                TA
c180: 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20  BLE_CATALOG,..  
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
c1a0: 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  L,..            
c1b0: 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a     TABLE_NAME,..
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
c1d0: 4b 45 59 5f 46 52 4f 4d 5f 43 4f 4c 55 4d 4e 0d  KEY_FROM_COLUMN.
c1e0: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45  .        FROM TE
c1f0: 4d 50 2e 53 43 48 45 4d 41 46 4f 52 45 49 47 4e  MP.SCHEMAFOREIGN
c200: 4b 45 59 53 3b 0d 0a 20 20 20 20 7d 7d 0d 0a 0d  KEYS;..    }}...
c210: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
c220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c260: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
c270: 74 20 64 61 74 61 2d 31 2e 32 36 20 7b 4c 49 4e  t data-1.26 {LIN
c280: 51 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54  Q SQL_CONSTRAINT
c290: 53 20 72 65 73 6f 75 72 63 65 7d 20 2d 62 6f 64  S resource} -bod
c2a0: 79 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e  y {..  object in
c2b0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
c2c0: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..      
c2d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c2e0: 74 65 2e 4c 69 6e 71 2e 50 72 6f 70 65 72 74 69  te.Linq.Properti
c2f0: 65 73 2e 52 65 73 6f 75 72 63 65 73 20 53 51 4c  es.Resources SQL
c300: 5f 43 4f 4e 53 54 52 41 49 4e 54 53 0d 0a 7d 20  _CONSTRAINTS..} 
c310: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
c320: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
c330: 63 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ct System.Data.S
c340: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
c350: 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 7d  ata.SQLite.Linq}
c360: 20 2d 72 65 73 75 6c 74 20 7b 0d 0a 20 20 20 20   -result {..    
c370: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56 49    CREATE TEMP VI
c380: 45 57 20 53 43 48 45 4d 41 43 4f 4e 53 54 52 41  EW SCHEMACONSTRA
c390: 49 4e 54 53 20 41 53 0d 0a 20 20 20 20 20 20 20  INTS AS..       
c3a0: 20 53 45 4c 45 43 54 20 49 4e 44 45 58 5f 43 41   SELECT INDEX_CA
c3b0: 54 41 4c 4f 47 20 41 53 20 43 4f 4e 53 54 52 41  TALOG AS CONSTRA
c3c0: 49 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20  INT_CATALOG,..  
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
c3e0: 4c 20 41 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f  L AS CONSTRAINT_
c3f0: 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20  SCHEMA,..       
c400: 20 20 20 20 20 20 20 20 49 4e 44 45 58 5f 4e 41          INDEX_NA
c410: 4d 45 20 41 53 20 43 4f 4e 53 54 52 41 49 4e 54  ME AS CONSTRAINT
c420: 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20  _NAME,..        
c430: 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41 54         TABLE_CAT
c440: 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20  ALOG,..         
c450: 20 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 54 41        NULL AS TA
c460: 42 4c 45 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20  BLE_SCHEMA,..   
c470: 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c              TABL
c480: 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20  E_NAME,..       
c490: 20 20 20 20 20 20 20 20 27 50 52 49 4d 41 52 59          'PRIMARY
c4a0: 20 4b 45 59 27 20 41 53 20 43 4f 4e 53 54 52 41   KEY' AS CONSTRA
c4b0: 49 4e 54 5f 54 59 50 45 2c 0d 0a 20 20 20 20 20  INT_TYPE,..     
c4c0: 20 20 20 20 20 20 20 20 20 20 30 20 41 53 20 49            0 AS I
c4d0: 53 5f 44 45 46 45 52 52 41 42 4c 45 2c 0d 0a 20  S_DEFERRABLE,.. 
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
c4f0: 41 53 20 49 4e 49 54 49 41 4c 4c 59 5f 44 45 46  AS INITIALLY_DEF
c500: 45 52 52 45 44 2c 0d 0a 20 20 20 20 20 20 20 20  ERRED,..        
c510: 20 20 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 43         NULL AS C
c520: 48 45 43 4b 5f 43 4c 41 55 53 45 0d 0a 20 20 20  HECK_CLAUSE..   
c530: 20 20 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53       FROM TEMP.S
c540: 43 48 45 4d 41 49 4e 44 45 58 45 53 0d 0a 20 20  CHEMAINDEXES..  
c550: 20 20 20 20 20 20 57 48 45 52 45 20 50 52 49 4d        WHERE PRIM
c560: 41 52 59 5f 4b 45 59 20 3d 20 31 0d 0a 20 20 20  ARY_KEY = 1..   
c570: 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20 20 20 20       UNION..    
c580: 20 20 20 20 53 45 4c 45 43 54 20 49 4e 44 45 58      SELECT INDEX
c590: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
c5a0: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d            NULL,.
c5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c5c0: 49 4e 44 45 58 5f 4e 41 4d 45 2c 0d 0a 20 20 20  INDEX_NAME,..   
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c              TABL
c5e0: 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20  E_CATALOG,..    
c5f0: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c             NULL,
c600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c610: 20 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20   TABLE_NAME,..  
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 55 4e               'UN
c630: 49 51 55 45 27 2c 0d 0a 20 20 20 20 20 20 20 20  IQUE',..        
c640: 20 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20 20         0,..     
c650: 20 20 20 20 20 20 20 20 20 20 30 2c 0d 0a 20 20            0,..  
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
c670: 4c 0d 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20  L..        FROM 
c680: 54 45 4d 50 2e 53 43 48 45 4d 41 49 4e 44 45 58  TEMP.SCHEMAINDEX
c690: 45 53 0d 0a 20 20 20 20 20 20 20 20 57 48 45 52  ES..        WHER
c6a0: 45 20 50 52 49 4d 41 52 59 5f 4b 45 59 20 3d 20  E PRIMARY_KEY = 
c6b0: 30 20 41 4e 44 20 5b 55 4e 49 51 55 45 5d 20 3d  0 AND [UNIQUE] =
c6c0: 20 31 0d 0a 20 20 20 20 20 20 20 20 55 4e 49 4f   1..        UNIO
c6d0: 4e 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43  N..        SELEC
c6e0: 54 20 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54  T CONSTRAINT_CAT
c6f0: 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20  ALOG,..         
c700: 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20        NULL,..   
c710: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53              CONS
c720: 54 52 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20  TRAINT_NAME,..  
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
c740: 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20  LE_CATALOG,..   
c750: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
c760: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c770: 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20    TABLE_NAME,.. 
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f                CO
c790: 4e 53 54 52 41 49 4e 54 5f 54 59 50 45 2c 0d 0a  NSTRAINT_TYPE,..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
c7b0: 53 5f 44 45 46 45 52 52 41 42 4c 45 2c 0d 0a 20  S_DEFERRABLE,.. 
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e                IN
c7d0: 49 54 49 41 4c 4c 59 5f 44 45 46 45 52 52 45 44  ITIALLY_DEFERRED
c7e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c7f0: 20 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20    NULL..        
c800: 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d 41  FROM TEMP.SCHEMA
c810: 46 4f 52 45 49 47 4e 4b 45 59 53 3b 0d 0a 20 20  FOREIGNKEYS;..  
c820: 20 20 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23    }}....########
c830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c870: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
c880: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
c890: 32 37 20 7b 45 46 36 20 53 51 4c 5f 43 4f 4e 53  27 {EF6 SQL_CONS
c8a0: 54 52 41 49 4e 54 53 20 72 65 73 6f 75 72 63 65  TRAINTS resource
c8b0: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 6f 62 6a  } -body {..  obj
c8c0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
c8d0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
c8e0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
c8f0: 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 50 72 6f  a.SQLite.EF6.Pro
c900: 70 65 72 74 69 65 73 2e 52 65 73 6f 75 72 63 65  perties.Resource
c910: 73 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54  s SQL_CONSTRAINT
c920: 53 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  S..} -constraint
c930: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
c940: 2e 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 44  .object System.D
c950: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 53 79 73  ata.SQLite\..Sys
c960: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
c970: 45 46 36 7d 20 2d 72 65 73 75 6c 74 20 7b 0d 0a  EF6} -result {..
c980: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
c990: 50 20 56 49 45 57 20 53 43 48 45 4d 41 43 4f 4e  P VIEW SCHEMACON
c9a0: 53 54 52 41 49 4e 54 53 20 41 53 0d 0a 20 20 20  STRAINTS AS..   
c9b0: 20 20 20 20 20 53 45 4c 45 43 54 20 49 4e 44 45       SELECT INDE
c9c0: 58 5f 43 41 54 41 4c 4f 47 20 41 53 20 43 4f 4e  X_CATALOG AS CON
c9d0: 53 54 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c  STRAINT_CATALOG,
c9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9f0: 20 4e 55 4c 4c 20 41 53 20 43 4f 4e 53 54 52 41   NULL AS CONSTRA
ca00: 49 4e 54 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20  INT_SCHEMA,..   
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 44 45              INDE
ca20: 58 5f 4e 41 4d 45 20 41 53 20 43 4f 4e 53 54 52  X_NAME AS CONSTR
ca30: 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20  AINT_NAME,..    
ca40: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
ca50: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
ca60: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41            NULL A
ca70: 53 20 54 41 42 4c 45 5f 53 43 48 45 4d 41 2c 0d  S TABLE_SCHEMA,.
ca80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca90: 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20  TABLE_NAME,..   
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 27 50 52 49              'PRI
cab0: 4d 41 52 59 20 4b 45 59 27 20 41 53 20 43 4f 4e  MARY KEY' AS CON
cac0: 53 54 52 41 49 4e 54 5f 54 59 50 45 2c 0d 0a 20  STRAINT_TYPE,.. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 20                0 
cae0: 41 53 20 49 53 5f 44 45 46 45 52 52 41 42 4c 45  AS IS_DEFERRABLE
caf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cb00: 20 20 30 20 41 53 20 49 4e 49 54 49 41 4c 4c 59    0 AS INITIALLY
cb10: 5f 44 45 46 45 52 52 45 44 2c 0d 0a 20 20 20 20  _DEFERRED,..    
cb20: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20             NULL 
cb30: 41 53 20 43 48 45 43 4b 5f 43 4c 41 55 53 45 0d  AS CHECK_CLAUSE.
cb40: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45  .        FROM TE
cb50: 4d 50 2e 53 43 48 45 4d 41 49 4e 44 45 58 45 53  MP.SCHEMAINDEXES
cb60: 0d 0a 20 20 20 20 20 20 20 20 57 48 45 52 45 20  ..        WHERE 
cb70: 50 52 49 4d 41 52 59 5f 4b 45 59 20 3d 20 31 0d  PRIMARY_KEY = 1.
cb80: 0a 20 20 20 20 20 20 20 20 55 4e 49 4f 4e 0d 0a  .        UNION..
cb90: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 49          SELECT I
cba0: 4e 44 45 58 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20  NDEX_CATALOG,.. 
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55                NU
cbc0: 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  LL,..           
cbd0: 20 20 20 20 49 4e 44 45 58 5f 4e 41 4d 45 2c 0d      INDEX_NAME,.
cbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cbf0: 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a  TABLE_CATALOG,..
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
cc10: 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ULL,..          
cc20: 20 20 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c       TABLE_NAME,
cc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc40: 20 27 55 4e 49 51 55 45 27 2c 0d 0a 20 20 20 20   'UNIQUE',..    
cc50: 20 20 20 20 20 20 20 20 20 20 20 30 2c 0d 0a 20             0,.. 
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
cc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc80: 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 46   NULL..        F
cc90: 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d 41 49  ROM TEMP.SCHEMAI
cca0: 4e 44 45 58 45 53 0d 0a 20 20 20 20 20 20 20 20  NDEXES..        
ccb0: 57 48 45 52 45 20 50 52 49 4d 41 52 59 5f 4b 45  WHERE PRIMARY_KE
ccc0: 59 20 3d 20 30 20 41 4e 44 20 5b 55 4e 49 51 55  Y = 0 AND [UNIQU
ccd0: 45 5d 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20  E] = 1..        
cce0: 55 4e 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 53  UNION..        S
ccf0: 45 4c 45 43 54 20 43 4f 4e 53 54 52 41 49 4e 54  ELECT CONSTRAINT
cd00: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
cd10: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d            NULL,.
cd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cd30: 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d 45 2c  CONSTRAINT_NAME,
cd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd50: 20 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d   TABLE_CATALOG,.
cd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cd70: 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20  NULL,..         
cd80: 20 20 20 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45        TABLE_NAME
cd90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cda0: 20 20 43 4f 4e 53 54 52 41 49 4e 54 5f 54 59 50    CONSTRAINT_TYP
cdb0: 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
cdc0: 20 20 20 49 53 5f 44 45 46 45 52 52 41 42 4c 45     IS_DEFERRABLE
cdd0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cde0: 20 20 49 4e 49 54 49 41 4c 4c 59 5f 44 45 46 45    INITIALLY_DEFE
cdf0: 52 52 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20  RRED,..         
ce00: 20 20 20 20 20 20 4e 55 4c 4c 0d 0a 20 20 20 20        NULL..    
ce10: 20 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43      FROM TEMP.SC
ce20: 48 45 4d 41 46 4f 52 45 49 47 4e 4b 45 59 53 3b  HEMAFOREIGNKEYS;
ce30: 0d 0a 20 20 20 20 7d 7d 0d 0a 0d 0a 23 23 23 23  ..    }}....####
ce40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce80: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
ce90: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
cea0: 61 2d 31 2e 32 38 20 7b 53 51 4c 69 74 65 44 61  a-1.28 {SQLiteDa
ceb0: 74 61 52 65 61 64 65 72 20 47 65 74 56 61 6c 75  taReader GetValu
cec0: 65 73 20 77 2f 63 6f 6c 6c 65 63 74 69 6f 6e 7d  es w/collection}
ced0: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
cee0: 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
cef0: 6d 65 20 64 61 74 61 2d 31 2e 32 38 2e 64 62 5d  me data-1.28.db]
cf00: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
cf10: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b  ql execute $db {
cf20: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
cf30: 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45 52 20  LE t1(x INTEGER 
cf40: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c  PRIMARY KEY ASC,
cf50: 20 79 20 54 45 58 54 29 3b 0d 0a 20 20 20 20 49   y TEXT);..    I
cf60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
cf70: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 2c 20 27  , y) VALUES(1, '
cf80: 61 61 72 64 76 61 72 6b 27 29 3b 0d 0a 20 20 20  aardvark');..   
cf90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
cfa0: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c  (x, y) VALUES(2,
cfb0: 20 27 62 65 61 72 27 29 3b 0d 0a 20 20 20 20 49   'bear');..    I
cfc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
cfd0: 2c 20 79 29 20 56 41 4c 55 45 53 28 33 2c 20 27  , y) VALUES(3, '
cfe0: 63 68 69 63 6b 65 6e 27 29 3b 0d 0a 20 20 20 20  chicken');..    
cff0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
d000: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 34 2c 20  x, y) VALUES(4, 
d010: 27 64 75 63 6b 27 29 3b 0d 0a 20 20 20 20 49 4e  'duck');..    IN
d020: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
d030: 20 79 29 20 56 41 4c 55 45 53 28 35 2c 20 27 65   y) VALUES(5, 'e
d040: 6c 65 70 68 61 6e 74 27 29 3b 0d 0a 20 20 20 20  lephant');..    
d050: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
d060: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 36 2c 20  x, y) VALUES(6, 
d070: 27 66 72 6f 67 27 29 3b 0d 0a 20 20 20 20 49 4e  'frog');..    IN
d080: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
d090: 20 79 29 20 56 41 4c 55 45 53 28 37 2c 20 27 67   y) VALUES(7, 'g
d0a0: 6f 6f 73 65 27 29 3b 0d 0a 20 20 20 20 49 4e 53  oose');..    INS
d0b0: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
d0c0: 79 29 20 56 41 4c 55 45 53 28 38 2c 20 27 68 6f  y) VALUES(8, 'ho
d0d0: 72 73 65 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45  rse');..    INSE
d0e0: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
d0f0: 29 20 56 41 4c 55 45 53 28 39 2c 20 27 69 67 75  ) VALUES(9, 'igu
d100: 61 6e 61 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45  ana');..    INSE
d110: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
d120: 29 20 56 41 4c 55 45 53 28 31 30 2c 20 27 6a 65  ) VALUES(10, 'je
d130: 6c 6c 79 66 69 73 68 27 29 3b 0d 0a 20 20 20 20  llyfish');..    
d140: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
d150: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 31 2c  x, y) VALUES(11,
d160: 20 27 6b 61 6e 67 61 72 6f 6f 27 29 3b 0d 0a 20   'kangaroo');.. 
d170: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
d180: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
d190: 31 32 2c 20 27 6c 6c 61 6d 61 27 29 3b 0d 0a 20  12, 'llama');.. 
d1a0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
d1b0: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
d1c0: 31 33 2c 20 27 6d 6f 6f 73 65 27 29 3b 0d 0a 20  13, 'moose');.. 
d1d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
d1e0: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
d1f0: 31 34 2c 20 27 6e 65 77 74 27 29 3b 0d 0a 20 20  14, 'newt');..  
d200: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
d210: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31   (x, y) VALUES(1
d220: 35 2c 20 27 6f 73 74 72 69 63 68 27 29 3b 0d 0a  5, 'ostrich');..
d230: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
d240: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
d250: 28 31 36 2c 20 27 70 69 67 27 29 3b 0d 0a 20 20  (16, 'pig');..  
d260: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
d270: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31   (x, y) VALUES(1
d280: 37 2c 20 27 71 75 61 69 6c 27 29 3b 0d 0a 20 20  7, 'quail');..  
d290: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
d2a0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31   (x, y) VALUES(1
d2b0: 38 2c 20 27 72 68 69 6e 6f 63 65 72 6f 73 27 29  8, 'rhinoceros')
d2c0: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
d2d0: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
d2e0: 55 45 53 28 31 39 2c 20 27 73 68 61 72 6b 27 29  UES(19, 'shark')
d2f0: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
d300: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
d310: 55 45 53 28 32 30 2c 20 27 74 69 67 65 72 27 29  UES(20, 'tiger')
d320: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
d330: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
d340: 55 45 53 28 32 31 2c 20 27 75 6e 69 63 6f 72 6e  UES(21, 'unicorn
d350: 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  ');..    INSERT 
d360: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
d370: 41 4c 55 45 53 28 32 32 2c 20 27 76 69 70 65 72  ALUES(22, 'viper
d380: 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  ');..    INSERT 
d390: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
d3a0: 41 4c 55 45 53 28 32 33 2c 20 27 77 65 61 73 65  ALUES(23, 'wease
d3b0: 6c 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  l');..    INSERT
d3c0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
d3d0: 56 41 4c 55 45 53 28 32 34 2c 20 27 78 65 72 75  VALUES(24, 'xeru
d3e0: 73 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  s');..    INSERT
d3f0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
d400: 56 41 4c 55 45 53 28 32 35 2c 20 27 79 61 6b 27  VALUES(25, 'yak'
d410: 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
d420: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
d430: 4c 55 45 53 28 32 36 2c 20 27 7a 65 62 72 61 27  LUES(26, 'zebra'
d440: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
d450: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74   connection [get
d460: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d  DbConnection]...
d470: 0a 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b  .  set command [
d480: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
d490: 6c 69 61 73 20 53 79 73 74 65 6d 2e 44 61 74 61  lias System.Data
d4a0: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
d4b0: 6d 6d 61 6e 64 20 5c 0d 0a 20 20 20 20 20 20 22  mmand \..      "
d4c0: 53 45 4c 45 43 54 20 78 2c 20 79 2c 20 78 2c 20  SELECT x, y, x, 
d4d0: 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  y FROM t1 ORDER 
d4e0: 42 59 20 79 20 44 45 53 43 3b 22 20 24 63 6f 6e  BY y DESC;" $con
d4f0: 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65  nection]....  se
d500: 74 20 72 65 61 64 65 72 20 5b 24 63 6f 6d 6d 61  t reader [$comma
d510: 6e 64 20 2d 61 6c 69 61 73 20 45 78 65 63 75 74  nd -alias Execut
d520: 65 52 65 61 64 65 72 5d 0d 0a 20 20 73 65 74 20  eReader]..  set 
d530: 63 6f 6c 6c 65 63 74 69 6f 6e 20 5b 24 72 65 61  collection [$rea
d540: 64 65 72 20 2d 61 6c 69 61 73 20 47 65 74 56 61  der -alias GetVa
d550: 6c 75 65 73 5d 0d 0a 20 20 73 65 74 20 72 65 73  lues]..  set res
d560: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
d570: 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d  object foreach -
d580: 61 6c 69 61 73 20 69 74 65 6d 20 24 63 6f 6c 6c  alias item $coll
d590: 65 63 74 69 6f 6e 20 7b 0d 0a 20 20 20 20 6c 61  ection {..    la
d5a0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63  ppend result [$c
d5b0: 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74 56 61 6c  ollection GetVal
d5c0: 75 65 73 20 24 69 74 65 6d 5d 0d 0a 20 20 7d 0d  ues $item]..  }.
d5d0: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d  ...  set result.
d5e0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
d5f0: 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f   freeDbConnectio
d600: 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  n....  unset -no
d610: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
d620: 69 74 65 6d 20 63 6f 6c 6c 65 63 74 69 6f 6e 20  item collection 
d630: 72 65 61 64 65 72 20 63 6f 6d 6d 61 6e 64 20 63  reader command c
d640: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63  onnection....  c
d650: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
d660: 6d 65 3b 20 23 20 4e 4f 54 45 3a 20 41 66 74 65  me; # NOTE: Afte
d670: 72 20 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 61  r object disposa
d680: 6c 2e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  l.....  unset -n
d690: 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c  ocomplain db fil
d6a0: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
d6b0: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
d6c0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
d6d0: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
d6e0: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
d6f0: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
d700: 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
d710: 75 6c 74 20 7b 7b 32 36 20 32 36 7d 20 7b 7a 65  ult {{26 26} {ze
d720: 62 72 61 20 7a 65 62 72 61 7d 7d 7d 0d 0a 0d 0a  bra zebra}}}....
d730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
d780: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
d790: 20 64 61 74 61 2d 31 2e 32 39 20 7b 4c 49 4e 51   data-1.29 {LINQ
d7a0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
d7b0: 74 65 6e 73 69 6f 6e 73 2e 42 75 69 6c 64 54 65  tensions.BuildTe
d7c0: 6d 70 53 63 68 65 6d 61 7d 20 2d 73 65 74 75 70  mpSchema} -setup
d7d0: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
d7e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
d7f0: 2d 31 2e 32 39 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  -1.29.db]..} -bo
d800: 64 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e  dy {..  set conn
d810: 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e  ection [getDbCon
d820: 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65  nection]....  se
d830: 74 20 70 72 6f 76 69 64 65 72 53 65 72 76 69 63  t providerServic
d840: 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  es [object invok
d850: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
d860: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73  lic \..      Sys
d870: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
d880: 4c 69 6e 71 2e 53 51 4c 69 74 65 50 72 6f 76 69  Linq.SQLiteProvi
d890: 64 65 72 53 65 72 76 69 63 65 73 20 49 6e 73 74  derServices Inst
d8a0: 61 6e 63 65 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63  ance]....  objec
d8b0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
d8c0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 74 79 70 65  +NonPublic -type
d8d0: 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
d8e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 53 51  .Data.SQLite.ISQ
d8f0: 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73  LiteSchemaExtens
d900: 69 6f 6e 73 20 24 70 72 6f 76 69 64 65 72 53 65  ions $providerSe
d910: 72 76 69 63 65 73 20 5c 0d 0a 20 20 20 20 20 20  rvices \..      
d920: 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61 20  BuildTempSchema 
d930: 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 7d 20 2d  $connection..} -
d940: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
d950: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
d960: 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e  ....  freeDbConn
d970: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65  ection....  unse
d980: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72  t -nocomplain pr
d990: 6f 76 69 64 65 72 53 65 72 76 69 63 65 73 20 63  oviderServices c
d9a0: 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66 69 6c  onnection db fil
d9b0: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
d9c0: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
d9d0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
d9e0: 54 6f 44 6f 20 53 51 4c 69 74 65 20 53 79 73 74  ToDo SQLite Syst
d9f0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d  em.Data.SQLite\.
da00: 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
da10: 69 74 65 2e 4c 69 6e 71 7d 20 2d 72 65 73 75 6c  ite.Linq} -resul
da20: 74 20 7b 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  t {}}....#######
da30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
da40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
da50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
da60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
da70: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
da80: 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
da90: 2e 33 30 20 7b 45 46 36 20 49 53 51 4c 69 74 65  .30 {EF6 ISQLite
daa0: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
dab0: 2e 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61  .BuildTempSchema
dac0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
dad0: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
dae0: 61 6d 65 20 64 61 74 61 2d 31 2e 33 30 2e 64 62  ame data-1.30.db
daf0: 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
db00: 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b  set connection [
db10: 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d  getDbConnection]
db20: 0d 0a 0d 0a 20 20 73 65 74 20 70 72 6f 76 69 64  ....  set provid
db30: 65 72 53 65 72 76 69 63 65 73 20 5b 6f 62 6a 65  erServices [obje
db40: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
db50: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \.. 
db60: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
db70: 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51 4c 69  .SQLite.EF6.SQLi
db80: 74 65 50 72 6f 76 69 64 65 72 53 65 72 76 69 63  teProviderServic
db90: 65 73 20 49 6e 73 74 61 6e 63 65 5d 0d 0a 0d 0a  es Instance]....
dba0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
dbb0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
dbc0: 63 20 2d 74 79 70 65 20 5c 0d 0a 20 20 20 20 20  c -type \..     
dbd0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
dbe0: 69 74 65 2e 49 53 51 4c 69 74 65 53 63 68 65 6d  ite.ISQLiteSchem
dbf0: 61 45 78 74 65 6e 73 69 6f 6e 73 20 24 70 72 6f  aExtensions $pro
dc00: 76 69 64 65 72 53 65 72 76 69 63 65 73 20 5c 0d  viderServices \.
dc10: 0a 20 20 20 20 20 20 42 75 69 6c 64 54 65 6d 70  .      BuildTemp
dc20: 53 63 68 65 6d 61 20 24 63 6f 6e 6e 65 63 74 69  Schema $connecti
dc30: 6f 6e 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  on..} -cleanup {
dc40: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
dc50: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 66 72 65  ileName....  fre
dc60: 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
dc70: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
dc80: 6c 61 69 6e 20 70 72 6f 76 69 64 65 72 53 65 72  lain providerSer
dc90: 76 69 63 65 73 20 63 6f 6e 6e 65 63 74 69 6f 6e  vices connection
dca0: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
dcb0: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
dcc0: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
dcd0: 63 74 20 6d 6f 6e 6f 54 6f 44 6f 20 53 51 4c 69  ct monoToDo SQLi
dce0: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
dcf0: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
dd00: 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 7d 20  ata.SQLite.EF6} 
dd10: 2d 72 65 73 75 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23  -result {}}....#
dd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
dd70: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
dd80: 64 61 74 61 2d 31 2e 33 31 20 7b 56 41 52 43 48  data-1.31 {VARCH
dd90: 41 52 20 2f 20 4e 56 41 52 43 48 41 52 20 74 79  AR / NVARCHAR ty
dda0: 70 65 73 20 77 69 74 68 20 73 70 61 63 65 73 7d  pes with spaces}
ddb0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 6c 69 73 74   -body {..  list
ddc0: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
ddd0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
dde0: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  c System.Data.SQ
ddf0: 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76 65  Lite.SQLiteConve
de00: 72 74 20 5c 0d 0a 20 20 20 20 20 20 54 79 70 65  rt \..      Type
de10: 4e 61 6d 65 54 6f 44 62 54 79 70 65 20 6e 75 6c  NameToDbType nul
de20: 6c 20 56 41 52 43 48 41 52 20 4e 6f 6e 65 5d 20  l VARCHAR None] 
de30: 5c 0d 0a 20 20 20 20 20 20 5b 6f 62 6a 65 63 74  \..      [object
de40: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
de50: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d  NonPublic System
de60: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
de70: 69 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20  iteConvert \..  
de80: 20 20 20 20 54 79 70 65 4e 61 6d 65 54 6f 44 62      TypeNameToDb
de90: 54 79 70 65 20 6e 75 6c 6c 20 4e 56 41 52 43 48  Type null NVARCH
dea0: 41 52 20 4e 6f 6e 65 5d 20 5c 0d 0a 20 20 20 20  AR None] \..    
deb0: 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
dec0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
ded0: 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ic System.Data.S
dee0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76  QLite.SQLiteConv
def0: 65 72 74 20 5c 0d 0a 20 20 20 20 20 20 54 79 70  ert \..      Typ
df00: 65 4e 61 6d 65 54 6f 44 62 54 79 70 65 20 6e 75  eNameToDbType nu
df10: 6c 6c 20 56 41 52 43 48 41 52 28 31 29 20 4e 6f  ll VARCHAR(1) No
df20: 6e 65 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 6f 62  ne] \..      [ob
df30: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
df40: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79  gs +NonPublic Sy
df50: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
df60: 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 5c  .SQLiteConvert \
df70: 0d 0a 20 20 20 20 20 20 54 79 70 65 4e 61 6d 65  ..      TypeName
df80: 54 6f 44 62 54 79 70 65 20 6e 75 6c 6c 20 4e 56  ToDbType null NV
df90: 41 52 43 48 41 52 28 31 29 20 4e 6f 6e 65 5d 20  ARCHAR(1) None] 
dfa0: 5c 0d 0a 20 20 20 20 20 20 5b 6f 62 6a 65 63 74  \..      [object
dfb0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
dfc0: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d  NonPublic System
dfd0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
dfe0: 69 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20  iteConvert \..  
dff0: 20 20 20 20 54 79 70 65 4e 61 6d 65 54 6f 44 62      TypeNameToDb
e000: 54 79 70 65 20 6e 75 6c 6c 20 22 56 41 52 43 48  Type null "VARCH
e010: 41 52 20 28 31 29 22 20 4e 6f 6e 65 5d 20 5c 0d  AR (1)" None] \.
e020: 0a 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69  .      [object i
e030: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
e040: 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44  nPublic System.D
e050: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
e060: 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20 20  eConvert \..    
e070: 20 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79    TypeNameToDbTy
e080: 70 65 20 6e 75 6c 6c 20 22 4e 56 41 52 43 48 41  pe null "NVARCHA
e090: 52 20 28 31 29 22 20 4e 6f 6e 65 5d 20 5c 0d 0a  R (1)" None] \..
e0a0: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
e0b0: 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
e0c0: 6a 65 63 74 20 53 79 73 74 65 6d 2e 44 61 74 61  ject System.Data
e0d0: 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
e0e0: 20 5c 0d 0a 7b 41 6e 73 69 53 74 72 69 6e 67 20   \..{AnsiString 
e0f0: 53 74 72 69 6e 67 20 41 6e 73 69 53 74 72 69 6e  String AnsiStrin
e100: 67 20 53 74 72 69 6e 67 20 41 6e 73 69 53 74 72  g String AnsiStr
e110: 69 6e 67 20 53 74 72 69 6e 67 7d 7d 0d 0a 0d 0a  ing String}}....
e120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
e170: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
e180: 20 64 61 74 61 2d 31 2e 33 32 20 7b 53 65 74 4d   data-1.32 {SetM
e190: 65 6d 6f 72 79 53 74 61 74 75 73 20 6d 65 74 68  emoryStatus meth
e1a0: 6f 64 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  od} -setup {..  
e1b0: 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b  #..  # NOTE: Mak
e1c0: 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69  e sure that SQLi
e1d0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
e1e0: 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68  is completely sh
e1f0: 75 74 64 6f 77 6e 20 70 72 69 6f 72 20 74 6f 0d  utdown prior to.
e200: 0a 20 20 23 20 20 20 20 20 20 20 73 74 61 72 74  .  #       start
e210: 69 6e 67 20 74 68 69 73 20 74 65 73 74 2e 0d 0a  ing this test...
e220: 20 20 23 0d 0a 20 20 73 68 75 74 64 6f 77 6e 53    #..  shutdownS
e230: 51 4c 69 74 65 20 24 74 65 73 74 5f 63 68 61 6e  QLite $test_chan
e240: 6e 65 6c 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20  nel....  #..  # 
e250: 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 6e 20  NOTE: Create an 
e260: 49 6e 74 50 74 72 20 69 6e 73 74 61 6e 63 65 20  IntPtr instance 
e270: 77 69 74 68 20 61 20 76 61 6c 75 65 20 6f 66 20  with a value of 
e280: 7a 65 72 6f 2e 0d 0a 20 20 23 0d 0a 20 20 73 65  zero...  #..  se
e290: 74 20 7a 65 72 6f 20 5b 6f 62 6a 65 63 74 20 69  t zero [object i
e2a0: 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 49 6e  nvoke -create In
e2b0: 74 50 74 72 20 5a 65 72 6f 5d 0d 0a 0d 0a 20 20  tPtr Zero]....  
e2c0: 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 43 72 65  #..  # NOTE: Cre
e2d0: 61 74 65 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  ate an instance 
e2e0: 6f 66 20 74 68 65 20 63 6f 72 65 20 53 51 4c 69  of the core SQLi
e2f0: 74 65 20 6c 69 62 72 61 72 79 20 69 6e 74 65 72  te library inter
e300: 6f 70 20 77 72 61 70 70 65 72 20 63 6c 61 73 73  op wrapper class
e310: 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20 73 71  ...  #..  set sq
e320: 6c 69 74 65 33 20 5b 6f 62 6a 65 63 74 20 63 72  lite3 [object cr
e330: 65 61 74 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  eate -flags +Non
e340: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61  Public System.Da
e350: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
e360: 33 20 5c 0d 0a 20 20 20 20 20 20 44 65 66 61 75  3 \..      Defau
e370: 6c 74 20 55 6e 73 70 65 63 69 66 69 65 64 20 6e  lt Unspecified n
e380: 75 6c 6c 20 24 7a 65 72 6f 20 6e 75 6c 6c 20 74  ull $zero null t
e390: 72 75 65 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  rue]..} -body {.
e3a0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 72 63  .  set result(rc
e3b0: 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  1) [object invok
e3c0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
e3d0: 6c 69 63 20 24 73 71 6c 69 74 65 33 20 53 65 74  lic $sqlite3 Set
e3e0: 4d 65 6d 6f 72 79 53 74 61 74 75 73 20 5c 0d 0a  MemoryStatus \..
e3f0: 20 20 20 20 20 20 66 61 6c 73 65 5d 0d 0a 0d 0a        false]....
e400: 20 20 73 65 74 20 72 65 73 75 6c 74 28 62 65 66    set result(bef
e410: 6f 72 65 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76  ore) [object inv
e420: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
e430: 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 4d  ublic $sqlite3 M
e440: 65 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a 20 20  emoryUsed]....  
e450: 73 65 74 20 72 65 73 75 6c 74 28 70 74 72 31 29  set result(ptr1)
e460: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
e470: 2d 63 72 65 61 74 65 20 2d 66 6c 61 67 73 20 2b  -create -flags +
e480: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
e490: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
e4a0: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
e4b0: 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65  veMethods sqlite
e4c0: 33 5f 6d 61 6c 6c 6f 63 20 31 30 30 5d 0d 0a 0d  3_malloc 100]...
e4d0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 61 66  .  set result(af
e4e0: 74 65 72 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e  ter1) [object in
e4f0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
e500: 50 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20  Public $sqlite3 
e510: 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a 20  MemoryUsed].... 
e520: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
e530: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
e540: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
e550: 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
e560: 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..     
e570: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 20 24 72   sqlite3_free $r
e580: 65 73 75 6c 74 28 70 74 72 31 29 0d 0a 0d 0a 20  esult(ptr1).... 
e590: 20 73 65 74 20 72 65 73 75 6c 74 28 61 66 74 65   set result(afte
e5a0: 72 32 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  r2) [object invo
e5b0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
e5c0: 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 4d 65  blic $sqlite3 Me
e5d0: 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a 20 20 73  moryUsed]....  s
e5e0: 65 74 20 72 65 73 75 6c 74 28 72 63 32 29 20 5b  et result(rc2) [
e5f0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
e600: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
e610: 24 73 71 6c 69 74 65 33 20 53 65 74 4d 65 6d 6f  $sqlite3 SetMemo
e620: 72 79 53 74 61 74 75 73 20 5c 0d 0a 20 20 20 20  ryStatus \..    
e630: 20 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 73 65 74    true]....  set
e640: 20 72 65 73 75 6c 74 28 72 63 33 29 20 5b 6f 62   result(rc3) [ob
e650: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
e660: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
e670: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
e680: 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
e690: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71  NativeMethods sq
e6a0: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 5d 0d  lite3_shutdown].
e6b0: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28  ...  set result(
e6c0: 72 63 34 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76  rc4) [object inv
e6d0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
e6e0: 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 53  ublic $sqlite3 S
e6f0: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 20 5c  etMemoryStatus \
e700: 0d 0a 20 20 20 20 20 20 74 72 75 65 5d 0d 0a 0d  ..      true]...
e710: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 70 74  .  set result(pt
e720: 72 32 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  r2) [object invo
e730: 6b 65 20 2d 63 72 65 61 74 65 20 2d 66 6c 61 67  ke -create -flag
e740: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
e750: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
e760: 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
e770: 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c  ativeMethods sql
e780: 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 31 30 30 5d  ite3_malloc 100]
e790: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
e7a0: 28 61 66 74 65 72 33 29 20 5b 6f 62 6a 65 63 74  (after3) [object
e7b0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
e7c0: 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c 69 74  NonPublic $sqlit
e7d0: 65 33 20 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a  e3 MemoryUsed]..
e7e0: 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ..  object invok
e7f0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
e800: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  lic System.Data.
e810: 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
e820: 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20  iveMethods \..  
e830: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
e840: 20 24 72 65 73 75 6c 74 28 70 74 72 32 29 0d 0a   $result(ptr2)..
e850: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 61  ..  set result(a
e860: 66 74 65 72 34 29 20 5b 6f 62 6a 65 63 74 20 69  fter4) [object i
e870: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
e880: 6e 50 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33  nPublic $sqlite3
e890: 20 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a   MemoryUsed]....
e8a0: 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74 28 72    list $result(r
e8b0: 63 31 29 20 24 72 65 73 75 6c 74 28 72 63 32 29  c1) $result(rc2)
e8c0: 20 24 72 65 73 75 6c 74 28 72 63 33 29 20 24 72   $result(rc3) $r
e8d0: 65 73 75 6c 74 28 72 63 34 29 20 24 72 65 73 75  esult(rc4) $resu
e8e0: 6c 74 28 70 74 72 31 29 20 5c 0d 0a 20 20 20 20  lt(ptr1) \..    
e8f0: 20 20 24 72 65 73 75 6c 74 28 70 74 72 32 29 20    $result(ptr2) 
e900: 24 72 65 73 75 6c 74 28 62 65 66 6f 72 65 29 20  $result(before) 
e910: 24 72 65 73 75 6c 74 28 61 66 74 65 72 31 29 20  $result(after1) 
e920: 24 72 65 73 75 6c 74 28 61 66 74 65 72 32 29 20  $result(after2) 
e930: 5c 0d 0a 20 20 20 20 20 20 24 72 65 73 75 6c 74  \..      $result
e940: 28 61 66 74 65 72 33 29 20 24 72 65 73 75 6c 74  (after3) $result
e950: 28 61 66 74 65 72 34 29 20 5c 0d 0a 20 20 20 20  (after4) \..    
e960: 20 20 5b 65 78 70 72 20 7b 24 72 65 73 75 6c 74    [expr {$result
e970: 28 62 65 66 6f 72 65 29 20 3d 3d 20 24 72 65 73  (before) == $res
e980: 75 6c 74 28 61 66 74 65 72 31 29 7d 5d 20 5c 0d  ult(after1)}] \.
e990: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 72  .      [expr {$r
e9a0: 65 73 75 6c 74 28 62 65 66 6f 72 65 29 20 3d 3d  esult(before) ==
e9b0: 20 24 72 65 73 75 6c 74 28 61 66 74 65 72 32 29   $result(after2)
e9c0: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
e9d0: 72 20 7b 24 72 65 73 75 6c 74 28 61 66 74 65 72  r {$result(after
e9e0: 33 29 20 3e 20 30 7d 5d 20 5c 0d 0a 20 20 20 20  3) > 0}] \..    
e9f0: 20 20 5b 65 78 70 72 20 7b 24 72 65 73 75 6c 74    [expr {$result
ea00: 28 62 65 66 6f 72 65 29 20 3c 20 24 72 65 73 75  (before) < $resu
ea10: 6c 74 28 61 66 74 65 72 33 29 7d 5d 20 5c 0d 0a  lt(after3)}] \..
ea20: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 72 65        [expr {$re
ea30: 73 75 6c 74 28 61 66 74 65 72 31 29 20 3c 20 24  sult(after1) < $
ea40: 72 65 73 75 6c 74 28 61 66 74 65 72 33 29 7d 5d  result(after3)}]
ea50: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
ea60: 7b 24 72 65 73 75 6c 74 28 61 66 74 65 72 34 29  {$result(after4)
ea70: 20 3c 20 24 72 65 73 75 6c 74 28 61 66 74 65 72   < $result(after
ea80: 33 29 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  3)}]..} -cleanup
ea90: 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20   {..  catch {.. 
eaa0: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
eab0: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
eac0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
ead0: 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65  rary is complete
eae0: 6c 79 20 73 68 75 74 64 6f 77 6e 20 70 72 69 6f  ly shutdown prio
eaf0: 72 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 74  r..    #       t
eb00: 6f 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  o attempting to 
eb10: 72 65 63 6f 6e 66 69 67 75 72 65 20 74 68 65 20  reconfigure the 
eb20: 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 73 65  memory status se
eb30: 74 74 69 6e 67 2e 0d 0a 20 20 20 20 23 0d 0a 20  tting...    #.. 
eb40: 20 20 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74     shutdownSQLit
eb50: 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  e $test_channel.
eb60: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
eb70: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
eb80: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
eb90: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
eba0: 20 74 68 65 20 70 72 6f 63 65 73 73 2d 77 69 64   the process-wid
ebb0: 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 6d  e..    #       m
ebc0: 65 6d 6f 72 79 20 75 73 61 67 65 20 74 72 61 63  emory usage trac
ebd0: 6b 69 6e 67 20 73 65 74 74 69 6e 67 20 69 73 20  king setting is 
ebe0: 72 65 73 74 6f 72 65 64 2e 20 20 54 68 69 73 20  restored.  This 
ebf0: 69 73 20 6e 6f 74 20 31 30 30 25 0d 0a 20 20 20  is not 100%..   
ec00: 20 23 20 20 20 20 20 20 20 72 65 6c 69 61 62 6c   #       reliabl
ec10: 65 20 62 65 63 61 75 73 65 20 77 65 20 68 61 76  e because we hav
ec20: 65 20 6e 6f 20 69 64 65 61 20 77 68 61 74 20 74  e no idea what t
ec30: 68 65 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  he original valu
ec40: 65 20 77 61 73 0d 0a 20 20 20 20 23 20 20 20 20  e was..    #    
ec50: 20 20 20 75 70 6f 6e 20 65 6e 74 72 79 20 69 6e     upon entry in
ec60: 74 6f 20 74 68 69 73 20 74 65 73 74 20 28 69 2e  to this test (i.
ec70: 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20 75  e. because the u
ec80: 6e 64 65 72 6c 79 69 6e 67 20 63 6f 72 65 0d 0a  nderlying core..
ec90: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
eca0: 61 72 79 20 70 72 6f 70 65 72 74 79 20 69 73 20  ary property is 
ecb0: 63 75 72 72 65 6e 74 6c 79 20 77 72 69 74 65 2d  currently write-
ecc0: 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 23 0d 0a 20  only)...    #.. 
ecd0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
ece0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
ecf0: 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ic System.Data.S
ed00: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
ed10: 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..   
ed20: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e       sqlite3_con
ed30: 66 69 67 5f 69 6e 74 20 53 51 4c 49 54 45 5f 43  fig_int SQLITE_C
ed40: 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 20  ONFIG_MEMSTATUS 
ed50: 31 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  1..  }....  unse
ed60: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
ed70: 73 75 6c 74 20 73 71 6c 69 74 65 33 20 7a 65 72  sult sqlite3 zer
ed80: 6f 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  o..} -constraint
ed90: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
eda0: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
edb0: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
edc0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
edd0: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
ede0: 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20 72  SQLite} -match r
edf0: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e  egexp -result {^
ee00: 4f 6b 20 4d 69 73 75 73 65 20 4f 6b 20 4f 6b 20  Ok Misuse Ok Ok 
ee10: 53 79 73 74 65 6d 23 49 6e 74 50 74 72 23 5c 64  System#IntPtr#\d
ee20: 2b 5c 0d 0a 53 79 73 74 65 6d 23 49 6e 74 50 74  +\..System#IntPt
ee30: 72 23 5c 64 2b 20 5c 64 2b 20 5c 64 2b 20 5c 64  r#\d+ \d+ \d+ \d
ee40: 2b 20 5c 64 2b 20 5c 64 2b 20 54 72 75 65 20 54  + \d+ \d+ True T
ee50: 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72  rue True True Tr
ee60: 75 65 20 54 72 75 65 24 7d 7d 0d 0a 0d 0a 23 23  ue True$}}....##
ee70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ee90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eeb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
eec0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
eed0: 61 74 61 2d 31 2e 33 33 20 7b 53 51 4c 69 74 65  ata-1.33 {SQLite
eee0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 20  Connection.Open 
eef0: 77 69 74 68 20 53 65 74 44 65 66 61 75 6c 74 73  with SetDefaults
ef00: 3d 46 61 6c 73 65 7d 20 2d 73 65 74 75 70 20 7b  =False} -setup {
ef10: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
ef20: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
ef30: 2e 33 33 2e 64 62 5d 20 22 22 20 22 22 20 22 22  .33.db] "" "" ""
ef40: 20 22 22 20 53 65 74 44 65 66 61 75 6c 74 73 3d   "" SetDefaults=
ef50: 46 61 6c 73 65 0d 0a 7d 20 2d 62 6f 64 79 20 7b  False..} -body {
ef60: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b  ..  set result [
ef70: 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  list]....  lappe
ef80: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
ef90: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
efa0: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
efb0: 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d 0d  MA page_size;"].
efc0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
efd0: 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
efe0: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
eff0: 64 62 20 22 50 52 41 47 4d 41 20 6d 61 78 5f 70  db "PRAGMA max_p
f000: 61 67 65 5f 63 6f 75 6e 74 3b 22 5d 0d 0a 20 20  age_count;"]..  
f010: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
f020: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
f030: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
f040: 22 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f 66  "PRAGMA legacy_f
f050: 69 6c 65 5f 66 6f 72 6d 61 74 3b 22 5d 0d 0a 20  ile_format;"].. 
f060: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
f070: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
f080: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
f090: 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f   "PRAGMA synchro
f0a0: 6e 6f 75 73 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  nous;"]..  lappe
f0b0: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f0c0: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f0d0: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f0e0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d  MA cache_size;"]
f0f0: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
f100: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
f110: 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
f120: 24 64 62 20 22 50 52 41 47 4d 41 20 6a 6f 75 72  $db "PRAGMA jour
f130: 6e 61 6c 5f 6d 6f 64 65 3b 22 5d 0d 0a 20 20 6c  nal_mode;"]..  l
f140: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
f150: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
f160: 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db "
f170: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
f180: 65 79 73 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20  eys;"]....  set 
f190: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
f1a0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
f1b0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
f1c0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
f1d0: 69 6e 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c  in result db fil
f1e0: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
f1f0: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
f200: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
f210: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
f220: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
f230: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
f240: 65 73 75 6c 74 20 5c 0d 0a 5b 6c 69 73 74 20 5b  esult \..[list [
f250: 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 67 65  getDbDefaultPage
f260: 53 69 7a 65 5d 20 31 30 37 33 37 34 31 38 32 33  Size] 1073741823
f270: 20 30 20 32 20 5b 67 65 74 44 62 44 65 66 61 75   0 2 [getDbDefau
f280: 6c 74 43 61 63 68 65 53 69 7a 65 5d 20 64 65 6c  ltCacheSize] del
f290: 65 74 65 20 30 5d 7d 0d 0a 0d 0a 23 23 23 23 23  ete 0]}....#####
f2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f2e0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
f2f0: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
f300: 2d 31 2e 33 34 20 7b 53 51 4c 69 74 65 43 6f 6e  -1.34 {SQLiteCon
f310: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 20 77 69 74  nection.Open wit
f320: 68 20 53 65 74 44 65 66 61 75 6c 74 73 3d 54 72  h SetDefaults=Tr
f330: 75 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ue} -setup {..  
f340: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
f350: 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 33 34 2e  eName data-1.34.
f360: 64 62 5d 20 22 22 20 22 22 20 22 22 20 22 22 20  db] "" "" "" "" 
f370: 53 65 74 44 65 66 61 75 6c 74 73 3d 54 72 75 65  SetDefaults=True
f380: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
f390: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
f3a0: 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
f3b0: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
f3c0: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
f3d0: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61  r $db "PRAGMA pa
f3e0: 67 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61  ge_size;"]..  la
f3f0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
f400: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
f410: 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50  te scalar $db "P
f420: 52 41 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63  RAGMA max_page_c
f430: 6f 75 6e 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  ount;"]..  lappe
f440: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f450: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f460: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f470: 4d 41 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  MA legacy_file_f
f480: 6f 72 6d 61 74 3b 22 5d 0d 0a 20 20 6c 61 70 70  ormat;"]..  lapp
f490: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
f4a0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
f4b0: 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41   scalar $db "PRA
f4c0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
f4d0: 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
f4e0: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
f4f0: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
f500: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 61  r $db "PRAGMA ca
f510: 63 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c  che_size;"]..  l
f520: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
f530: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
f540: 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db "
f550: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
f560: 6f 64 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  ode;"]..  lappen
f570: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
f580: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
f590: 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM
f5a0: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3b 22  A foreign_keys;"
f5b0: 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
f5c0: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
f5d0: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
f5e0: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
f5f0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
f600: 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
f610: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
f620: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
f630: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
f640: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
f650: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
f660: 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
f670: 20 5c 0d 0a 5b 6c 69 73 74 20 5b 67 65 74 44 62   \..[list [getDb
f680: 44 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 5d  DefaultPageSize]
f690: 20 31 30 37 33 37 34 31 38 32 33 20 30 20 32 20   1073741823 0 2 
f6a0: 5b 67 65 74 44 62 44 65 66 61 75 6c 74 43 61 63  [getDbDefaultCac
f6b0: 68 65 53 69 7a 65 5d 20 64 65 6c 65 74 65 20 30  heSize] delete 0
f6c0: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
f6d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f6e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f710: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
f720: 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 33 35   {test data-1.35
f730: 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   {SQLiteConnecti
f740: 6f 6e 2e 4f 70 65 6e 20 77 69 74 68 6f 75 74 20  on.Open without 
f750: 53 65 74 44 65 66 61 75 6c 74 73 7d 20 2d 73 65  SetDefaults} -se
f760: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
f770: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
f780: 61 74 61 2d 31 2e 33 35 2e 64 62 5d 0d 0a 7d 20  ata-1.35.db]..} 
f790: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72  -body {..  set r
f7a0: 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
f7b0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
f7c0: 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
f7d0: 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
f7e0: 62 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73  b "PRAGMA page_s
f7f0: 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  ize;"]..  lappen
f800: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
f810: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
f820: 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM
f830: 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  A max_page_count
f840: 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ;"]..  lappend r
f850: 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
f860: 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
f870: 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 6c  ar $db "PRAGMA l
f880: 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61  egacy_file_forma
f890: 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t;"]..  lappend 
f8a0: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
f8b0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
f8c0: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
f8d0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 22 5d 0d 0a  synchronous;"]..
f8e0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
f8f0: 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
f900: 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
f910: 62 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f  b "PRAGMA cache_
f920: 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  size;"]..  lappe
f930: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f940: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f950: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f960: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b  MA journal_mode;
f970: 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
f980: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
f990: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
f9a0: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 66 6f  r $db "PRAGMA fo
f9b0: 72 65 69 67 6e 5f 6b 65 79 73 3b 22 5d 0d 0a 0d  reign_keys;"]...
f9c0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
f9d0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
f9e0: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
f9f0: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
fa00: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
fa10: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
fa20: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
fa30: 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
fa40: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
fa50: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
fa60: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
fa70: 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  ite} -result \..
fa80: 5b 6c 69 73 74 20 5b 67 65 74 44 62 44 65 66 61  [list [getDbDefa
fa90: 75 6c 74 50 61 67 65 53 69 7a 65 5d 20 31 30 37  ultPageSize] 107
faa0: 33 37 34 31 38 32 33 20 30 20 32 20 5b 67 65 74  3741823 0 2 [get
fab0: 44 62 44 65 66 61 75 6c 74 43 61 63 68 65 53 69  DbDefaultCacheSi
fac0: 7a 65 5d 20 64 65 6c 65 74 65 20 30 5d 7d 0d 0a  ze] delete 0]}..
fad0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
fae0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
faf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fb20: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
fb30: 73 74 20 64 61 74 61 2d 31 2e 33 36 20 7b 53 51  st data-1.36 {SQ
fb40: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f  LiteConnection.O
fb50: 70 65 6e 20 77 69 74 68 20 50 52 41 47 4d 41 20  pen with PRAGMA 
fb60: 6f 76 65 72 72 69 64 65 73 7d 20 2d 73 65 74 75  overrides} -setu
fb70: 70 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  p {..  #..  # NO
fb80: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  TE: Attempt to o
fb90: 70 65 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e  pen a connection
fba0: 20 77 69 74 68 20 61 6c 6c 20 61 76 61 69 6c 61   with all availa
fbb0: 62 6c 65 20 50 52 41 47 4d 41 20 73 65 74 74 69  ble PRAGMA setti
fbc0: 6e 67 73 0d 0a 20 20 23 20 20 20 20 20 20 20 73  ngs..  #       s
fbd0: 65 74 20 74 6f 20 6e 6f 6e 2d 64 65 66 61 75 6c  et to non-defaul
fbe0: 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  t values in the 
fbf0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
fc00: 67 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74 75 70  g...  #..  setup
fc10: 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
fc20: 20 64 61 74 61 2d 31 2e 33 36 2e 64 62 5d 20 22   data-1.36.db] "
fc30: 22 20 22 22 20 22 22 20 22 22 20 5b 6a 6f 69 6e  " "" "" "" [join
fc40: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..      
fc50: 22 50 61 67 65 20 53 69 7a 65 3d 34 30 39 36 22  "Page Size=4096"
fc60: 20 22 4d 61 78 20 50 61 67 65 20 43 6f 75 6e 74   "Max Page Count
fc70: 3d 32 30 34 38 22 20 22 4c 65 67 61 63 79 20 46  =2048" "Legacy F
fc80: 6f 72 6d 61 74 3d 54 72 75 65 22 20 5c 0d 0a 20  ormat=True" \.. 
fc90: 20 20 20 20 20 53 79 6e 63 68 72 6f 6e 6f 75 73       Synchronous
fca0: 3d 4e 6f 72 6d 61 6c 20 22 43 61 63 68 65 20 53  =Normal "Cache S
fcb0: 69 7a 65 3d 34 30 39 36 22 20 22 4a 6f 75 72 6e  ize=4096" "Journ
fcc0: 61 6c 20 4d 6f 64 65 3d 57 61 6c 22 20 5c 0d 0a  al Mode=Wal" \..
fcd0: 20 20 20 20 20 20 22 46 6f 72 65 69 67 6e 20 4b        "Foreign K
fce0: 65 79 73 3d 54 72 75 65 22 5d 20 5c 3b 5d 0d 0a  eys=True"] \;]..
fcf0: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
fd00: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
fd10: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
fd20: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
fd30: 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
fd40: 24 64 62 20 22 50 52 41 47 4d 41 20 70 61 67 65  $db "PRAGMA page
fd50: 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70  _size;"]..  lapp
fd60: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
fd70: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
fd80: 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41   scalar $db "PRA
fd90: 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75  GMA max_page_cou
fda0: 6e 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  nt;"]..  lappend
fdb0: 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
fdc0: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
fdd0: 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA
fde0: 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72   legacy_file_for
fdf0: 6d 61 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  mat;"]..  lappen
fe00: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
fe10: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
fe20: 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM
fe30: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 22 5d  A synchronous;"]
fe40: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
fe50: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
fe60: 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
fe70: 24 64 62 20 22 50 52 41 47 4d 41 20 63 61 63 68  $db "PRAGMA cach
fe80: 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70  e_size;"]..  lap
fe90: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
fea0: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
feb0: 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52  e scalar $db "PR
fec0: 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
fed0: 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  e;"]..  lappend 
fee0: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
fef0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
ff00: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
ff10: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3b 22 5d 0d  foreign_keys;"].
ff20: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d  ...  set result.
ff30: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
ff40: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
ff50: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
ff60: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
ff70: 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  lt db fileName..
ff80: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
ff90: 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  ..{eagle monoBug
ffa0: 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
ffb0: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
ffc0: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
ffd0: 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c  QLite} -result \
ffe0: 0d 0a 7b 34 30 39 36 20 32 30 34 38 20 31 20 31  ..{4096 2048 1 1
fff0: 20 34 30 39 36 20 77 61 6c 20 31 7d 7d 0d 0a 0d   4096 wal 1}}...
10000 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
10010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10050 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
10060 74 20 64 61 74 61 2d 31 2e 33 37 20 7b 73 71 6c  t data-1.37 {sql
10070 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
10080 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
10090 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  n} -setup {..  s
100a0 65 74 20 64 69 72 65 63 74 6f 72 79 28 62 61 73  et directory(bas
100b0 65 29 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  e) [getDatabaseD
100c0 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 69  irectory]....  i
100d0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
100e0 68 20 24 64 69 72 65 63 74 6f 72 79 28 62 61 73  h $directory(bas
100f0 65 29 5d 20 3d 3d 20 30 20 7c 7c 20 5c 0d 0a 20  e)] == 0 || \.. 
10100 20 20 20 20 20 21 5b 66 69 6c 65 20 65 78 69 73       ![file exis
10110 74 73 20 24 64 69 72 65 63 74 6f 72 79 28 62 61  ts $directory(ba
10120 73 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20  se)] || \..     
10130 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74   ![file isdirect
10140 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 28 62  ory $directory(b
10150 61 73 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ase)]} then {.. 
10160 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
10170 41 72 67 73 20 22 62 61 73 65 20 64 69 72 65 63  Args "base direc
10180 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74  tory \"" $direct
10190 6f 72 79 28 62 61 73 65 29 20 22 5c 22 20 69 73  ory(base) "\" is
101a0 20 69 6e 76 61 6c 69 64 22 5d 0d 0a 20 20 7d 0d   invalid"]..  }.
101b0 0a 0d 0a 20 20 73 65 74 20 64 69 72 65 63 74 6f  ...  set directo
101c0 72 79 28 64 61 74 61 29 20 5b 66 69 6c 65 20 6a  ry(data) [file j
101d0 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 28 62  oin $directory(b
101e0 61 73 65 29 20 5c 0d 0a 20 20 20 20 20 20 5b 61  ase) \..      [a
101f0 70 70 65 6e 64 41 72 67 73 20 73 71 6c 69 74 65  ppendArgs sqlite
10200 20 2e 64 61 74 61 2e 20 5b 70 69 64 5d 5d 5d 0d   .data. [pid]]].
10210 0a 0d 0a 20 20 66 69 6c 65 20 6d 6b 64 69 72 20  ...  file mkdir 
10220 24 64 69 72 65 63 74 6f 72 79 28 64 61 74 61 29  $directory(data)
10230 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73  ....  tputs $tes
10240 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
10250 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 72 65 61  dArgs "---- crea
10260 74 65 64 20 64 61 74 61 20 64 69 72 65 63 74 6f  ted data directo
10270 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  ry \"" \..      
10280 24 64 69 72 65 63 74 6f 72 79 28 64 61 74 61 29  $directory(data)
10290 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20   \"\n]....  set 
102a0 64 69 72 65 63 74 6f 72 79 28 74 65 6d 70 29 20  directory(temp) 
102b0 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire
102c0 63 74 6f 72 79 28 62 61 73 65 29 20 5c 0d 0a 20  ctory(base) \.. 
102d0 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
102e0 20 73 71 6c 69 74 65 20 2e 74 65 6d 70 2e 20 5b   sqlite .temp. [
102f0 70 69 64 5d 5d 5d 0d 0a 0d 0a 20 20 66 69 6c 65  pid]]]....  file
10300 20 6d 6b 64 69 72 20 24 64 69 72 65 63 74 6f 72   mkdir $director
10310 79 28 74 65 6d 70 29 0d 0a 0d 0a 20 20 74 70 75  y(temp)....  tpu
10320 74 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  ts $test_channel
10330 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d   [appendArgs "--
10340 2d 2d 20 63 72 65 61 74 65 64 20 74 65 6d 70 6f  -- created tempo
10350 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 5c  rary directory \
10360 22 22 20 5c 0d 0a 20 20 20 20 20 20 24 64 69 72  "" \..      $dir
10370 65 63 74 6f 72 79 28 74 65 6d 70 29 20 5c 22 5c  ectory(temp) \"\
10380 6e 5d 0d 0a 0d 0a 20 20 70 72 6f 63 20 74 68 72  n]....  proc thr
10390 65 61 64 53 74 61 72 74 20 7b 7d 20 7b 0d 0a 20  eadStart {} {.. 
103a0 20 20 20 77 68 69 6c 65 20 7b 24 3a 3a 69 20 3c     while {$::i <
103b0 20 31 30 30 30 7d 20 7b 0d 0a 20 20 20 20 20 20   1000} {..      
103c0 73 65 74 20 3a 3a 66 6f 75 6e 64 28 74 65 6d 70  set ::found(temp
103d0 29 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20  ) [expr \..     
103e0 20 20 20 20 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b       {[llength [
103f0 66 69 6c 65 20 6c 69 73 74 20 24 3a 3a 64 69 72  file list $::dir
10400 65 63 74 6f 72 79 28 74 65 6d 70 29 20 65 74 69  ectory(temp) eti
10410 6c 71 73 5f 2a 5d 5d 20 3e 20 30 7d 5d 0d 0a 0d  lqs_*]] > 0}]...
10420 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 66 6f  .      if {$::fo
10430 75 6e 64 28 74 65 6d 70 29 7d 20 74 68 65 6e 20  und(temp)} then 
10440 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
10450 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..    
10460 7d 0d 0a 20 20 7d 0d 0a 7d 20 2d 62 6f 64 79 20  }..  }..} -body 
10470 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  {..  set result 
10480 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 23 0d 0a 20  [list]....  #.. 
10490 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
104a0 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 70   to modify the p
104b0 72 6f 63 65 73 73 2d 77 69 64 65 20 64 61 74 61  rocess-wide data
104c0 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64   and temporary d
104d0 69 72 65 63 74 6f 72 79 0d 0a 20 20 23 20 20 20  irectory..  #   
104e0 20 20 20 20 73 65 74 74 69 6e 67 73 20 66 6f 72      settings for
104f0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
10500 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 23 0d 0a   library...  #..
10510 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
10520 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
10530 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
10540 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  c \..      Syste
10550 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
10560 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10570 73 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s sqlite3_win32_
10580 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 31 20  set_directory 1 
10590 5c 0d 0a 20 20 20 20 20 20 24 64 69 72 65 63 74  \..      $direct
105a0 6f 72 79 28 64 61 74 61 29 5d 0d 0a 0d 0a 20 20  ory(data)]....  
105b0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
105c0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
105d0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
105e0 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  \..      System.
105f0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
10600 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods 
10610 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
10620 74 5f 64 69 72 65 63 74 6f 72 79 20 32 20 5c 0d  t_directory 2 \.
10630 0a 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72  .      $director
10640 79 28 74 65 6d 70 29 5d 0d 0a 0d 0a 20 20 73 65  y(temp)]....  se
10650 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
10660 61 6d 65 20 64 61 74 61 2d 31 2e 33 37 2e 64 62  ame data-1.37.db
10670 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22  ] "" "" "" "" ""
10680 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c   false false fal
10690 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 71  se false....  sq
106a0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
106b0 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
106c0 20 4e 4f 54 20 4e 55 4c 4c 29 3b 22 0d 0a 0d 0a   NOT NULL);"....
106d0 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20    for {set i 1} 
106e0 7b 24 69 20 3c 20 31 30 30 7d 20 7b 69 6e 63 72  {$i < 100} {incr
106f0 20 69 7d 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65   i} {..    sql e
10700 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
10710 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
10720 41 4c 55 45 53 28 3f 29 3b 22 20 5c 0d 0a 20 20  ALUES(?);" \..  
10730 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61        [list para
10740 6d 31 20 53 74 72 69 6e 67 20 5b 65 78 70 72 20  m1 String [expr 
10750 7b 72 61 6e 64 73 74 72 28 31 30 32 34 29 7d 5d  {randstr(1024)}]
10760 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ]..  }....  set 
10770 66 6f 75 6e 64 28 64 61 74 61 29 20 5b 65 78 70  found(data) [exp
10780 72 20 5c 0d 0a 20 20 20 20 20 20 7b 5b 6c 6c 65  r \..      {[lle
10790 6e 67 74 68 20 5b 66 69 6c 65 20 6c 69 73 74 20  ngth [file list 
107a0 24 64 69 72 65 63 74 6f 72 79 28 64 61 74 61 29  $directory(data)
107b0 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 20 3d 3d 20   $fileName]] == 
107c0 31 7d 5d 0d 0a 0d 0a 20 20 73 65 74 20 74 20 5b  1}]....  set t [
107d0 63 72 65 61 74 65 54 68 72 65 61 64 20 74 68 72  createThread thr
107e0 65 61 64 53 74 61 72 74 5d 0d 0a 20 20 73 71 6c  eadStart]..  sql
107f0 20 65 78 65 63 75 74 65 20 24 64 62 20 22 42 45   execute $db "BE
10800 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  GIN TRANSACTION;
10810 22 3b 20 73 74 61 72 74 54 68 72 65 61 64 20 24  "; startThread $
10820 74 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20  t....  for {set 
10830 69 20 31 7d 20 7b 24 69 20 3c 20 31 30 30 30 7d  i 1} {$i < 1000}
10840 20 7b 69 6e 63 72 20 69 7d 20 7b 0d 0a 20 20 20   {incr i} {..   
10850 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
10860 45 78 65 63 75 74 65 20 61 20 71 75 65 72 79 20  Execute a query 
10870 74 68 61 74 20 73 68 6f 75 6c 64 20 66 6f 72 63  that should forc
10880 65 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20 6f  e the creation o
10890 66 20 61 20 74 65 6d 70 6f 72 61 72 79 20 66 69  f a temporary fi
108a0 6c 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  le..    #       
108b0 66 6f 72 20 69 74 73 20 73 74 61 74 65 6d 65 6e  for its statemen
108c0 74 20 6a 6f 75 72 6e 61 6c 2e 0d 0a 20 20 20 20  t journal...    
108d0 23 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75  #..    sql execu
108e0 74 65 20 24 64 62 20 22 55 50 44 41 54 45 20 74  te $db "UPDATE t
108f0 31 20 53 45 54 20 78 20 3d 20 3f 3b 22 20 5c 0d  1 SET x = ?;" \.
10900 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 70  .        [list p
10910 61 72 61 6d 31 20 53 74 72 69 6e 67 20 5b 65 78  aram1 String [ex
10920 70 72 20 7b 72 61 6e 64 73 74 72 28 31 30 32 34  pr {randstr(1024
10930 29 7d 5d 5d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20  )}]]....    #.. 
10940 20 20 20 23 20 4e 4f 54 45 3a 20 47 69 76 65 20     # NOTE: Give 
10950 74 68 65 20 6f 74 68 65 72 20 74 68 72 65 61 64  the other thread
10960 20 73 6f 6d 65 20 74 69 6d 65 20 74 6f 20 6e 6f   some time to no
10970 74 69 63 65 20 74 68 65 20 74 65 6d 70 6f 72 61  tice the tempora
10980 72 79 20 66 69 6c 65 2e 0d 0a 20 20 20 20 23 0d  ry file...    #.
10990 0a 20 20 20 20 61 66 74 65 72 20 5b 65 78 70 72  .    after [expr
109a0 20 7b 69 6e 74 28 72 61 6e 64 28 29 20 2a 20 31   {int(rand() * 1
109b0 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 23 0d  000)}]....    #.
109c0 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f  .    # NOTE: Sto
109d0 70 20 77 68 65 6e 20 74 68 65 20 6f 74 68 65 72  p when the other
109e0 20 74 68 72 65 61 64 20 63 6f 6e 66 69 72 6d 73   thread confirms
109f0 20 74 68 61 74 20 74 68 65 20 74 65 6d 70 6f 72   that the tempor
10a00 61 72 79 20 66 69 6c 65 20 77 61 73 0d 0a 20 20  ary file was..  
10a10 20 20 23 20 20 20 20 20 20 20 63 72 65 61 74 65    #       create
10a20 64 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63 74  d in the correct
10a30 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...   
10a40 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66   #..    if {[inf
10a50 6f 20 65 78 69 73 74 73 20 66 6f 75 6e 64 28 74  o exists found(t
10a60 65 6d 70 29 5d 20 26 26 20 24 66 6f 75 6e 64 28  emp)] && $found(
10a70 74 65 6d 70 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  temp)} then {.. 
10a80 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20       break..    
10a90 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 24 74 20 4a  }..  }....  $t J
10aa0 6f 69 6e 3b 20 73 71 6c 20 65 78 65 63 75 74 65  oin; sql execute
10ab0 20 24 64 62 20 22 43 4f 4d 4d 49 54 20 54 52 41   $db "COMMIT TRA
10ac0 4e 53 41 43 54 49 4f 4e 3b 22 0d 0a 0d 0a 20 20  NSACTION;"....  
10ad0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $
10ae0 66 6f 75 6e 64 28 64 61 74 61 29 20 5b 65 78 70  found(data) [exp
10af0 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
10b00 66 6f 75 6e 64 28 74 65 6d 70 29 5d 20 3f 20 5c  found(temp)] ? \
10b10 0d 0a 20 20 20 20 20 20 24 66 6f 75 6e 64 28 74  ..      $found(t
10b20 65 6d 70 29 20 3a 20 46 61 6c 73 65 7d 5d 3b 20  emp) : False}]; 
10b30 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  set result..} -c
10b40 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 23 0d 0a 20  leanup {..  #.. 
10b50 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74   # NOTE: Close t
10b60 68 65 20 64 61 74 61 62 61 73 65 3b 20 68 6f 77  he database; how
10b70 65 76 65 72 2c 20 64 6f 20 6e 6f 74 20 61 74 74  ever, do not att
10b80 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74  empt to delete t
10b90 68 65 20 66 69 6c 65 20 61 73 0d 0a 20 20 23 20  he file as..  # 
10ba0 20 20 20 20 20 20 69 74 20 69 73 20 6e 6f 74 20        it is not 
10bb0 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 64  located in the d
10bc0 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
10bd0 79 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 63  y known to the c
10be0 6c 65 61 6e 75 70 44 62 0d 0a 20 20 23 20 20 20  leanupDb..  #   
10bf0 20 20 20 20 70 72 6f 63 65 64 75 72 65 20 28 69      procedure (i
10c00 2e 65 2e 20 74 68 65 20 6f 6e 65 20 72 65 74 75  .e. the one retu
10c10 72 6e 65 64 20 62 79 20 67 65 74 44 61 74 61 62  rned by getDatab
10c20 61 73 65 44 69 72 65 63 74 6f 72 79 29 2e 0d 0a  aseDirectory)...
10c30 20 20 23 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62    #..  cleanupDb
10c40 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72   $fileName db tr
10c50 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  ue false false..
10c60 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
10c70 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 73 74   Attempt to rest
10c80 6f 72 65 20 74 68 65 20 70 72 6f 63 65 73 73 2d  ore the process-
10c90 77 69 64 65 20 64 61 74 61 20 61 6e 64 20 74 65  wide data and te
10ca0 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
10cb0 79 0d 0a 20 20 23 20 20 20 20 20 20 20 73 65 74  y..  #       set
10cc0 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20 53 51  tings for the SQ
10cd0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
10ce0 79 2e 0d 0a 20 20 23 0d 0a 20 20 63 61 74 63 68  y...  #..  catch
10cf0 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 69   {..    object i
10d00 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
10d10 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44  nPublic System.D
10d20 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
10d30 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
10d40 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ..        sqlite
10d50 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
10d60 63 74 6f 72 79 20 31 20 6e 75 6c 6c 0d 0a 20 20  ctory 1 null..  
10d70 7d 0d 0a 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a  }....  catch {..
10d80 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
10d90 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
10da0 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  lic System.Data.
10db0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
10dc0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20  iveMethods \..  
10dd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69        sqlite3_wi
10de0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
10df0 79 20 32 20 6e 75 6c 6c 0d 0a 20 20 7d 0d 0a 0d  y 2 null..  }...
10e00 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  .  if {[info exi
10e10 73 74 73 20 64 69 72 65 63 74 6f 72 79 28 64 61  sts directory(da
10e20 74 61 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ta)] && \..     
10e30 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 64   [file exists $d
10e40 69 72 65 63 74 6f 72 79 28 64 61 74 61 29 5d 20  irectory(data)] 
10e50 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69 6c  && \..      [fil
10e60 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 64  e isdirectory $d
10e70 69 72 65 63 74 6f 72 79 28 64 61 74 61 29 5d 7d  irectory(data)]}
10e80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 66 69 6c   then {..    fil
10e90 65 20 64 65 6c 65 74 65 20 2d 72 65 63 75 72 73  e delete -recurs
10ea0 69 76 65 20 2d 66 6f 72 63 65 20 24 64 69 72 65  ive -force $dire
10eb0 63 74 6f 72 79 28 64 61 74 61 29 0d 0a 20 20 7d  ctory(data)..  }
10ec0 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20  ....  if {[info 
10ed0 65 78 69 73 74 73 20 64 69 72 65 63 74 6f 72 79  exists directory
10ee0 28 74 65 6d 70 29 5d 20 26 26 20 5c 0d 0a 20 20  (temp)] && \..  
10ef0 20 20 20 20 5b 66 69 6c 65 20 65 78 69 73 74 73      [file exists
10f00 20 24 64 69 72 65 63 74 6f 72 79 28 74 65 6d 70   $directory(temp
10f10 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b  )] && \..      [
10f20 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79  file isdirectory
10f30 20 24 64 69 72 65 63 74 6f 72 79 28 74 65 6d 70   $directory(temp
10f40 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..    
10f50 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 72 65 63  file delete -rec
10f60 75 72 73 69 76 65 20 2d 66 6f 72 63 65 20 24 64  ursive -force $d
10f70 69 72 65 63 74 6f 72 79 28 74 65 6d 70 29 0d 0a  irectory(temp)..
10f80 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69 6e    }....  if {[in
10f90 66 6f 20 65 78 69 73 74 73 20 74 5d 20 26 26 20  fo exists t] && 
10fa0 5b 63 6c 65 61 6e 75 70 54 68 72 65 61 64 20 24  [cleanupThread $
10fb0 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  t]} then {..    
10fc0 75 6e 73 65 74 20 74 0d 0a 20 20 7d 0d 0a 0d 0a  unset t..  }....
10fd0 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20    catch {object 
10fe0 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 74  removecallback t
10ff0 68 72 65 61 64 53 74 61 72 74 7d 0d 0a 0d 0a 20  hreadStart}.... 
11000 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
11010 69 6e 20 74 20 66 6f 75 6e 64 20 69 20 64 62 20  in t found i db 
11020 66 69 6c 65 4e 61 6d 65 20 72 65 73 75 6c 74 20  fileName result 
11030 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 72  directory....  r
11040 65 6e 61 6d 65 20 74 68 72 65 61 64 53 74 61 72  ename threadStar
11050 74 20 22 22 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  t ""..} -constra
11060 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
11070 61 6e 64 2e 6f 62 6a 65 63 74 20 77 69 6e 64 6f  and.object windo
11080 77 73 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ws monoBug28 com
11090 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
110a0 2e 44 41 54 41 5c 0d 0a 53 51 4c 69 74 65 20 53  .DATA\..SQLite S
110b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
110c0 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
110d0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 7d 20 2d  set_directory} -
110e0 72 65 73 75 6c 74 20 5c 0d 0a 7b 4f 6b 20 4f 6b  result \..{Ok Ok
110f0 20 54 72 75 65 20 54 72 75 65 7d 7d 0d 0a 0d 0a   True True}}....
11100 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11110 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
11150 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
11160 20 64 61 74 61 2d 31 2e 33 38 20 7b 73 65 72 69   data-1.38 {seri
11170 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 53 51 4c  alization of SQL
11180 69 74 65 45 78 63 65 70 74 69 6f 6e 7d 20 2d 62  iteException} -b
11190 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 73 65 72  ody {..  set ser
111a0 69 61 6c 69 7a 65 72 20 5b 6f 62 6a 65 63 74 20  ializer [object 
111b0 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d  create -alias \.
111c0 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 52 75  .      System.Ru
111d0 6e 74 69 6d 65 2e 53 65 72 69 61 6c 69 7a 61 74  ntime.Serializat
111e0 69 6f 6e 2e 46 6f 72 6d 61 74 74 65 72 73 2e 42  ion.Formatters.B
111f0 69 6e 61 72 79 2e 42 69 6e 61 72 79 46 6f 72 6d  inary.BinaryForm
11200 61 74 74 65 72 5d 0d 0a 0d 0a 20 20 73 65 74 20  atter]....  set 
11210 73 74 72 65 61 6d 20 5b 6f 62 6a 65 63 74 20 63  stream [object c
11220 72 65 61 74 65 20 2d 61 6c 69 61 73 20 53 79 73  reate -alias Sys
11230 74 65 6d 2e 49 4f 2e 4d 65 6d 6f 72 79 53 74 72  tem.IO.MemoryStr
11240 65 61 6d 5d 0d 0a 0d 0a 20 20 73 65 74 20 65 78  eam]....  set ex
11250 63 65 70 74 69 6f 6e 28 31 29 20 5b 6f 62 6a 65  ception(1) [obje
11260 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
11270 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
11280 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
11290 69 74 65 45 78 63 65 70 74 69 6f 6e 20 31 34 20  iteException 14 
112a0 22 74 68 69 73 20 69 73 20 61 20 74 65 73 74 22  "this is a test"
112b0 5d 3b 20 23 20 43 61 6e 74 4f 70 65 6e 0d 0a 0d  ]; # CantOpen...
112c0 0a 20 20 24 73 65 72 69 61 6c 69 7a 65 72 20 53  .  $serializer S
112d0 65 72 69 61 6c 69 7a 65 20 24 73 74 72 65 61 6d  erialize $stream
112e0 20 24 65 78 63 65 70 74 69 6f 6e 28 31 29 0d 0a   $exception(1)..
112f0 0d 0a 20 20 24 73 74 72 65 61 6d 20 53 65 65 6b  ..  $stream Seek
11300 20 30 20 42 65 67 69 6e 0d 0a 0d 0a 20 20 73 65   0 Begin....  se
11310 74 20 65 78 63 65 70 74 69 6f 6e 28 32 29 20 5b  t exception(2) [
11320 24 73 65 72 69 61 6c 69 7a 65 72 20 2d 61 6c 69  $serializer -ali
11330 61 73 20 44 65 73 65 72 69 61 6c 69 7a 65 20 24  as Deserialize $
11340 73 74 72 65 61 6d 5d 0d 0a 0d 0a 20 20 6c 69 73  stream]....  lis
11350 74 20 5b 24 65 78 63 65 70 74 69 6f 6e 28 31 29  t [$exception(1)
11360 20 52 65 73 75 6c 74 43 6f 64 65 5d 20 5c 0d 0a   ResultCode] \..
11370 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6d 61        [string ma
11380 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e 5d  p [list \r\n \n]
11390 20 5b 24 65 78 63 65 70 74 69 6f 6e 28 31 29 20   [$exception(1) 
113a0 4d 65 73 73 61 67 65 5d 5d 20 5c 0d 0a 20 20 20  Message]] \..   
113b0 20 20 20 5b 24 65 78 63 65 70 74 69 6f 6e 28 32     [$exception(2
113c0 29 20 52 65 73 75 6c 74 43 6f 64 65 5d 20 5c 0d  ) ResultCode] \.
113d0 0a 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6d  .      [string m
113e0 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e  ap [list \r\n \n
113f0 5d 20 5b 24 65 78 63 65 70 74 69 6f 6e 28 32 29  ] [$exception(2)
11400 20 4d 65 73 73 61 67 65 5d 5d 20 5c 0d 0a 20 20   Message]] \..  
11410 20 20 20 20 5b 65 78 70 72 20 7b 5b 24 65 78 63      [expr {[$exc
11420 65 70 74 69 6f 6e 28 31 29 20 52 65 73 75 6c 74  eption(1) Result
11430 43 6f 64 65 5d 20 65 71 20 5b 24 65 78 63 65 70  Code] eq [$excep
11440 74 69 6f 6e 28 32 29 20 52 65 73 75 6c 74 43 6f  tion(2) ResultCo
11450 64 65 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  de]}] \..      [
11460 65 78 70 72 20 7b 5b 24 65 78 63 65 70 74 69 6f  expr {[$exceptio
11470 6e 28 31 29 20 4d 65 73 73 61 67 65 5d 20 65 71  n(1) Message] eq
11480 20 5b 24 65 78 63 65 70 74 69 6f 6e 28 32 29 20   [$exception(2) 
11490 4d 65 73 73 61 67 65 5d 7d 5d 0d 0a 7d 20 2d 63  Message]}]..} -c
114a0 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65  leanup {..  unse
114b0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 78  t -nocomplain ex
114c0 63 65 70 74 69 6f 6e 20 73 74 72 65 61 6d 20 73  ception stream s
114d0 65 72 69 61 6c 69 7a 65 72 0d 0a 7d 20 2d 63 6f  erializer..} -co
114e0 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
114f0 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
11500 6d 6f 6e 6f 42 75 67 35 38 20 53 51 4c 69 74 65  monoBug58 SQLite
11510 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
11520 69 74 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20  ite} \..-result 
11530 7b 43 61 6e 74 4f 70 65 6e 20 7b 75 6e 61 62 6c  {CantOpen {unabl
11540 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61  e to open databa
11550 73 65 20 66 69 6c 65 0d 0a 74 68 69 73 20 69 73  se file..this is
11560 20 61 20 74 65 73 74 7d 20 43 61 6e 74 4f 70 65   a test} CantOpe
11570 6e 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65  n {unable to ope
11580 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0d  n database file.
11590 0a 74 68 69 73 20 69 73 20 61 20 74 65 73 74 7d  .this is a test}
115a0 20 54 72 75 65 20 54 72 75 65 7d 7d 0d 0a 0d 0a   True True}}....
115b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
115c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
115d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
115e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
115f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
11600 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
11610 20 64 61 74 61 2d 31 2e 33 39 20 7b 75 6e 65 6e   data-1.39 {unen
11620 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
11630 2c 20 77 69 74 68 20 70 61 73 73 77 6f 72 64 7d  , with password}
11640 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
11650 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
11660 6d 65 20 64 61 74 61 2d 31 2e 33 39 2e 64 62 5d  me data-1.39.db]
11670 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
11680 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
11690 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
116a0 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63  x);"..  sql exec
116b0 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
116c0 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
116d0 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65  ES(1);"....  cle
116e0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
116f0 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66   db true false f
11700 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20  alse..  setupDb 
11710 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  $fileName "" "" 
11720 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d  "" "" "Password=
11730 31 32 33 34 35 3b 22 20 74 72 75 65 20 66 61 6c  12345;" true fal
11740 73 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  se....  set resu
11750 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c  lt [list]....  l
11760 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
11770 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74  atch {sql execut
11780 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
11790 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  r $db \..      "
117a0 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
117b0 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72  FROM t1;"} error
117c0 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72  ] \..      [extr
117d0 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
117e0 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
117f0 61 67 65 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20  age $error].... 
11800 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
11810 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
11820 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ute $db \..     
11830 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
11840 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
11850 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20  } error] \..    
11860 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d    [extractSystem
11870 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74  DataSQLiteExcept
11880 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f  ionMessage $erro
11890 72 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  r]....  cleanupD
118a0 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74  b $fileName db t
118b0 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d  rue false false.
118c0 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65  .  setupDb $file
118d0 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22  Name "" "" "" ""
118e0 20 22 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a   "" true false..
118f0 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
11900 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
11910 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20  xecute $db \..  
11920 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
11930 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
11940 29 3b 22 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20  );"} error] \.. 
11950 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73       [extractSys
11960 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
11970 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65  eptionMessage $e
11980 72 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  rror]....  lappe
11990 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
119a0 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   {sql execute -e
119b0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
119c0 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45  b \..      "SELE
119d0 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d  CT COUNT(*) FROM
119e0 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 5c 0d   t1;"} error] \.
119f0 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74 53  .      [extractS
11a00 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
11a10 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20  xceptionMessage 
11a20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 73 65 74  $error]....  set
11a30 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
11a40 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
11a50 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
11a60 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
11a70 61 69 6e 20 65 72 72 6f 72 20 72 65 73 75 6c 74  ain error result
11a80 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
11a90 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
11aa0 67 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  gle System.Data.
11ab0 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f  SQLite.Encryptio
11ac0 6e 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  n monoBug28 comm
11ad0 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c  and.sql\..compil
11ae0 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
11af0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
11b00 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 7b 66 69  } -result {1 {fi
11b10 6c 65 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61  le is not a data
11b20 62 61 73 65 7d 20 31 5c 0d 0a 7b 66 69 6c 65 20  base} 1\..{file 
11b30 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
11b40 65 7d 20 30 20 31 20 30 20 32 7d 7d 0d 0a 0d 0a  e} 0 1 0 2}}....
11b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
11ba0 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
11bb0 20 64 61 74 61 2d 31 2e 34 30 20 7b 65 6e 63 72   data-1.40 {encr
11bc0 79 70 74 65 64 20 64 61 74 61 62 61 73 65 2c 20  ypted database, 
11bd0 77 72 6f 6e 67 20 70 61 73 73 77 6f 72 64 7d 20  wrong password} 
11be0 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
11bf0 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
11c00 65 20 64 61 74 61 2d 31 2e 34 30 2e 64 62 5d 20  e data-1.40.db] 
11c10 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73  "" "" "" "" "Pas
11c20 73 77 6f 72 64 3d 31 32 33 34 35 3b 22 0d 0a 7d  sword=12345;"..}
11c30 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20   -body {..  sql 
11c40 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45  execute $db "CRE
11c50 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
11c60 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  "..  sql execute
11c70 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
11c80 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
11c90 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  1);"....  cleanu
11ca0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62  pDb $fileName db
11cb0 20 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73   true false fals
11cc0 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69  e..  setupDb $fi
11cd0 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20  leName "" "" "" 
11ce0 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31 32 33  "" "Password=123
11cf0 34 36 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d  46;" true false.
11d00 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  ...  set result 
11d10 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70  [list]....  lapp
11d20 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
11d30 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  h {sql execute -
11d40 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
11d50 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c  db \..      "SEL
11d60 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f  ECT COUNT(*) FRO
11d70 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 5c  M t1;"} error] \
11d80 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74  ..      [extract
11d90 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
11da0 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
11db0 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61   $error]....  la
11dc0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
11dd0 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65  tch {sql execute
11de0 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
11df0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
11e00 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65  ) VALUES(1);"} e
11e10 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  rror] \..      [
11e20 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74  extractSystemDat
11e30 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  aSQLiteException
11e40 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72 5d 0d  Message $error].
11e50 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
11e60 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65  fileName db true
11e70 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
11e80 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
11e90 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  e "" "" "" "" "P
11ea0 61 73 73 77 6f 72 64 3d 31 32 33 34 35 3b 22 20  assword=12345;" 
11eb0 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20  true false....  
11ec0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
11ed0 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
11ee0 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  te $db \..      
11ef0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
11f00 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d  (x) VALUES(1);"}
11f10 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20   error] \..     
11f20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
11f30 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
11f40 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72  onMessage $error
11f50 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
11f60 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
11f70 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
11f80 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \.
11f90 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43  .      "SELECT C
11fa0 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
11fb0 22 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20  "} error] \..   
11fc0 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65     [extractSyste
11fd0 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
11fe0 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72  tionMessage $err
11ff0 6f 72 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  or]....  set res
12000 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
12010 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
12020 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
12030 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
12040 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20  error result db 
12050 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
12060 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
12070 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12080 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20 6d 6f  te.Encryption mo
12090 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
120a0 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
120b0 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
120c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
120d0 65 73 75 6c 74 20 7b 31 20 7b 66 69 6c 65 20 69  esult {1 {file i
120e0 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  s not a database
120f0 7d 20 31 5c 0d 0a 7b 66 69 6c 65 20 69 73 20 6e  } 1\..{file is n
12100 6f 74 20 61 20 64 61 74 61 62 61 73 65 7d 20 30  ot a database} 0
12110 20 31 20 30 20 32 7d 7d 0d 0a 0d 0a 23 23 23 23   1 0 2}}....####
12120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12160 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
12170 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
12180 61 2d 31 2e 34 31 20 7b 65 6e 63 72 79 70 74 65  a-1.41 {encrypte
12190 64 20 64 61 74 61 62 61 73 65 2c 20 70 61 73 73  d database, pass
121a0 77 6f 72 64 20 77 2f 73 74 61 72 74 2d 73 70 61  word w/start-spa
121b0 63 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ce} -setup {..  
121c0 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
121d0 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 34 31 2e  eName data-1.41.
121e0 64 62 5d 20 22 22 20 22 22 20 22 22 20 22 22 20  db] "" "" "" "" 
121f0 22 50 61 73 73 77 6f 72 64 3d 20 31 32 33 34 3b  "Password= 1234;
12200 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  "..} -body {..  
12210 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
12220 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
12230 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65  (x);"..  sql exe
12240 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
12250 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c   INTO t1 (x) VAL
12260 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c  UES(1);"....  cl
12270 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
12280 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20  e db true false 
12290 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62  false..  setupDb
122a0 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" ""
122b0 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64   "" "" "Password
122c0 3d 31 32 33 34 3b 22 20 74 72 75 65 20 66 61 6c  =1234;" true fal
122d0 73 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  se....  set resu
122e0 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c  lt [list]....  l
122f0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
12300 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74  atch {sql execut
12310 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
12320 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  r $db \..      "
12330 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
12340 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72  FROM t1;"} error
12350 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61  ] $error....  la
12360 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
12370 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65  tch {sql execute
12380 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
12390 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
123a0 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65  ) VALUES(1);"} e
123b0 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a  rror] $error....
123c0 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
123d0 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61  eName db true fa
123e0 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74  lse false..  set
123f0 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
12400 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73  " "" "" "" "Pass
12410 77 6f 72 64 3d 20 31 32 33 34 3b 22 20 74 72 75  word= 1234;" tru
12420 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 6c 61 70  e false....  lap
12430 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
12440 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
12450 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e  $db \..      "IN
12460 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29  SERT INTO t1 (x)
12470 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72   VALUES(1);"} er
12480 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20  ror] $error.... 
12490 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
124a0 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
124b0 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
124c0 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
124d0 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a   "SELECT COUNT(*
124e0 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72  ) FROM t1;"} err
124f0 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20  or] $error....  
12500 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  set result..} -c
12510 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
12520 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
12530 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
12540 6d 70 6c 61 69 6e 20 65 72 72 6f 72 20 72 65 73  mplain error res
12550 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ult db fileName.
12560 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
12570 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61  {eagle System.Da
12580 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70  ta.SQLite.Encryp
12590 74 69 6f 6e 20 6d 6f 6e 6f 42 75 67 32 38 20 63  tion monoBug28 c
125a0 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d  ommand.sql\..com
125b0 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
125c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
125d0 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20  ite} -result {0 
125e0 31 20 30 20 31 20 30 20 31 20 30 20 33 7d 7d 0d  1 0 1 0 1 0 3}}.
125f0 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
12600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12640 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
12650 65 73 74 20 64 61 74 61 2d 31 2e 34 32 20 7b 65  est data-1.42 {e
12660 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73  ncrypted databas
12670 65 2c 20 77 2f 71 75 6f 74 65 64 2d 73 74 61 72  e, w/quoted-star
12680 74 2d 73 70 61 63 65 7d 20 2d 73 65 74 75 70 20  t-space} -setup 
12690 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
126a0 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
126b0 31 2e 34 32 2e 64 62 5d 20 22 22 20 22 22 20 22  1.42.db] "" "" "
126c0 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d 5c  " "" "Password=\
126d0 22 20 31 32 33 34 5c 22 3b 22 0d 0a 7d 20 2d 62  " 1234\";"..} -b
126e0 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65  ody {..  sql exe
126f0 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45  cute $db "CREATE
12700 20 54 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a   TABLE t1(x);"..
12710 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
12720 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
12730 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
12740 22 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  "....  cleanupDb
12750 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72   $fileName db tr
12760 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  ue false false..
12770 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e    setupDb $fileN
12780 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20  ame "" "" "" "" 
12790 22 50 61 73 73 77 6f 72 64 3d 31 32 33 34 3b 22  "Password=1234;"
127a0 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20   true false.... 
127b0 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
127c0 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t]....  lappend 
127d0 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
127e0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
127f0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
12800 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
12810 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
12820 3b 22 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ;"} error] \..  
12830 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
12840 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
12850 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72  ptionMessage $er
12860 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  ror]....  lappen
12870 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
12880 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62  {sql execute $db
12890 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52   \..      "INSER
128a0 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
128b0 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72 6f 72  LUES(1);"} error
128c0 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72  ] \..      [extr
128d0 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
128e0 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
128f0 61 67 65 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20  age $error].... 
12900 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
12910 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c  Name db true fal
12920 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75  se false..  setu
12930 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22  pDb $fileName ""
12940 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77   "" "" "" "Passw
12950 6f 72 64 3d 5c 22 20 31 32 33 34 5c 22 3b 22 20  ord=\" 1234\";" 
12960 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20  true false....  
12970 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
12980 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
12990 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  te $db \..      
129a0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
129b0 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d  (x) VALUES(1);"}
129c0 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20   error] \..     
129d0 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
129e0 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
129f0 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72  onMessage $error
12a00 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
12a10 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
12a20 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
12a30 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \.
12a40 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43  .      "SELECT C
12a50 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
12a60 22 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20  "} error] \..   
12a70 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65     [extractSyste
12a80 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
12a90 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72  tionMessage $err
12aa0 6f 72 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  or]....  set res
12ab0 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
12ac0 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
12ad0 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
12ae0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
12af0 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20  error result db 
12b00 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
12b10 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
12b20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12b30 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20 6d 6f  te.Encryption mo
12b40 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
12b50 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
12b60 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
12b70 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
12b80 65 73 75 6c 74 20 7b 31 20 7b 66 69 6c 65 20 69  esult {1 {file i
12b90 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  s not a database
12ba0 7d 20 31 5c 0d 0a 7b 66 69 6c 65 20 69 73 20 6e  } 1\..{file is n
12bb0 6f 74 20 61 20 64 61 74 61 62 61 73 65 7d 20 30  ot a database} 0
12bc0 20 31 20 30 20 32 7d 7d 0d 0a 0d 0a 23 23 23 23   1 0 2}}....####
12bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12c10 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
12c20 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
12c30 61 2d 31 2e 34 33 20 7b 65 6e 63 72 79 70 74 65  a-1.43 {encrypte
12c40 64 20 64 61 74 61 62 61 73 65 2c 20 70 61 73 73  d database, pass
12c50 77 6f 72 64 20 77 2f 6d 69 64 2d 73 70 61 63 65  word w/mid-space
12c60 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
12c70 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
12c80 61 6d 65 20 64 61 74 61 2d 31 2e 34 33 2e 64 62  ame data-1.43.db
12c90 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  ] "" "" "" "" "P
12ca0 61 73 73 77 6f 72 64 3d 31 32 20 34 35 3b 22 0d  assword=12 45;".
12cb0 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
12cc0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
12cd0 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
12ce0 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  );"..  sql execu
12cf0 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
12d00 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
12d10 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61  S(1);"....  clea
12d20 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
12d30 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61  db true false fa
12d40 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24  lse..  setupDb $
12d50 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
12d60 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31  " "" "Password=1
12d70 32 34 35 3b 22 20 74 72 75 65 20 66 61 6c 73 65  245;" true false
12d80 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
12d90 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70   [list]....  lap
12da0 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
12db0 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
12dc0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
12dd0 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45  $db \..      "SE
12de0 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
12df0 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20  OM t1;"} error] 
12e00 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63  \..      [extrac
12e10 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  tSystemDataSQLit
12e20 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67  eExceptionMessag
12e30 65 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 6c  e $error]....  l
12e40 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
12e50 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74  atch {sql execut
12e60 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  e $db \..      "
12e70 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
12e80 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20  x) VALUES(1);"} 
12e90 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
12ea0 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61  [extractSystemDa
12eb0 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  taSQLiteExceptio
12ec0 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72 5d  nMessage $error]
12ed0 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
12ee0 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75  $fileName db tru
12ef0 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false.. 
12f00 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
12f10 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
12f20 50 61 73 73 77 6f 72 64 3d 31 32 20 34 35 3b 22  Password=12 45;"
12f30 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20   true false.... 
12f40 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
12f50 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
12f60 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ute $db \..     
12f70 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
12f80 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
12f90 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20  } error] \..    
12fa0 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d    [extractSystem
12fb0 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74  DataSQLiteExcept
12fc0 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f  ionMessage $erro
12fd0 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  r]....  lappend 
12fe0 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
12ff0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
13000 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
13010 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
13020 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
13030 3b 22 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ;"} error] \..  
13040 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
13050 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
13060 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72  ptionMessage $er
13070 72 6f 72 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  ror]....  set re
13080 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
13090 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
130a0 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
130b0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
130c0 20 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62   error result db
130d0 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
130e0 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
130f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
13100 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20 6d  ite.Encryption m
13110 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
13120 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
13130 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
13140 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
13150 72 65 73 75 6c 74 20 7b 31 20 7b 66 69 6c 65 20  result {1 {file 
13160 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
13170 65 7d 20 31 5c 0d 0a 7b 66 69 6c 65 20 69 73 20  e} 1\..{file is 
13180 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 7d 20  not a database} 
13190 30 20 31 20 30 20 32 7d 7d 0d 0a 0d 0a 23 23 23  0 1 0 2}}....###
131a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
131b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
131c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
131d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
131e0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
131f0 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
13200 74 61 2d 31 2e 34 34 20 7b 65 6e 63 72 79 70 74  ta-1.44 {encrypt
13210 65 64 20 64 61 74 61 62 61 73 65 2c 20 70 61 73  ed database, pas
13220 73 77 6f 72 64 20 77 2f 65 6e 64 2d 73 70 61 63  sword w/end-spac
13230 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  e} -setup {..  s
13240 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
13250 4e 61 6d 65 20 64 61 74 61 2d 31 2e 34 34 2e 64  Name data-1.44.d
13260 62 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 22  b] "" "" "" "" "
13270 50 61 73 73 77 6f 72 64 3d 31 32 33 34 20 3b 22  Password=1234 ;"
13280 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
13290 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
132a0 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
132b0 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63  x);"..  sql exec
132c0 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
132d0 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
132e0 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65  ES(1);"....  cle
132f0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
13300 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66   db true false f
13310 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20  alse..  setupDb 
13320 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  $fileName "" "" 
13330 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d  "" "" "Password=
13340 31 32 33 34 3b 22 20 74 72 75 65 20 66 61 6c 73  1234;" true fals
13350 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  e....  set resul
13360 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61  t [list]....  la
13370 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
13380 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65  tch {sql execute
13390 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
133a0 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53   $db \..      "S
133b0 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46  ELECT COUNT(*) F
133c0 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d  ROM t1;"} error]
133d0 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70   $error....  lap
133e0 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
133f0 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
13400 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e  $db \..      "IN
13410 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29  SERT INTO t1 (x)
13420 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72   VALUES(1);"} er
13430 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20  ror] $error.... 
13440 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
13450 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c  Name db true fal
13460 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75  se false..  setu
13470 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22  pDb $fileName ""
13480 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77   "" "" "" "Passw
13490 6f 72 64 3d 31 32 33 34 20 3b 22 20 74 72 75 65  ord=1234 ;" true
134a0 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 6c 61 70 70   false....  lapp
134b0 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
134c0 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24  h {sql execute $
134d0 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53  db \..      "INS
134e0 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
134f0 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72  VALUES(1);"} err
13500 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20  or] $error....  
13510 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
13520 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
13530 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
13540 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  ar $db \..      
13550 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29  "SELECT COUNT(*)
13560 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f   FROM t1;"} erro
13570 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 73  r] $error....  s
13580 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  et result..} -cl
13590 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
135a0 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
135b0 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
135c0 70 6c 61 69 6e 20 65 72 72 6f 72 20 72 65 73 75  plain error resu
135d0 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  lt db fileName..
135e0 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
135f0 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61 74  eagle System.Dat
13600 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74  a.SQLite.Encrypt
13610 69 6f 6e 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  ion monoBug28 co
13620 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70  mmand.sql\..comp
13630 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
13640 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
13650 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 31  te} -result {0 1
13660 20 30 20 31 20 30 20 31 20 30 20 33 7d 7d 0d 0a   0 1 0 1 0 3}}..
13670 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
13680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
136c0 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
136d0 73 74 20 64 61 74 61 2d 31 2e 34 35 20 7b 65 6e  st data-1.45 {en
136e0 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
136f0 2c 20 77 2f 71 75 6f 74 65 64 2d 65 6e 64 2d 73  , w/quoted-end-s
13700 70 61 63 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a  pace} -setup {..
13710 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66    setupDb [set f
13720 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 34  ileName data-1.4
13730 35 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20 22  5.db] "" "" "" "
13740 22 20 22 50 61 73 73 77 6f 72 64 3d 5c 22 31 32  " "Password=\"12
13750 33 34 20 5c 22 3b 22 0d 0a 7d 20 2d 62 6f 64 79  34 \";"..} -body
13760 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
13770 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
13780 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20 73  BLE t1(x);"..  s
13790 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
137a0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
137b0 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d 0a  x) VALUES(1);"..
137c0 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
137d0 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20  ileName db true 
137e0 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73  false false..  s
137f0 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
13800 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61   "" "" "" "" "Pa
13810 73 73 77 6f 72 64 3d 31 32 33 34 3b 22 20 74 72  ssword=1234;" tr
13820 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65  ue false....  se
13830 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
13840 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
13850 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
13860 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
13870 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
13880 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55       "SELECT COU
13890 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d  NT(*) FROM t1;"}
138a0 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20   error] \..     
138b0 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
138c0 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
138d0 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72  onMessage $error
138e0 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
138f0 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
13900 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d  l execute $db \.
13910 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49  .      "INSERT I
13920 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
13930 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 5c  S(1);"} error] \
13940 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74  ..      [extract
13950 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
13960 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
13970 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 63 6c   $error]....  cl
13980 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
13990 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20  e db true false 
139a0 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62  false..  setupDb
139b0 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" ""
139c0 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64   "" "" "Password
139d0 3d 5c 22 31 32 33 34 20 5c 22 3b 22 20 74 72 75  =\"1234 \";" tru
139e0 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 6c 61 70  e false....  lap
139f0 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
13a00 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
13a10 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e  $db \..      "IN
13a20 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29  SERT INTO t1 (x)
13a30 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72   VALUES(1);"} er
13a40 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ror] \..      [e
13a50 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61  xtractSystemData
13a60 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d  SQLiteExceptionM
13a70 65 73 73 61 67 65 20 24 65 72 72 6f 72 5d 0d 0a  essage $error]..
13a80 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
13a90 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
13aa0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
13ab0 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20  scalar $db \..  
13ac0 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e      "SELECT COUN
13ad0 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20  T(*) FROM t1;"} 
13ae0 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
13af0 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61  [extractSystemDa
13b00 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  taSQLiteExceptio
13b10 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72 5d  nMessage $error]
13b20 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
13b30 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
13b40 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
13b50 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
13b60 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72   -nocomplain err
13b70 6f 72 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c  or result db fil
13b80 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
13b90 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73  aints {eagle Sys
13ba0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
13bb0 45 6e 63 72 79 70 74 69 6f 6e 20 6d 6f 6e 6f 42  Encryption monoB
13bc0 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
13bd0 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  \..compile.DATA 
13be0 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
13bf0 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
13c00 6c 74 20 7b 31 20 7b 66 69 6c 65 20 69 73 20 6e  lt {1 {file is n
13c10 6f 74 20 61 20 64 61 74 61 62 61 73 65 7d 20 31  ot a database} 1
13c20 5c 0d 0a 7b 66 69 6c 65 20 69 73 20 6e 6f 74 20  \..{file is not 
13c30 61 20 64 61 74 61 62 61 73 65 7d 20 30 20 31 20  a database} 0 1 
13c40 30 20 32 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  0 2}}....#######
13c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c90 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
13ca0 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
13cb0 2e 34 36 20 7b 65 6e 63 72 79 70 74 65 64 20 64  .46 {encrypted d
13cc0 61 74 61 62 61 73 65 2c 20 70 61 73 73 77 6f 72  atabase, passwor
13cd0 64 20 76 69 61 20 62 75 69 6c 64 65 72 7d 20 2d  d via builder} -
13ce0 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70  setup {..  setup
13cf0 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
13d00 20 64 61 74 61 2d 31 2e 34 36 2e 64 62 5d 20 22   data-1.46.db] "
13d10 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73  " "" "" "" "Pass
13d20 77 6f 72 64 3d 36 37 20 38 39 3b 22 0d 0a 7d 20  word=67 89;"..} 
13d30 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
13d40 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41  xecute $db "CREA
13d50 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 22  TE TABLE t1(x);"
13d60 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
13d70 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $db "INSERT INTO
13d80 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
13d90 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  );"....  cleanup
13da0 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
13db0 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65  true false false
13dc0 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63  ....  set connec
13dd0 74 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65  tionStringBuilde
13de0 72 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65  r [object create
13df0 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..     
13e00 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
13e10 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
13e20 74 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65  tionStringBuilde
13e30 72 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74  r]....  $connect
13e40 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ionStringBuilder
13e50 20 44 61 74 61 53 6f 75 72 63 65 20 5c 0d 0a 20   DataSource \.. 
13e60 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join 
13e70 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
13e80 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
13e90 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69  ]....  $connecti
13ea0 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20  onStringBuilder 
13eb0 50 61 73 73 77 6f 72 64 20 22 36 37 20 38 39 22  Password "67 89"
13ec0 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63  ....  set connec
13ed0 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 63 72 65  tion [object cre
13ee0 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  ate -alias \..  
13ef0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
13f00 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
13f10 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  nection \..     
13f20 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72   [$connectionStr
13f30 69 6e 67 42 75 69 6c 64 65 72 20 54 6f 53 74 72  ingBuilder ToStr
13f40 69 6e 67 5d 20 74 72 75 65 5d 0d 0a 0d 0a 20 20  ing] true]....  
13f50 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4f 70 65 6e  $connection Open
13f60 3b 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f  ; addDbConnectio
13f70 6e 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  n $connection...
13f80 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
13f90 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  ist]....  lappen
13fa0 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
13fb0 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  {sql execute -ex
13fc0 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
13fd0 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43   \..      "SELEC
13fe0 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20  T COUNT(*) FROM 
13ff0 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  t1;"} error] $er
14000 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  ror....  lappend
14010 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
14020 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
14030 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54  \..      "INSERT
14040 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c   INTO t1 (x) VAL
14050 55 45 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d  UES(1);"} error]
14060 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65   $error....  cle
14070 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
14080 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66   db true false f
14090 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20  alse..  setupDb 
140a0 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  $fileName "" "" 
140b0 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d  "" "" "Password=
140c0 5c 22 36 37 20 38 39 5c 22 3b 22 20 74 72 75 65  \"67 89\";" true
140d0 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 6c 61 70 70   false....  lapp
140e0 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
140f0 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24  h {sql execute $
14100 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53  db \..      "INS
14110 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
14120 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72  VALUES(1);"} err
14130 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20  or] $error....  
14140 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
14150 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
14160 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
14170 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  ar $db \..      
14180 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29  "SELECT COUNT(*)
14190 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f   FROM t1;"} erro
141a0 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 73  r] $error....  s
141b0 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  et result..} -cl
141c0 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74  eanup {..  unset
141d0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e   -nocomplain con
141e0 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65  nection....  cle
141f0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
14200 3b 20 23 20 4e 4f 54 45 3a 20 41 66 74 65 72 20  ; # NOTE: After 
14210 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 61 6c 2e  object disposal.
14220 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
14230 6f 6d 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69  omplain connecti
14240 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20  onStringBuilder 
14250 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20  error result db 
14260 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
14270 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
14280 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 53  command.object S
14290 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
142a0 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20 6d 6f 6e  e.Encryption mon
142b0 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e 64  oBug28\..command
142c0 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
142d0 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
142e0 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65  Data.SQLite} -re
142f0 73 75 6c 74 20 7b 30 20 31 20 30 20 31 20 30 20  sult {0 1 0 1 0 
14300 31 20 30 20 33 7d 7d 0d 0a 0d 0a 23 23 23 23 23  1 0 3}}....#####
14310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14350 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
14360 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
14370 2d 31 2e 34 37 20 7b 71 75 6f 74 65 64 20 63 6f  -1.47 {quoted co
14380 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string 
14390 70 72 6f 70 65 72 74 69 65 73 7d 20 2d 73 65 74  properties} -set
143a0 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  up {..  unset -n
143b0 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
143c0 20 6c 69 73 74 20 70 61 69 72 20 73 74 72 69 6e   list pair strin
143d0 67 73 20 73 74 72 69 6e 67 0d 0a 7d 20 2d 62 6f  gs string..} -bo
143e0 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75  dy {..  set resu
143f0 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73  lt [list]....  s
14400 65 74 20 73 74 72 69 6e 67 73 20 5b 6c 69 73 74  et strings [list
14410 20 5c 0d 0a 20 20 20 20 20 20 22 4f 6e 65 54 77   \..      "OneTw
14420 6f 3d 54 68 72 65 65 46 6f 75 72 22 20 22 5c 22  o=ThreeFour" "\"
14430 4f 6e 65 54 77 6f 5c 22 3d 5c 22 54 68 72 65 65  OneTwo\"=\"Three
14440 46 6f 75 72 5c 22 22 20 5c 0d 0a 20 20 20 20 20  Four\"" \..     
14450 20 22 4f 6e 65 20 54 77 6f 3d 54 68 72 65 65 20   "One Two=Three 
14460 46 6f 75 72 22 20 22 5c 22 4f 6e 65 20 54 77 6f  Four" "\"One Two
14470 5c 22 3d 5c 22 54 68 72 65 65 20 46 6f 75 72 5c  \"=\"Three Four\
14480 22 22 20 5c 0d 0a 20 20 20 20 20 20 22 4f 6e 65  "" \..      "One
14490 54 77 6f 3d 54 68 72 65 65 46 6f 75 72 3b 22 20  Two=ThreeFour;" 
144a0 22 5c 22 4f 6e 65 54 77 6f 5c 22 3d 5c 22 54 68  "\"OneTwo\"=\"Th
144b0 72 65 65 46 6f 75 72 5c 22 3b 22 20 5c 0d 0a 20  reeFour\";" \.. 
144c0 20 20 20 20 20 22 4f 6e 65 20 54 77 6f 3d 54 68       "One Two=Th
144d0 72 65 65 20 46 6f 75 72 3b 22 20 22 5c 22 4f 6e  ree Four;" "\"On
144e0 65 20 54 77 6f 5c 22 3d 5c 22 54 68 72 65 65 20  e Two\"=\"Three 
144f0 46 6f 75 72 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 66  Four\";"]....  f
14500 6f 72 65 61 63 68 20 73 74 72 69 6e 67 20 24 73  oreach string $s
14510 74 72 69 6e 67 73 20 7b 0d 0a 20 20 20 20 73 65  trings {..    se
14520 74 20 6c 69 73 74 20 5b 6f 62 6a 65 63 74 20 69  t list [object i
14530 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
14540 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..     
14550 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
14560 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e  QLite.SQLiteConn
14570 65 63 74 69 6f 6e 20 50 61 72 73 65 43 6f 6e 6e  ection ParseConn
14580 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a  ectionString \..
14590 20 20 20 20 20 20 20 20 24 73 74 72 69 6e 67 20          $string 
145a0 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 6f 62  false]....    ob
145b0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
145c0 69 61 73 20 70 61 69 72 20 24 6c 69 73 74 20 7b  ias pair $list {
145d0 0d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  ..      lappend 
145e0 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b 24 70  result [list [$p
145f0 61 69 72 20 4b 65 79 5d 20 5b 24 70 61 69 72 20  air Key] [$pair 
14600 56 61 6c 75 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a  Value]]..    }..
14610 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73    }....  set res
14620 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
14630 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  {..  unset -noco
14640 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 6c 69  mplain result li
14650 73 74 20 70 61 69 72 20 73 74 72 69 6e 67 73 20  st pair strings 
14660 73 74 72 69 6e 67 0d 0a 7d 20 2d 63 6f 6e 73 74  string..} -const
14670 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
14680 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 53 79 73  mmand.object Sys
14690 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
146a0 20 2d 72 65 73 75 6c 74 20 7b 7b 4f 6e 65 54 77   -result {{OneTw
146b0 6f 5c 0d 0a 54 68 72 65 65 46 6f 75 72 7d 20 7b  o\..ThreeFour} {
146c0 4f 6e 65 54 77 6f 20 54 68 72 65 65 46 6f 75 72  OneTwo ThreeFour
146d0 7d 20 7b 7b 4f 6e 65 20 54 77 6f 7d 20 7b 54 68  } {{One Two} {Th
146e0 72 65 65 20 46 6f 75 72 7d 7d 20 7b 7b 4f 6e 65  ree Four}} {{One
146f0 20 54 77 6f 7d 20 7b 54 68 72 65 65 20 46 6f 75   Two} {Three Fou
14700 72 7d 7d 5c 0d 0a 7b 4f 6e 65 54 77 6f 20 54 68  r}}\..{OneTwo Th
14710 72 65 65 46 6f 75 72 7d 20 7b 4f 6e 65 54 77 6f  reeFour} {OneTwo
14720 20 54 68 72 65 65 46 6f 75 72 7d 20 7b 7b 4f 6e   ThreeFour} {{On
14730 65 20 54 77 6f 7d 20 7b 54 68 72 65 65 20 46 6f  e Two} {Three Fo
14740 75 72 7d 7d 20 7b 7b 4f 6e 65 20 54 77 6f 7d 5c  ur}} {{One Two}\
14750 0d 0a 7b 54 68 72 65 65 20 46 6f 75 72 7d 7d 7d  ..{Three Four}}}
14760 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
14770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
147b0 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
147c0 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34 38 20  {test data-1.48 
147d0 7b 72 6f 6c 6c 62 61 63 6b 20 74 6f 20 6e 65 73  {rollback to nes
147e0 74 65 64 20 73 61 76 65 70 6f 69 6e 74 7d 20 2d  ted savepoint} -
147f0 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70  setup {..  setup
14800 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
14810 20 64 61 74 61 2d 31 2e 34 38 2e 64 62 5d 0d 0a   data-1.48.db]..
14820 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c  } -body {..  sql
14830 20 65 78 65 63 75 74 65 20 24 64 62 20 22 42 45   execute $db "BE
14840 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 20 54 52  GIN IMMEDIATE TR
14850 41 4e 53 41 43 54 49 4f 4e 3b 22 0d 0a 20 20 73  ANSACTION;"..  s
14860 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
14870 53 41 56 45 50 4f 49 4e 54 20 6f 6e 65 3b 22 0d  SAVEPOINT one;".
14880 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
14890 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41 42   $db "CREATE TAB
148a0 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20 73 71  LE t1(x);"..  sq
148b0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 53  l execute $db "S
148c0 41 56 45 50 4f 49 4e 54 20 74 77 6f 3b 22 0d 0a  AVEPOINT two;"..
148d0 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
148e0 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $db "INSERT INTO
148f0 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
14900 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  );"..  lappend r
14910 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
14920 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
14930 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 43  ar $db "SELECT C
14940 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
14950 22 5d 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  "]..  sql execut
14960 65 20 24 64 62 20 22 53 41 56 45 50 4f 49 4e 54  e $db "SAVEPOINT
14970 20 74 68 72 65 65 3b 22 0d 0a 0d 0a 20 20 73 71   three;"....  sq
14980 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
14990 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
149a0 29 20 56 41 4c 55 45 53 28 32 29 3b 22 0d 0a 20  ) VALUES(2);".. 
149b0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
149c0 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
149d0 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
149e0 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a   "SELECT COUNT(*
149f0 29 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a  ) FROM t1;"]....
14a00 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
14a10 62 20 22 52 4f 4c 4c 42 41 43 4b 20 54 52 41 4e  b "ROLLBACK TRAN
14a20 53 41 43 54 49 4f 4e 20 54 4f 20 53 41 56 45 50  SACTION TO SAVEP
14a30 4f 49 4e 54 20 74 68 72 65 65 3b 22 0d 0a 20 20  OINT three;"..  
14a40 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
14a50 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
14a60 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
14a70 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29  "SELECT COUNT(*)
14a80 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20   FROM t1;"].... 
14a90 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
14aa0 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
14ab0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
14ac0 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
14ad0 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 64  omplain result d
14ae0 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
14af0 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
14b00 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
14b10 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
14b20 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
14b30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14b40 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 31  e} -result \..{1
14b50 20 32 20 31 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23   2 1}}....######
14b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ba0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
14bb0 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
14bc0 31 2e 34 39 20 7b 4e 6f 45 78 74 65 6e 73 69 6f  1.49 {NoExtensio
14bd0 6e 46 75 6e 63 74 69 6f 6e 73 20 63 6f 6e 6e 65  nFunctions conne
14be0 63 74 69 6f 6e 20 66 6c 61 67 7d 20 2d 73 65 74  ction flag} -set
14bf0 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
14c00 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
14c10 74 61 2d 31 2e 34 39 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.49.db]..} -
14c20 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65  body {..  set re
14c30 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
14c40 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
14c50 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
14c60 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
14c70 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
14c80 20 22 53 45 4c 45 43 54 20 72 65 70 6c 69 63 61   "SELECT replica
14c90 74 65 28 27 31 32 33 34 27 2c 20 32 29 3b 22 7d  te('1234', 2);"}
14ca0 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20   error] \..     
14cb0 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
14cc0 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
14cd0 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72  onMessage $error
14ce0 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  ]....  cleanupDb
14cf0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 73 65   $fileName..  se
14d00 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  tupDb $fileName 
14d10 22 22 20 22 22 20 22 22 20 4e 6f 45 78 74 65 6e  "" "" "" NoExten
14d20 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 0d 0a 0d  sionFunctions...
14d30 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
14d40 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78  t [catch {sql ex
14d50 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
14d60 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20  calar $db \..   
14d70 20 20 20 22 53 45 4c 45 43 54 20 72 65 70 6c 69     "SELECT repli
14d80 63 61 74 65 28 27 31 32 33 34 27 2c 20 33 29 3b  cate('1234', 3);
14d90 22 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20  "} error] \..   
14da0 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65     [extractSyste
14db0 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
14dc0 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72  tionMessage $err
14dd0 6f 72 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  or]....  cleanup
14de0 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  Db $fileName..  
14df0 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
14e00 65 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  e....  lappend r
14e10 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
14e20 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
14e30 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \.
14e40 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 72  .      "SELECT r
14e50 65 70 6c 69 63 61 74 65 28 27 31 32 33 34 27 2c  eplicate('1234',
14e60 20 34 29 3b 22 7d 20 65 72 72 6f 72 5d 20 5c 0d   4);"} error] \.
14e70 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74 53  .      [extractS
14e80 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
14e90 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20  xceptionMessage 
14ea0 24 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 73 65 74  $error]....  set
14eb0 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
14ec0 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
14ed0 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
14ee0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
14ef0 61 69 6e 20 65 72 72 6f 72 20 72 65 73 75 6c 74  ain error result
14f00 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
14f10 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
14f20 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
14f30 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
14f40 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
14f50 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
14f60 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  te SQLiteInterop
14f70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
14f80 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
14f90 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 45 58 54  Lite.INTEROP_EXT
14fa0 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53  ENSION_FUNCTIONS
14fb0 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
14fc0 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 5e 30 20 31  \..-result {^0 1
14fd0 32 33 34 31 32 33 34 20 31 20 5c 7b 53 51 4c 20  2341234 1 \{SQL 
14fe0 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72 20  logic error( or 
14ff0 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
15000 29 3f 20 2d 2d 20 6e 6f 20 73 75 63 68 5c 0d 0a  )? -- no such\..
15010 66 75 6e 63 74 69 6f 6e 3a 20 72 65 70 6c 69 63  function: replic
15020 61 74 65 5c 7d 20 30 20 31 32 33 34 31 32 33 34  ate\} 0 12341234
15030 31 32 33 34 31 32 33 34 24 7d 7d 0d 0a 0d 0a 23  12341234$}}....#
15040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
15090 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
150a0 64 61 74 61 2d 31 2e 35 30 20 7b 63 6f 6c 75 6d  data-1.50 {colum
150b0 6e 20 6e 61 6d 65 20 61 6e 64 20 69 6e 64 65 78  n name and index
150c0 20 6c 6f 6f 6b 75 70 7d 20 2d 73 65 74 75 70 20   lookup} -setup 
150d0 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
150e0 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
150f0 31 2e 35 30 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  1.50.db]..} -bod
15100 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
15110 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52  te $db {..    CR
15120 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c  EATE TABLE t1(x,
15130 20 79 2c 20 7a 29 3b 0d 0a 20 20 20 20 49 4e 53   y, z);..    INS
15140 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
15150 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 31 2c 20  y, z) VALUES(1, 
15160 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b 0d 0a 20  'foo', 1234);.. 
15170 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 64 61 74 61   }....  set data
15180 52 65 61 64 65 72 20 5b 73 71 6c 20 65 78 65 63  Reader [sql exec
15190 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
151a0 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74 61  der -format data
151b0 72 65 61 64 65 72 20 5c 0d 0a 20 20 20 20 20 20  reader \..      
151c0 2d 61 6c 69 61 73 20 24 64 62 20 22 53 45 4c 45  -alias $db "SELE
151d0 43 54 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20  CT x, y, z FROM 
151e0 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  t1;"]....  set r
151f0 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
15200 20 20 77 68 69 6c 65 20 7b 5b 24 64 61 74 61 52    while {[$dataR
15210 65 61 64 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a  eader Read]} {..
15220 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
15230 6c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6c  lt \..        [l
15240 69 73 74 20 5b 24 64 61 74 61 52 65 61 64 65 72  ist [$dataReader
15250 20 47 65 74 4e 61 6d 65 20 30 5d 20 5b 24 64 61   GetName 0] [$da
15260 74 61 52 65 61 64 65 72 20 47 65 74 4f 72 64 69  taReader GetOrdi
15270 6e 61 6c 20 78 5d 20 5c 0d 0a 20 20 20 20 20 20  nal x] \..      
15280 20 20 20 20 20 20 5b 24 64 61 74 61 52 65 61 64        [$dataRead
15290 65 72 20 49 74 65 6d 20 78 5d 5d 20 5c 0d 0a 20  er Item x]] \.. 
152a0 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 24 64         [list [$d
152b0 61 74 61 52 65 61 64 65 72 20 47 65 74 4e 61 6d  ataReader GetNam
152c0 65 20 31 5d 20 5b 24 64 61 74 61 52 65 61 64 65  e 1] [$dataReade
152d0 72 20 47 65 74 4f 72 64 69 6e 61 6c 20 79 5d 20  r GetOrdinal y] 
152e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
152f0 24 64 61 74 61 52 65 61 64 65 72 20 49 74 65 6d  $dataReader Item
15300 20 79 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20   y]] \..        
15310 5b 6c 69 73 74 20 5b 24 64 61 74 61 52 65 61 64  [list [$dataRead
15320 65 72 20 47 65 74 4e 61 6d 65 20 32 5d 20 5b 24  er GetName 2] [$
15330 64 61 74 61 52 65 61 64 65 72 20 47 65 74 4f 72  dataReader GetOr
15340 64 69 6e 61 6c 20 7a 5d 20 5c 0d 0a 20 20 20 20  dinal z] \..    
15350 20 20 20 20 20 20 20 20 5b 24 64 61 74 61 52 65          [$dataRe
15360 61 64 65 72 20 49 74 65 6d 20 7a 5d 5d 0d 0a 20  ader Item z]].. 
15370 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75   }....  set resu
15380 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
15390 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
153a0 70 6c 61 69 6e 20 64 61 74 61 52 65 61 64 65 72  plain dataReader
153b0 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
153c0 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
153d0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
153e0 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
153f0 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
15400 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
15410 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
15420 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
15430 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
15440 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
15450 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c  a.SQLite} -resul
15460 74 20 7b 7b 78 20 30 20 31 7d 20 7b 79 20 31 20  t {{x 0 1} {y 1 
15470 66 6f 6f 7d 20 7b 7a 20 32 20 31 32 33 34 7d 7d  foo} {z 2 1234}}
15480 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
15490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154d0 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
154e0 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 35 31 20  {test data-1.51 
154f0 7b 6e 75 6c 6c 61 62 6c 65 20 76 61 6c 75 65 20  {nullable value 
15500 74 79 70 65 73 7d 20 2d 73 65 74 75 70 20 7b 0d  types} -setup {.
15510 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
15520 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
15530 35 31 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  51.db]..} -body 
15540 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  {..  sql execute
15550 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41   $db {..    CREA
15560 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e  TE TABLE t1(x IN
15570 54 45 47 45 52 29 3b 0d 0a 20 20 20 20 49 4e 53  TEGER);..    INS
15580 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
15590 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0d 0a 20  VALUES(NULL);.. 
155a0 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
155b0 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
155c0 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 64  ..  }....  set d
155d0 61 74 61 52 65 61 64 65 72 20 5b 73 71 6c 20 65  ataReader [sql e
155e0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
155f0 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64  reader -format d
15600 61 74 61 72 65 61 64 65 72 20 5c 0d 0a 20 20 20  atareader \..   
15610 20 20 20 2d 61 6c 69 61 73 20 24 64 62 20 22 53     -alias $db "S
15620 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20  ELECT x FROM t1 
15630 4f 52 44 45 52 20 42 59 20 78 3b 22 5d 0d 0a 0d  ORDER BY x;"]...
15640 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
15650 69 73 74 5d 0d 0a 0d 0a 20 20 77 68 69 6c 65 20  ist]....  while 
15660 7b 5b 24 64 61 74 61 52 65 61 64 65 72 20 52 65  {[$dataReader Re
15670 61 64 5d 7d 20 7b 0d 0a 20 20 20 20 66 6f 72 65  ad]} {..    fore
15680 61 63 68 20 7b 61 20 62 20 63 20 64 20 65 7d 20  ach {a b c d e} 
15690 5b 6c 69 73 74 20 22 22 20 22 22 20 22 22 20 22  [list "" "" "" "
156a0 22 20 22 22 5d 20 62 72 65 61 6b 0d 0a 0d 0a 20  " ""] break.... 
156b0 20 20 20 73 65 74 20 78 20 5b 24 64 61 74 61 52     set x [$dataR
156c0 65 61 64 65 72 20 47 65 74 4f 72 64 69 6e 61 6c  eader GetOrdinal
156d0 20 78 5d 0d 0a 0d 0a 20 20 20 20 66 6f 72 65 61   x]....    forea
156e0 63 68 20 7b 61 20 62 20 63 20 65 7d 20 5b 6c 69  ch {a b c e} [li
156f0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24  st \..        [$
15700 64 61 74 61 52 65 61 64 65 72 20 47 65 74 4e 61  dataReader GetNa
15710 6d 65 20 24 78 5d 20 5b 24 64 61 74 61 52 65 61  me $x] [$dataRea
15720 64 65 72 20 47 65 74 56 61 6c 75 65 20 24 78 5d  der GetValue $x]
15730 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 63 61 74   \..        [cat
15740 63 68 20 7b 24 64 61 74 61 52 65 61 64 65 72 20  ch {$dataReader 
15750 47 65 74 49 6e 74 36 34 20 24 78 7d 20 64 5d 20  GetInt64 $x} d] 
15760 5b 24 64 61 74 61 52 65 61 64 65 72 20 49 74 65  [$dataReader Ite
15770 6d 20 78 5d 5d 20 62 72 65 61 6b 0d 0a 0d 0a 20  m x]] break.... 
15780 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
15790 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  t [list \..     
157a0 20 20 20 24 78 20 24 61 20 24 62 20 24 63 20 5b     $x $a $b $c [
157b0 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74  extractSystemDat
157c0 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  aSQLiteException
157d0 4d 65 73 73 61 67 65 20 24 64 5d 20 24 65 5d 0d  Message $d] $e].
157e0 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  .  }....  set re
157f0 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
15800 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
15810 6f 6d 70 6c 61 69 6e 20 64 61 74 61 52 65 61 64  omplain dataRead
15820 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  er....  cleanupD
15830 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
15840 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
15850 69 6e 20 65 20 64 20 63 20 62 20 61 20 78 20 72  in e d c b a x r
15860 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d  esult db fileNam
15870 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
15880 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
15890 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
158a0 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
158b0 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
158c0 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
158d0 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20 72  SQLite} -match r
158e0 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e  egexp -result {^
158f0 5c 7b 30 20 78 20 53 79 73 74 65 6d 23 44 42 4e  \{0 x System#DBN
15900 75 6c 6c 23 5c 64 2b 20 31 5c 0d 0a 5c 7b 53 79  ull#\d+ 1\..\{Sy
15910 73 74 65 6d 5c 2e 52 65 66 6c 65 63 74 69 6f 6e  stem\.Reflection
15920 5c 2e 54 61 72 67 65 74 49 6e 76 6f 63 61 74 69  \.TargetInvocati
15930 6f 6e 45 78 63 65 70 74 69 6f 6e 3a 20 45 78 63  onException: Exc
15940 65 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20  eption has been 
15950 74 68 72 6f 77 6e 20 62 79 5c 0d 0a 74 68 65 20  thrown by\..the 
15960 74 61 72 67 65 74 20 6f 66 20 61 6e 20 69 6e 76  target of an inv
15970 6f 63 61 74 69 6f 6e 5c 2e 20 2d 2d 2d 3e 20 53  ocation\. ---> S
15980 79 73 74 65 6d 5c 2e 49 6e 76 61 6c 69 64 43 61  ystem\.InvalidCa
15990 73 74 45 78 63 65 70 74 69 6f 6e 3a 2e 2a 5c 7d  stException:.*\}
159a0 5c 0d 0a 53 79 73 74 65 6d 23 44 42 4e 75 6c 6c  \..System#DBNull
159b0 23 5c 64 2b 5c 7d 20 5c 7b 30 20 78 20 31 20 30  #\d+\} \{0 x 1 0
159c0 20 31 20 31 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23   1 1\}$}}....###
159d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a10 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
15a20 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
15a30 74 61 2d 31 2e 35 32 20 7b 73 74 61 74 69 63 20  ta-1.52 {static 
15a40 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 2e 45 78  SQLiteCommand.Ex
15a50 65 63 75 74 65 20 6d 65 74 68 6f 64 7d 20 2d 73  ecute method} -s
15a60 65 74 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20  etup {..  unset 
15a70 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
15a80 6c 74 20 73 71 6c 0d 0a 7d 20 2d 62 6f 64 79 20  lt sql..} -body 
15a90 7b 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20  {..  set sql(1) 
15aa0 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  { \..    CREATE 
15ab0 54 41 42 4c 45 20 74 31 28 78 29 3b 20 5c 0d 0a  TABLE t1(x); \..
15ac0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
15ad0 74 31 20 28 78 29 20 56 41 4c 55 45 53 20 28 4e  t1 (x) VALUES (N
15ae0 55 4c 4c 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c  ULL); \..    SEL
15af0 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52  ECT x FROM t1 OR
15b00 44 45 52 20 42 59 20 78 3b 20 5c 0d 0a 20 20 7d  DER BY x; \..  }
15b10 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
15b20 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45   { \..    CREATE
15b30 20 54 41 42 4c 45 20 74 31 28 78 29 3b 20 5c 0d   TABLE t1(x); \.
15b40 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
15b50 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 20 28   t1 (x) VALUES (
15b60 3f 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ?); \..    SELEC
15b70 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T x FROM t1 ORDE
15b80 52 20 42 59 20 78 3b 20 5c 0d 0a 20 20 7d 0d 0a  R BY x; \..  }..
15b90 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 31  ..  set result(1
15ba0 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ) [object invoke
15bb0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
15bc0 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ite.SQLiteComman
15bd0 64 20 45 78 65 63 75 74 65 20 5c 0d 0a 20 20 20  d Execute \..   
15be0 20 20 20 22 74 68 69 73 20 77 69 6c 6c 20 6e 6f     "this will no
15bf0 74 20 65 78 65 63 75 74 65 22 20 4e 6f 6e 65 20  t execute" None 
15c00 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  null]....  set r
15c10 65 73 75 6c 74 28 32 29 20 5b 6f 62 6a 65 63 74  esult(2) [object
15c20 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44   invoke System.D
15c30 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
15c40 65 43 6f 6d 6d 61 6e 64 20 45 78 65 63 75 74 65  eCommand Execute
15c50 20 5c 0d 0a 20 20 20 20 20 20 24 73 71 6c 28 31   \..      $sql(1
15c60 29 20 4e 6f 6e 51 75 65 72 79 20 6e 75 6c 6c 5d  ) NonQuery null]
15c70 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
15c80 28 33 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  (3) [object invo
15c90 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ke System.Data.S
15ca0 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d  QLite.SQLiteComm
15cb0 61 6e 64 20 45 78 65 63 75 74 65 20 5c 0d 0a 20  and Execute \.. 
15cc0 20 20 20 20 20 24 73 71 6c 28 31 29 20 53 63 61       $sql(1) Sca
15cd0 6c 61 72 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 73  lar null]....  s
15ce0 65 74 20 72 65 73 75 6c 74 28 34 29 20 5b 6f 62  et result(4) [ob
15cf0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74  ject invoke Syst
15d00 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
15d10 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78 65  QLiteCommand Exe
15d20 63 75 74 65 20 5c 0d 0a 20 20 20 20 20 20 24 73  cute \..      $s
15d30 71 6c 28 31 29 20 52 65 61 64 65 72 20 6e 75 6c  ql(1) Reader nul
15d40 6c 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  l]....  set resu
15d50 6c 74 28 35 29 20 5b 6f 62 6a 65 63 74 20 69 6e  lt(5) [object in
15d60 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61  voke System.Data
15d70 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
15d80 6d 6d 61 6e 64 20 45 78 65 63 75 74 65 20 5c 0d  mmand Execute \.
15d90 0a 20 20 20 20 20 20 22 74 68 69 73 20 77 69 6c  .      "this wil
15da0 6c 20 6e 6f 74 20 65 78 65 63 75 74 65 22 20 4e  l not execute" N
15db0 6f 6e 65 20 6e 75 6c 6c 20 31 5d 0d 0a 0d 0a 20  one null 1].... 
15dc0 20 73 65 74 20 72 65 73 75 6c 74 28 36 29 20 5b   set result(6) [
15dd0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79  object invoke Sy
15de0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15df0 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45  .SQLiteCommand E
15e00 78 65 63 75 74 65 20 5c 0d 0a 20 20 20 20 20 20  xecute \..      
15e10 24 73 71 6c 28 32 29 20 4e 6f 6e 51 75 65 72 79  $sql(2) NonQuery
15e20 20 6e 75 6c 6c 20 31 5d 0d 0a 0d 0a 20 20 73 65   null 1]....  se
15e30 74 20 72 65 73 75 6c 74 28 37 29 20 5b 6f 62 6a  t result(7) [obj
15e40 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
15e50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
15e60 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78 65 63  LiteCommand Exec
15e70 75 74 65 20 5c 0d 0a 20 20 20 20 20 20 24 73 71  ute \..      $sq
15e80 6c 28 32 29 20 53 63 61 6c 61 72 20 6e 75 6c 6c  l(2) Scalar null
15e90 20 31 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73   1]....  set res
15ea0 75 6c 74 28 38 29 20 5b 6f 62 6a 65 63 74 20 69  ult(8) [object i
15eb0 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74  nvoke System.Dat
15ec0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
15ed0 6f 6d 6d 61 6e 64 20 45 78 65 63 75 74 65 20 5c  ommand Execute \
15ee0 0d 0a 20 20 20 20 20 20 24 73 71 6c 28 32 29 20  ..      $sql(2) 
15ef0 52 65 61 64 65 72 20 6e 75 6c 6c 20 31 5d 0d 0a  Reader null 1]..
15f00 0d 0a 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74  ..  list $result
15f10 28 31 29 20 24 72 65 73 75 6c 74 28 32 29 20 24  (1) $result(2) $
15f20 72 65 73 75 6c 74 28 33 29 20 24 72 65 73 75 6c  result(3) $resul
15f30 74 28 34 29 20 24 72 65 73 75 6c 74 28 35 29 20  t(4) $result(5) 
15f40 24 72 65 73 75 6c 74 28 36 29 20 5c 0d 0a 20 20  $result(6) \..  
15f50 20 20 20 20 24 72 65 73 75 6c 74 28 37 29 20 24      $result(7) $
15f60 72 65 73 75 6c 74 28 38 29 0d 0a 7d 20 2d 63 6c  result(8)..} -cl
15f70 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74  eanup {..  unset
15f80 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
15f90 75 6c 74 20 73 71 6c 0d 0a 7d 20 2d 63 6f 6e 73  ult sql..} -cons
15fa0 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
15fb0 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
15fc0 6e 6f 42 75 67 32 38 20 53 51 4c 69 74 65 20 53  noBug28 SQLite S
15fd0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
15fe0 65 7d 20 5c 0d 0a 2d 6d 61 74 63 68 20 72 65 67  e} \..-match reg
15ff0 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 5c 7b  exp -result {^\{
16000 5c 7d 20 31 20 53 79 73 74 65 6d 23 44 42 4e 75  \} 1 System#DBNu
16010 6c 6c 23 5c 64 2b 5c 0d 0a 53 79 73 74 65 6d 23  ll#\d+\..System#
16020 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69  Data#SQLite#SQLi
16030 74 65 44 61 74 61 52 65 61 64 65 72 23 5c 64 2b  teDataReader#\d+
16040 20 5c 7b 5c 7d 20 31 20 31 5c 0d 0a 53 79 73 74   \{\} 1 1\..Syst
16050 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 23 53  em#Data#SQLite#S
16060 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 23  QLiteDataReader#
16070 5c 64 2b 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \d+$}}....######
16080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
160a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
160b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
160c0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
160d0 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
160e0 31 2e 35 33 20 7b 42 69 6e 64 41 6c 6c 41 73 54  1.53 {BindAllAsT
160f0 65 78 74 20 77 2f 44 61 74 65 54 69 6d 65 7d 20  ext w/DateTime} 
16100 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
16110 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
16120 65 20 64 61 74 61 2d 31 2e 35 33 2e 64 62 5d 20  e data-1.53.db] 
16130 22 22 20 54 69 63 6b 73 20 55 74 63 20 42 69 6e  "" Ticks Utc Bin
16140 64 41 6c 6c 41 73 54 65 78 74 0d 0a 7d 20 2d 62  dAllAsText..} -b
16150 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65  ody {..  sql exe
16160 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45  cute $db "CREATE
16170 20 54 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a   TABLE t1(x);"..
16180 0d 0a 20 20 6c 69 73 74 20 5b 73 71 6c 20 65 78  ..  list [sql ex
16190 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
161a0 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
161b0 4c 55 45 53 28 3f 29 3b 22 20 5c 0d 0a 20 20 20  LUES(?);" \..   
161c0 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20     [list param1 
161d0 44 61 74 65 54 69 6d 65 20 5b 73 65 74 20 64 61  DateTime [set da
161e0 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69  teTime [object i
161f0 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 5c 0d  nvoke -create \.
16200 0a 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 20  .      DateTime 
16210 50 61 72 73 65 45 78 61 63 74 20 22 32 30 30 30  ParseExact "2000
16220 2d 30 32 2d 32 39 20 31 33 3a 35 39 3a 35 38 2e  -02-29 13:59:58.
16230 31 32 33 34 35 36 37 5a 22 20 5c 0d 0a 20 20 20  1234567Z" \..   
16240 20 20 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46     [getDateTimeF
16250 6f 72 6d 61 74 5d 20 6e 75 6c 6c 20 41 64 6a 75  ormat] null Adju
16260 73 74 54 6f 55 6e 69 76 65 72 73 61 6c 5d 5d 5d  stToUniversal]]]
16270 5d 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 5c  ] [sql execute \
16280 0d 0a 20 20 20 20 20 20 2d 65 78 65 63 75 74 65  ..      -execute
16290 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
162a0 6c 69 73 74 20 24 64 62 20 22 53 45 4c 45 43 54  list $db "SELECT
162b0 20 78 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 7d   x FROM t1;"]..}
162c0 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
162d0 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
162e0 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
162f0 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 65 54 69  ocomplain dateTi
16300 6d 65 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  me db fileName..
16310 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
16320 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
16330 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d  ject monoBug28 m
16340 6f 6e 6f 42 75 67 34 32 20 63 6f 6d 6d 61 6e 64  onoBug42 command
16350 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
16360 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
16370 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
16380 72 65 73 75 6c 74 20 7b 31 20 36 33 30 38 37 34  result {1 630874
16390 32 39 35 39 38 31 32 33 34 35 36 37 7d 7d 0d 0a  295981234567}}..
163a0 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
163b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
163f0 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
16400 73 74 20 64 61 74 61 2d 31 2e 35 34 20 7b 62 69  st data-1.54 {bi
16410 6e 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 61  nd function to a
16420 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 2d 73 65   connection} -se
16430 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
16440 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 35 34 2e  eName data-1.54.
16450 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  db..} -body {.. 
16460 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20   set id [object 
16470 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74  invoke Interpret
16480 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78  er.GetActive Nex
16490 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61  tId]..  set data
164a0 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  Source [file joi
164b0 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69  n [getDatabaseDi
164c0 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61  rectory] $fileNa
164d0 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c  me]....  set sql
164e0 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
164f0 20 4d 79 52 61 6e 64 6f 6d 28 29 3b 20 5c 0d 0a   MyRandom(); \..
16500 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
16510 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
16520 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
16530 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
16540 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
16550 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
16560 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
16570 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
16580 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  Lite;....    nam
16590 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
165a0 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
165b0 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20     public class 
165c0 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
165d0 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  teFunction..    
165e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 72 69    {..        pri
165f0 76 61 74 65 20 52 61 6e 64 6f 6d 20 72 61 6e 64  vate Random rand
16600 6f 6d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  om;....        /
16610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16650 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16660 20 20 70 75 62 6c 69 63 20 54 65 73 74 24 7b 69    public Test${i
16670 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  d}()..        {.
16680 0a 20 20 20 20 20 20 20 20 20 20 72 61 6e 64 6f  .          rando
16690 6d 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  m = new Random()
166a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
166b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
166c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
166d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
166e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
166f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
16700 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
16710 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  c override objec
16720 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20  t Invoke(..     
16730 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20       object\[\] 
16740 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
16750 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
16760 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
16770 61 6e 64 6f 6d 2e 4e 65 78 74 28 29 3b 0d 0a 20  andom.Next();.. 
16780 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16790 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
167a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
167e0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
167f0 61 74 69 63 20 6f 62 6a 65 63 74 20 44 6f 54 65  atic object DoTe
16800 73 74 28 62 6f 6f 6c 20 62 69 6e 64 46 75 6e 63  st(bool bindFunc
16810 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b  tion)..        {
16820 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
16830 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
16840 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
16850 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
16860 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
16870 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
16880 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
16890 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74  ;[getTestPropert
168a0 69 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20  ies]"))..       
168b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
168c0 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65    connection.Ope
168d0 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
168e0 20 20 20 20 69 66 20 28 62 69 6e 64 46 75 6e 63      if (bindFunc
168f0 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
16900 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16910 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42      connection.B
16920 69 6e 64 46 75 6e 63 74 69 6f 6e 28 6e 65 77 20  indFunction(new 
16930 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
16940 74 72 69 62 75 74 65 28 0d 0a 20 20 20 20 20 20  tribute(..      
16950 20 20 20 20 20 20 20 20 20 20 22 4d 79 52 61 6e            "MyRan
16960 64 6f 6d 22 2c 20 30 2c 20 46 75 6e 63 74 69 6f  dom", 0, Functio
16970 6e 54 79 70 65 2e 53 63 61 6c 61 72 29 2c 20 6e  nType.Scalar), n
16980 65 77 20 54 65 73 74 24 7b 69 64 7d 28 29 29 3b  ew Test${id}());
16990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
169a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
169b0 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
169c0 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65  and command = ne
169d0 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
169e0 22 24 7b 73 71 6c 7d 22 2c 0d 0a 20 20 20 20 20  "${sql}",..     
169f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
16a00 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
16a10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16a20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d        return com
16a30 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c  mand.ExecuteScal
16a40 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ar();..         
16a50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16a60 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
16a70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
16ac0 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
16ad0 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
16ae0 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
16af0 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
16b00 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
16b10 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
16b20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
16b30 66 61 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c  false true resul
16b40 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d  ts errors System
16b50 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
16b60 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
16b70 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
16b80 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
16b90 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
16ba0 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
16bb0 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
16bc0 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
16bd0 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
16be0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
16bf0 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
16c00 65 73 74 24 7b 69 64 7d 20 44 6f 54 65 73 74 20  est${id} DoTest 
16c10 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 20 72  false..      } r
16c20 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
16c30 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20  sult ""]}] \..  
16c40 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
16c50 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
16c60 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65  ptionMessage $re
16c70 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  sult] \..      [
16c80 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
16c90 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
16ca0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
16cb0 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
16cc0 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 44 6f  id}.Test${id} Do
16cd0 54 65 73 74 20 74 72 75 65 0d 0a 20 20 20 20 20  Test true..     
16ce0 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
16cf0 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5c  t result ""]}] \
16d00 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74  ..      [extract
16d10 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
16d20 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
16d30 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a 20 20 20   $result] \..   
16d40 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
16d50 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
16d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
16d70 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
16d80 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
16d90 7d 20 44 6f 54 65 73 74 20 66 61 6c 73 65 0d 0a  } DoTest false..
16da0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
16db0 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
16dc0 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  ]}] \..      [ex
16dd0 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53  tractSystemDataS
16de0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65  QLiteExceptionMe
16df0 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d 0d 0a  ssage $result]..
16e00 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
16e10 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
16e20 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
16e30 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
16e40 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
16e50 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
16e60 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
16e70 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
16e80 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
16e90 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
16ea0 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
16eb0 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
16ec0 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
16ed0 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68  QLite compileCSh
16ee0 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65  arp} -match rege
16ef0 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c  xp -result {^Ok\
16f00 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
16f10 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
16f20 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
16f30 5c 7d 20 31 20 5c 7b 53 51 4c 20 6c 6f 67 69 63  \} 1 \{SQL logic
16f40 20 65 72 72 6f 72 28 20 6f 72 5c 0d 0a 6d 69 73   error( or\..mis
16f50 73 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f 20  sing database)? 
16f60 2d 2d 20 6e 6f 20 73 75 63 68 20 66 75 6e 63 74  -- no such funct
16f70 69 6f 6e 3a 20 4d 79 52 61 6e 64 6f 6d 5c 7d 20  ion: MyRandom\} 
16f80 30 20 28 3f 3a 2d 29 3f 5c 64 2b 20 31 20 5c 7b  0 (?:-)?\d+ 1 \{
16f90 53 51 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f  SQL logic\..erro
16fa0 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  r( or missing da
16fb0 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f 20 73  tabase)? -- no s
16fc0 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 4d 79  uch function: My
16fd0 52 61 6e 64 6f 6d 5c 7d 24 7d 7d 0d 0a 0d 0a 23  Random\}$}}....#
16fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
17030 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
17040 64 61 74 61 2d 31 2e 35 35 20 7b 53 51 4c 69 74  data-1.55 {SQLit
17050 65 43 6f 6e 76 65 72 74 20 54 79 70 65 4e 61 6d  eConvert TypeNam
17060 65 54 6f 44 62 54 79 70 65 7d 20 2d 73 65 74 75  eToDbType} -setu
17070 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  p {..  unset -no
17080 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
17090 74 79 70 65 4e 61 6d 65 0d 0a 7d 20 2d 62 6f 64  typeName..} -bod
170a0 79 20 7b 0d 0a 20 20 66 6f 72 65 61 63 68 20 74  y {..  foreach t
170b0 79 70 65 4e 61 6d 65 20 5b 6c 69 73 74 20 5c 0d  ypeName [list \.
170c0 0a 20 20 20 20 20 20 42 49 47 49 4e 54 20 42 49  .      BIGINT BI
170d0 47 55 49 4e 54 20 42 49 4e 41 52 59 20 42 49 54  GUINT BINARY BIT
170e0 20 42 4c 4f 42 20 42 4f 4f 4c 20 42 4f 4f 4c 45   BLOB BOOL BOOLE
170f0 41 4e 20 43 48 41 52 20 43 4c 4f 42 20 43 4f 55  AN CHAR CLOB COU
17100 4e 54 45 52 20 43 55 52 52 45 4e 43 59 20 5c 0d  NTER CURRENCY \.
17110 0a 20 20 20 20 20 20 44 41 54 45 20 44 41 54 45  .      DATE DATE
17120 54 49 4d 45 20 44 45 43 49 4d 41 4c 20 44 4f 55  TIME DECIMAL DOU
17130 42 4c 45 20 46 4c 4f 41 54 20 47 45 4e 45 52 41  BLE FLOAT GENERA
17140 4c 20 47 55 49 44 20 49 44 45 4e 54 49 54 59 20  L GUID IDENTITY 
17150 49 4d 41 47 45 20 49 4e 54 20 49 4e 54 38 20 5c  IMAGE INT INT8 \
17160 0d 0a 20 20 20 20 20 20 49 4e 54 31 36 20 49 4e  ..      INT16 IN
17170 54 33 32 20 49 4e 54 36 34 20 49 4e 54 45 47 45  T32 INT64 INTEGE
17180 52 20 49 4e 54 45 47 45 52 38 20 49 4e 54 45 47  R INTEGER8 INTEG
17190 45 52 31 36 20 49 4e 54 45 47 45 52 33 32 20 49  ER16 INTEGER32 I
171a0 4e 54 45 47 45 52 36 34 20 5c 0d 0a 20 20 20 20  NTEGER64 \..    
171b0 20 20 4c 4f 47 49 43 41 4c 20 4c 4f 4e 47 20 4c    LOGICAL LONG L
171c0 4f 4e 47 43 48 41 52 20 4c 4f 4e 47 54 45 58 54  ONGCHAR LONGTEXT
171d0 20 4c 4f 4e 47 56 41 52 43 48 41 52 20 4d 45 4d   LONGVARCHAR MEM
171e0 4f 20 4d 4f 4e 45 59 20 4e 43 48 41 52 20 4e 4f  O MONEY NCHAR NO
171f0 54 45 20 4e 54 45 58 54 20 5c 0d 0a 20 20 20 20  TE NTEXT \..    
17200 20 20 4e 55 4d 42 45 52 20 4e 55 4d 45 52 49 43    NUMBER NUMERIC
17210 20 4e 56 41 52 43 48 41 52 20 4f 4c 45 4f 42 4a   NVARCHAR OLEOBJ
17220 45 43 54 20 52 41 57 20 52 45 41 4c 20 53 49 4e  ECT RAW REAL SIN
17230 47 4c 45 20 53 4d 41 4c 4c 44 41 54 45 20 53 4d  GLE SMALLDATE SM
17240 41 4c 4c 49 4e 54 20 5c 0d 0a 20 20 20 20 20 20  ALLINT \..      
17250 53 4d 41 4c 4c 55 49 4e 54 20 53 54 52 49 4e 47  SMALLUINT STRING
17260 20 54 45 58 54 20 54 49 4d 45 20 54 49 4d 45 53   TEXT TIME TIMES
17270 54 41 4d 50 20 54 49 4e 59 49 4e 54 20 54 49 4e  TAMP TINYINT TIN
17280 59 53 49 4e 54 20 55 49 4e 54 20 55 49 4e 54 38  YSINT UINT UINT8
17290 20 55 49 4e 54 31 36 20 5c 0d 0a 20 20 20 20 20   UINT16 \..     
172a0 20 55 49 4e 54 33 32 20 55 49 4e 54 36 34 20 55   UINT32 UINT64 U
172b0 4c 4f 4e 47 20 55 4e 49 51 55 45 49 44 45 4e 54  LONG UNIQUEIDENT
172c0 49 46 49 45 52 20 55 4e 53 49 47 4e 45 44 49 4e  IFIER UNSIGNEDIN
172d0 54 45 47 45 52 20 55 4e 53 49 47 4e 45 44 49 4e  TEGER UNSIGNEDIN
172e0 54 45 47 45 52 38 20 5c 0d 0a 20 20 20 20 20 20  TEGER8 \..      
172f0 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52 31  UNSIGNEDINTEGER1
17300 36 20 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45  6 UNSIGNEDINTEGE
17310 52 33 32 20 55 4e 53 49 47 4e 45 44 49 4e 54 45  R32 UNSIGNEDINTE
17320 47 45 52 36 34 20 56 41 52 42 49 4e 41 52 59 20  GER64 VARBINARY 
17330 56 41 52 43 48 41 52 20 5c 0d 0a 20 20 20 20 20  VARCHAR \..     
17340 20 56 41 52 43 48 41 52 32 20 59 45 53 4e 4f 5d   VARCHAR2 YESNO]
17350 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
17360 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 74 79  result [list $ty
17370 70 65 4e 61 6d 65 20 5b 6f 62 6a 65 63 74 20 69  peName [object i
17380 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
17390 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..     
173a0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
173b0 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76  QLite.SQLiteConv
173c0 65 72 74 20 54 79 70 65 4e 61 6d 65 54 6f 44 62  ert TypeNameToDb
173d0 54 79 70 65 20 6e 75 6c 6c 20 24 74 79 70 65 4e  Type null $typeN
173e0 61 6d 65 20 4e 6f 6e 65 5d 5d 0d 0a 20 20 7d 0d  ame None]]..  }.
173f0 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
17400 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75   -cleanup {..  u
17410 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
17420 20 72 65 73 75 6c 74 20 74 79 70 65 4e 61 6d 65   result typeName
17430 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
17440 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
17450 6f 62 6a 65 63 74 20 53 79 73 74 65 6d 2e 44 61  object System.Da
17460 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
17470 6c 74 20 7b 7b 42 49 47 49 4e 54 5c 0d 0a 49 6e  lt {{BIGINT\..In
17480 74 36 34 7d 20 7b 42 49 47 55 49 4e 54 20 55 49  t64} {BIGUINT UI
17490 6e 74 36 34 7d 20 7b 42 49 4e 41 52 59 20 42 69  nt64} {BINARY Bi
174a0 6e 61 72 79 7d 20 7b 42 49 54 20 42 6f 6f 6c 65  nary} {BIT Boole
174b0 61 6e 7d 20 7b 42 4c 4f 42 20 42 69 6e 61 72 79  an} {BLOB Binary
174c0 7d 20 7b 42 4f 4f 4c 5c 0d 0a 42 6f 6f 6c 65 61  } {BOOL\..Boolea
174d0 6e 7d 20 7b 42 4f 4f 4c 45 41 4e 20 42 6f 6f 6c  n} {BOOLEAN Bool
174e0 65 61 6e 7d 20 7b 43 48 41 52 20 41 6e 73 69 53  ean} {CHAR AnsiS
174f0 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67 74 68  tringFixedLength
17500 7d 20 7b 43 4c 4f 42 20 53 74 72 69 6e 67 7d 20  } {CLOB String} 
17510 7b 43 4f 55 4e 54 45 52 5c 0d 0a 49 6e 74 36 34  {COUNTER\..Int64
17520 7d 20 7b 43 55 52 52 45 4e 43 59 20 44 65 63 69  } {CURRENCY Deci
17530 6d 61 6c 7d 20 7b 44 41 54 45 20 44 61 74 65 54  mal} {DATE DateT
17540 69 6d 65 7d 20 7b 44 41 54 45 54 49 4d 45 20 44  ime} {DATETIME D
17550 61 74 65 54 69 6d 65 7d 20 7b 44 45 43 49 4d 41  ateTime} {DECIMA
17560 4c 20 44 65 63 69 6d 61 6c 7d 5c 0d 0a 7b 44 4f  L Decimal}\..{DO
17570 55 42 4c 45 20 44 6f 75 62 6c 65 7d 20 7b 46 4c  UBLE Double} {FL
17580 4f 41 54 20 44 6f 75 62 6c 65 7d 20 7b 47 45 4e  OAT Double} {GEN
17590 45 52 41 4c 20 42 69 6e 61 72 79 7d 20 7b 47 55  ERAL Binary} {GU
175a0 49 44 20 47 75 69 64 7d 20 7b 49 44 45 4e 54 49  ID Guid} {IDENTI
175b0 54 59 20 49 6e 74 36 34 7d 5c 0d 0a 7b 49 4d 41  TY Int64}\..{IMA
175c0 47 45 20 42 69 6e 61 72 79 7d 20 7b 49 4e 54 20  GE Binary} {INT 
175d0 49 6e 74 33 32 7d 20 7b 49 4e 54 38 20 53 42 79  Int32} {INT8 SBy
175e0 74 65 7d 20 7b 49 4e 54 31 36 20 49 6e 74 31 36  te} {INT16 Int16
175f0 7d 20 7b 49 4e 54 33 32 20 49 6e 74 33 32 7d 20  } {INT32 Int32} 
17600 7b 49 4e 54 36 34 5c 0d 0a 49 6e 74 36 34 7d 20  {INT64\..Int64} 
17610 7b 49 4e 54 45 47 45 52 20 49 6e 74 36 34 7d 20  {INTEGER Int64} 
17620 7b 49 4e 54 45 47 45 52 38 20 53 42 79 74 65 7d  {INTEGER8 SByte}
17630 20 7b 49 4e 54 45 47 45 52 31 36 20 49 6e 74 31   {INTEGER16 Int1
17640 36 7d 20 7b 49 4e 54 45 47 45 52 33 32 20 49 6e  6} {INTEGER32 In
17650 74 33 32 7d 5c 0d 0a 7b 49 4e 54 45 47 45 52 36  t32}\..{INTEGER6
17660 34 20 49 6e 74 36 34 7d 20 7b 4c 4f 47 49 43 41  4 Int64} {LOGICA
17670 4c 20 42 6f 6f 6c 65 61 6e 7d 20 7b 4c 4f 4e 47  L Boolean} {LONG
17680 20 49 6e 74 36 34 7d 20 7b 4c 4f 4e 47 43 48 41   Int64} {LONGCHA
17690 52 20 53 74 72 69 6e 67 7d 20 7b 4c 4f 4e 47 54  R String} {LONGT
176a0 45 58 54 5c 0d 0a 53 74 72 69 6e 67 7d 20 7b 4c  EXT\..String} {L
176b0 4f 4e 47 56 41 52 43 48 41 52 20 53 74 72 69 6e  ONGVARCHAR Strin
176c0 67 7d 20 7b 4d 45 4d 4f 20 53 74 72 69 6e 67 7d  g} {MEMO String}
176d0 20 7b 4d 4f 4e 45 59 20 44 65 63 69 6d 61 6c 7d   {MONEY Decimal}
176e0 20 7b 4e 43 48 41 52 5c 0d 0a 53 74 72 69 6e 67   {NCHAR\..String
176f0 46 69 78 65 64 4c 65 6e 67 74 68 7d 20 7b 4e 4f  FixedLength} {NO
17700 54 45 20 53 74 72 69 6e 67 7d 20 7b 4e 54 45 58  TE String} {NTEX
17710 54 20 53 74 72 69 6e 67 7d 20 7b 4e 55 4d 42 45  T String} {NUMBE
17720 52 20 44 65 63 69 6d 61 6c 7d 20 7b 4e 55 4d 45  R Decimal} {NUME
17730 52 49 43 5c 0d 0a 44 65 63 69 6d 61 6c 7d 20 7b  RIC\..Decimal} {
17740 4e 56 41 52 43 48 41 52 20 53 74 72 69 6e 67 7d  NVARCHAR String}
17750 20 7b 4f 4c 45 4f 42 4a 45 43 54 20 42 69 6e 61   {OLEOBJECT Bina
17760 72 79 7d 20 7b 52 41 57 20 42 69 6e 61 72 79 7d  ry} {RAW Binary}
17770 20 7b 52 45 41 4c 20 44 6f 75 62 6c 65 7d 5c 0d   {REAL Double}\.
17780 0a 7b 53 49 4e 47 4c 45 20 53 69 6e 67 6c 65 7d  .{SINGLE Single}
17790 20 7b 53 4d 41 4c 4c 44 41 54 45 20 44 61 74 65   {SMALLDATE Date
177a0 54 69 6d 65 7d 20 7b 53 4d 41 4c 4c 49 4e 54 20  Time} {SMALLINT 
177b0 49 6e 74 31 36 7d 20 7b 53 4d 41 4c 4c 55 49 4e  Int16} {SMALLUIN
177c0 54 20 55 49 6e 74 31 36 7d 5c 0d 0a 7b 53 54 52  T UInt16}\..{STR
177d0 49 4e 47 20 53 74 72 69 6e 67 7d 20 7b 54 45 58  ING String} {TEX
177e0 54 20 53 74 72 69 6e 67 7d 20 7b 54 49 4d 45 20  T String} {TIME 
177f0 44 61 74 65 54 69 6d 65 7d 20 7b 54 49 4d 45 53  DateTime} {TIMES
17800 54 41 4d 50 20 44 61 74 65 54 69 6d 65 7d 20 7b  TAMP DateTime} {
17810 54 49 4e 59 49 4e 54 5c 0d 0a 42 79 74 65 7d 20  TINYINT\..Byte} 
17820 7b 54 49 4e 59 53 49 4e 54 20 53 42 79 74 65 7d  {TINYSINT SByte}
17830 20 7b 55 49 4e 54 20 55 49 6e 74 33 32 7d 20 7b   {UINT UInt32} {
17840 55 49 4e 54 38 20 42 79 74 65 7d 20 7b 55 49 4e  UINT8 Byte} {UIN
17850 54 31 36 20 55 49 6e 74 31 36 7d 20 7b 55 49 4e  T16 UInt16} {UIN
17860 54 33 32 5c 0d 0a 55 49 6e 74 33 32 7d 20 7b 55  T32\..UInt32} {U
17870 49 4e 54 36 34 20 55 49 6e 74 36 34 7d 20 7b 55  INT64 UInt64} {U
17880 4c 4f 4e 47 20 55 49 6e 74 36 34 7d 20 7b 55 4e  LONG UInt64} {UN
17890 49 51 55 45 49 44 45 4e 54 49 46 49 45 52 20 47  IQUEIDENTIFIER G
178a0 75 69 64 7d 20 7b 55 4e 53 49 47 4e 45 44 49 4e  uid} {UNSIGNEDIN
178b0 54 45 47 45 52 5c 0d 0a 55 49 6e 74 36 34 7d 20  TEGER\..UInt64} 
178c0 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52  {UNSIGNEDINTEGER
178d0 38 20 42 79 74 65 7d 20 7b 55 4e 53 49 47 4e 45  8 Byte} {UNSIGNE
178e0 44 49 4e 54 45 47 45 52 31 36 20 55 49 6e 74 31  DINTEGER16 UInt1
178f0 36 7d 20 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45  6} {UNSIGNEDINTE
17900 47 45 52 33 32 5c 0d 0a 55 49 6e 74 33 32 7d 20  GER32\..UInt32} 
17910 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52  {UNSIGNEDINTEGER
17920 36 34 20 55 49 6e 74 36 34 7d 20 7b 56 41 52 42  64 UInt64} {VARB
17930 49 4e 41 52 59 20 42 69 6e 61 72 79 7d 20 7b 56  INARY Binary} {V
17940 41 52 43 48 41 52 20 41 6e 73 69 53 74 72 69 6e  ARCHAR AnsiStrin
17950 67 7d 5c 0d 0a 7b 56 41 52 43 48 41 52 32 20 41  g}\..{VARCHAR2 A
17960 6e 73 69 53 74 72 69 6e 67 7d 20 7b 59 45 53 4e  nsiString} {YESN
17970 4f 20 42 6f 6f 6c 65 61 6e 7d 7d 7d 0d 0a 0d 0a  O Boolean}}}....
17980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
179d0 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
179e0 20 64 61 74 61 2d 31 2e 35 36 20 7b 74 6f 74 79   data-1.56 {toty
179f0 70 65 20 65 78 74 65 6e 73 69 6f 6e 7d 20 2d 73  pe extension} -s
17a00 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
17a10 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
17a20 64 61 74 61 2d 31 2e 35 36 2e 64 62 5d 0d 0a 7d  data-1.56.db]..}
17a30 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
17a40 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
17a50 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20  bConnection]..  
17a60 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
17a70 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69  ]....  $connecti
17a80 6f 6e 20 45 6e 61 62 6c 65 45 78 74 65 6e 73 69  on EnableExtensi
17a90 6f 6e 73 20 74 72 75 65 0d 0a 0d 0a 20 20 24 63  ons true....  $c
17aa0 6f 6e 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45 78  onnection LoadEx
17ab0 74 65 6e 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  tension \..     
17ac0 20 5b 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69   [getCoreExtensi
17ad0 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  onBinaryFileName
17ae0 20 6e 75 6c 6c 5d 20 73 71 6c 69 74 65 33 5f 74   null] sqlite3_t
17af0 6f 74 79 70 65 5f 69 6e 69 74 0d 0a 0d 0a 20 20  otype_init....  
17b00 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
17b10 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
17b20 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
17b30 22 53 45 4c 45 43 54 20 74 6f 69 6e 74 65 67 65  "SELECT tointege
17b40 72 28 27 31 27 29 3b 22 5d 0d 0a 20 20 6c 61 70  r('1');"]..  lap
17b50 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
17b60 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
17b70 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45  e scalar $db "SE
17b80 4c 45 43 54 20 74 6f 69 6e 74 65 67 65 72 28 27  LECT tointeger('
17b90 31 78 27 29 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  1x');"]..  lappe
17ba0 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
17bb0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
17bc0 73 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45  scalar $db "SELE
17bd0 43 54 20 74 6f 72 65 61 6c 28 27 31 2e 30 31 27  CT toreal('1.01'
17be0 29 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  );"]..  lappend 
17bf0 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
17c00 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
17c10 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20  lar $db "SELECT 
17c20 74 6f 72 65 61 6c 28 27 31 2e 30 78 27 29 3b 22  toreal('1.0x');"
17c30 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
17c40 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
17c50 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
17c60 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ion....  unset -
17c70 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
17c80 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a  t connection....
17c90 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
17ca0 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
17cb0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20   -nocomplain db 
17cc0 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
17cd0 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
17ce0 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
17cf0 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
17d00 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
17d10 41 20 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  A SQLite\..defin
17d20 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
17d30 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
17d40 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45  EROP_TOTYPE_EXTE
17d50 4e 53 49 4f 4e 5c 0d 0a 53 79 73 74 65 6d 2e 44  NSION\..System.D
17d60 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74  ata.SQLite SQLit
17d70 65 49 6e 74 65 72 6f 70 7d 20 2d 72 65 73 75 6c  eInterop} -resul
17d80 74 20 7b 31 20 7b 7d 20 31 2e 30 31 20 7b 7d 7d  t {1 {} 1.01 {}}
17d90 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
17da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17de0 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
17df0 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 35 37 20  {test data-1.57 
17e00 7b 72 65 67 65 78 70 20 65 78 74 65 6e 73 69 6f  {regexp extensio
17e10 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  n} -setup {..  s
17e20 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
17e30 4e 61 6d 65 20 64 61 74 61 2d 31 2e 35 37 2e 64  Name data-1.57.d
17e40 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
17e50 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
17e60 69 6e 20 70 61 74 74 65 72 6e 20 72 65 73 75 6c  in pattern resul
17e70 74 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65  t....  set conne
17e80 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
17e90 65 63 74 69 6f 6e 5d 0d 0a 20 20 73 65 74 20 72  ection]..  set r
17ea0 65 73 75 6c 74 28 31 29 20 5b 6c 69 73 74 5d 0d  esult(1) [list].
17eb0 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  ...  $connection
17ec0 20 45 6e 61 62 6c 65 45 78 74 65 6e 73 69 6f 6e   EnableExtension
17ed0 73 20 74 72 75 65 0d 0a 0d 0a 20 20 24 63 6f 6e  s true....  $con
17ee0 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45 78 74 65  nection LoadExte
17ef0 6e 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 5b  nsion \..      [
17f00 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69 6f 6e  getCoreExtension
17f10 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 6e  BinaryFileName n
17f20 75 6c 6c 5d 20 73 71 6c 69 74 65 33 5f 72 65 67  ull] sqlite3_reg
17f30 65 78 70 5f 69 6e 69 74 0d 0a 0d 0a 20 20 73 65  exp_init....  se
17f40 74 20 70 61 74 74 65 72 6e 28 31 29 20 7b 5e 5c  t pattern(1) {^\
17f50 64 2b 20 5b 41 2d 5a 5d 7b 31 2c 33 7d 24 7d 3b  d+ [A-Z]{1,3}$};
17f60 20 23 20 76 61 6c 69 64 0d 0a 20 20 73 65 74 20   # valid..  set 
17f70 70 61 74 74 65 72 6e 28 32 29 20 7b 5e 5c 64 2b  pattern(2) {^\d+
17f80 20 5b 43 5d 28 24 7d 3b 20 23 20 69 6e 76 61 6c   [C]($}; # inval
17f90 69 64 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  id....  lappend 
17fa0 72 65 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68  result(1) [catch
17fb0 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63   {..    sql exec
17fc0 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
17fd0 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20  lar $db "SELECT 
17fe0 52 45 47 45 58 50 28 27 24 70 61 74 74 65 72 6e  REGEXP('$pattern
17ff0 28 31 29 27 2c 20 27 31 20 41 42 27 29 3b 22 0d  (1)', '1 AB');".
18000 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29 5d 20  .  } result(2)] 
18010 24 72 65 73 75 6c 74 28 32 29 0d 0a 0d 0a 20 20  $result(2)....  
18020 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 28 31  lappend result(1
18030 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ) [catch {..    
18040 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
18050 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
18060 22 53 45 4c 45 43 54 20 52 45 47 45 58 50 28 27  "SELECT REGEXP('
18070 24 70 61 74 74 65 72 6e 28 32 29 27 2c 20 27 31  $pattern(2)', '1
18080 20 41 42 27 29 3b 22 0d 0a 20 20 7d 20 72 65 73   AB');"..  } res
18090 75 6c 74 28 32 29 5d 20 5b 73 74 72 69 6e 67 20  ult(2)] [string 
180a0 74 72 69 6d 20 5b 6c 69 6e 64 65 78 20 5b 73 70  trim [lindex [sp
180b0 6c 69 74 20 24 72 65 73 75 6c 74 28 32 29 20 5c  lit $result(2) \
180c0 6e 5d 20 31 5d 5d 0d 0a 0d 0a 20 20 6c 61 70 70  n] 1]]....  lapp
180d0 65 6e 64 20 72 65 73 75 6c 74 28 31 29 20 5b 63  end result(1) [c
180e0 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20  atch {..    sql 
180f0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
18100 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c   scalar $db "SEL
18110 45 43 54 20 27 31 20 41 42 27 20 52 45 47 45 58  ECT '1 AB' REGEX
18120 50 20 27 24 70 61 74 74 65 72 6e 28 31 29 27 3b  P '$pattern(1)';
18130 22 0d 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29  "..  } result(2)
18140 5d 20 24 72 65 73 75 6c 74 28 32 29 0d 0a 0d 0a  ] $result(2)....
18150 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
18160 28 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  (1) [catch {..  
18170 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65    sql execute -e
18180 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
18190 62 20 22 53 45 4c 45 43 54 20 27 31 20 41 42 27  b "SELECT '1 AB'
181a0 20 52 45 47 45 58 50 20 27 24 70 61 74 74 65 72   REGEXP '$patter
181b0 6e 28 32 29 27 3b 22 0d 0a 20 20 7d 20 72 65 73  n(2)';"..  } res
181c0 75 6c 74 28 32 29 5d 20 5b 73 74 72 69 6e 67 20  ult(2)] [string 
181d0 74 72 69 6d 20 5b 6c 69 6e 64 65 78 20 5b 73 70  trim [lindex [sp
181e0 6c 69 74 20 24 72 65 73 75 6c 74 28 32 29 20 5c  lit $result(2) \
181f0 6e 5d 20 31 5d 5d 0d 0a 0d 0a 20 20 6c 61 70 70  n] 1]]....  lapp
18200 65 6e 64 20 72 65 73 75 6c 74 28 31 29 20 5b 63  end result(1) [c
18210 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20  atch {..    sql 
18220 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
18230 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c   scalar $db "SEL
18240 45 43 54 20 52 45 47 45 58 50 28 27 24 70 61 74  ECT REGEXP('$pat
18250 74 65 72 6e 28 31 29 27 2c 20 27 32 27 29 3b 22  tern(1)', '2');"
18260 0d 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29 5d  ..  } result(2)]
18270 20 24 72 65 73 75 6c 74 28 32 29 0d 0a 0d 0a 20   $result(2).... 
18280 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 28   lappend result(
18290 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  1) [catch {..   
182a0 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78   sql execute -ex
182b0 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
182c0 20 22 53 45 4c 45 43 54 20 52 45 47 45 58 50 28   "SELECT REGEXP(
182d0 27 24 70 61 74 74 65 72 6e 28 32 29 27 2c 20 27  '$pattern(2)', '
182e0 32 27 29 3b 22 0d 0a 20 20 7d 20 72 65 73 75 6c  2');"..  } resul
182f0 74 28 32 29 5d 20 5b 73 74 72 69 6e 67 20 74 72  t(2)] [string tr
18300 69 6d 20 5b 6c 69 6e 64 65 78 20 5b 73 70 6c 69  im [lindex [spli
18310 74 20 24 72 65 73 75 6c 74 28 32 29 20 5c 6e 5d  t $result(2) \n]
18320 20 31 5d 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e   1]]....  lappen
18330 64 20 72 65 73 75 6c 74 28 31 29 20 5b 63 61 74  d result(1) [cat
18340 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78  ch {..    sql ex
18350 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
18360 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43  calar $db "SELEC
18370 54 20 27 32 27 20 52 45 47 45 58 50 20 27 24 70  T '2' REGEXP '$p
18380 61 74 74 65 72 6e 28 31 29 27 3b 22 0d 0a 20 20  attern(1)';"..  
18390 7d 20 72 65 73 75 6c 74 28 32 29 5d 20 24 72 65  } result(2)] $re
183a0 73 75 6c 74 28 32 29 0d 0a 0d 0a 20 20 6c 61 70  sult(2)....  lap
183b0 70 65 6e 64 20 72 65 73 75 6c 74 28 31 29 20 5b  pend result(1) [
183c0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c  catch {..    sql
183d0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
183e0 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45  e scalar $db "SE
183f0 4c 45 43 54 20 27 32 27 20 52 45 47 45 58 50 20  LECT '2' REGEXP 
18400 27 24 70 61 74 74 65 72 6e 28 32 29 27 3b 22 0d  '$pattern(2)';".
18410 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29 5d 20  .  } result(2)] 
18420 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69  [string trim [li
18430 6e 64 65 78 20 5b 73 70 6c 69 74 20 24 72 65 73  ndex [split $res
18440 75 6c 74 28 32 29 20 5c 6e 5d 20 31 5d 5d 0d 0a  ult(2) \n] 1]]..
18450 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 31  ..  set result(1
18460 29 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  )..} -cleanup {.
18470 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
18480 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ion....  unset -
18490 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 61 74 74 65  nocomplain patte
184a0 72 6e 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63  rn result connec
184b0 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  tion....  cleanu
184c0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
184d0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
184e0 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65  lain db fileName
184f0 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
18500 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
18510 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
18520 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
18530 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
18540 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
18550 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
18560 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 52 45 47  Lite.INTEROP_REG
18570 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 5c 0d 0a  EXP_EXTENSION\..
18580 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
18590 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  te SQLiteInterop
185a0 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 31 20 31  } -result {0 1 1
185b0 20 7b 75 6e 6d 61 74 63 68 65 64 20 27 28 27 7d   {unmatched '('}
185c0 20 30 20 31 20 31 5c 0d 0a 7b 75 6e 6d 61 74 63   0 1 1\..{unmatc
185d0 68 65 64 20 27 28 27 7d 20 30 20 30 20 31 20 7b  hed '('} 0 0 1 {
185e0 75 6e 6d 61 74 63 68 65 64 20 27 28 27 7d 20 30  unmatched '('} 0
185f0 20 30 20 31 20 7b 75 6e 6d 61 74 63 68 65 64 20   0 1 {unmatched 
18600 27 28 27 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  '('}}}....######
18610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18650 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 65 70  #########....rep
18660 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63  ortSQLiteResourc
18670 65 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  es $test_channel
18680 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
18690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186d0 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
186e0 74 65 73 74 20 64 61 74 61 2d 31 2e 35 38 20 7b  test data-1.58 {
186f0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
18700 2e 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 20 6d  .ReleaseMemory m
18710 65 74 68 6f 64 7d 20 2d 73 65 74 75 70 20 7b 0d  ethod} -setup {.
18720 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
18730 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
18740 35 38 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  58.db]..} -body 
18750 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  {..  set result 
18760 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 65 74 20  [list]....  set 
18770 6e 46 72 65 65 20 30 3b 20 73 65 74 20 72 65 73  nFree 0; set res
18780 65 74 4f 6b 20 66 61 6c 73 65 3b 20 73 65 74 20  etOk false; set 
18790 6e 4c 61 72 67 65 73 74 20 30 0d 0a 20 20 73 65  nLargest 0..  se
187a0 74 20 63 6f 64 65 20 5b 6f 62 6a 65 63 74 20 69  t code [object i
187b0 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 53  nvoke \..      S
187c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
187d0 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
187e0 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  on ReleaseMemory
187f0 20 5c 0d 0a 20 20 20 20 20 20 2d 31 20 74 72 75   \..      -1 tru
18800 65 20 74 72 75 65 20 6e 46 72 65 65 20 72 65 73  e true nFree res
18810 65 74 4f 6b 20 6e 4c 61 72 67 65 73 74 5d 0d 0a  etOk nLargest]..
18820 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
18830 6c 74 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  lt [list $code $
18840 6e 46 72 65 65 20 24 72 65 73 65 74 4f 6b 20 24  nFree $resetOk $
18850 6e 4c 61 72 67 65 73 74 5d 0d 0a 0d 0a 20 20 73  nLargest]....  s
18860 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
18870 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
18880 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63  x);"..  sql exec
18890 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
188a0 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
188b0 45 53 28 52 41 4e 44 4f 4d 42 4c 4f 42 28 31 30  ES(RANDOMBLOB(10
188c0 34 38 35 37 36 29 29 3b 22 0d 0a 0d 0a 20 20 73  48576));"....  s
188d0 65 74 20 6e 46 72 65 65 20 30 3b 20 73 65 74 20  et nFree 0; set 
188e0 72 65 73 65 74 4f 6b 20 66 61 6c 73 65 3b 20 73  resetOk false; s
188f0 65 74 20 6e 4c 61 72 67 65 73 74 20 30 0d 0a 20  et nLargest 0.. 
18900 20 73 65 74 20 63 6f 64 65 20 5b 6f 62 6a 65 63   set code [objec
18910 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20  t invoke \..    
18920 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
18930 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
18940 63 74 69 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d  ction ReleaseMem
18950 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 2d 31 20  ory \..      -1 
18960 74 72 75 65 20 74 72 75 65 20 6e 46 72 65 65 20  true true nFree 
18970 72 65 73 65 74 4f 6b 20 6e 4c 61 72 67 65 73 74  resetOk nLargest
18980 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65  ]....  tputs $te
18990 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
189a0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
189b0 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 72 65 6c  "---- memory rel
189c0 65 61 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e  eased by SQLite.
189d0 2e 2e 20 22 20 24 6e 46 72 65 65 20 22 20 62 79  .. " $nFree " by
189e0 74 65 73 5c 6e 22 5d 0d 0a 0d 0a 20 20 6c 61 70  tes\n"]....  lap
189f0 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73  pend result [lis
18a00 74 20 24 63 6f 64 65 20 24 6e 46 72 65 65 20 24  t $code $nFree $
18a10 72 65 73 65 74 4f 6b 20 24 6e 4c 61 72 67 65 73  resetOk $nLarges
18a20 74 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  t]....  cleanupD
18a30 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 63  b $fileName..  c
18a40 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
18a50 65 63 74 6f 72 69 65 73 20 24 74 65 73 74 5f 63  ectories $test_c
18a60 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20  hannel true.... 
18a70 20 73 65 74 20 6e 46 72 65 65 20 30 3b 20 73 65   set nFree 0; se
18a80 74 20 72 65 73 65 74 4f 6b 20 66 61 6c 73 65 3b  t resetOk false;
18a90 20 73 65 74 20 6e 4c 61 72 67 65 73 74 20 30 0d   set nLargest 0.
18aa0 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 6f 62 6a  .  set code [obj
18ab0 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20  ect invoke \..  
18ac0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
18ad0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
18ae0 6e 65 63 74 69 6f 6e 20 52 65 6c 65 61 73 65 4d  nection ReleaseM
18af0 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 2d  emory \..      -
18b00 31 20 74 72 75 65 20 74 72 75 65 20 6e 46 72 65  1 true true nFre
18b10 65 20 72 65 73 65 74 4f 6b 20 6e 4c 61 72 67 65  e resetOk nLarge
18b20 73 74 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24  st]....  tputs $
18b30 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
18b40 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
18b50 20 20 22 2d 2d 2d 2d 20 6c 61 72 67 65 73 74 20    "---- largest 
18b60 66 72 65 65 20 53 51 4c 69 74 65 20 68 65 61 70  free SQLite heap
18b70 20 62 6c 6f 63 6b 2e 2e 2e 20 22 20 24 6e 4c 61   block... " $nLa
18b80 72 67 65 73 74 20 22 20 62 79 74 65 73 5c 6e 22  rgest " bytes\n"
18b90 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
18ba0 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 63 6f 64  esult [list $cod
18bb0 65 20 24 6e 46 72 65 65 20 24 72 65 73 65 74 4f  e $nFree $resetO
18bc0 6b 20 24 6e 4c 61 72 67 65 73 74 5d 0d 0a 7d 20  k $nLargest]..} 
18bd0 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
18be0 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
18bf0 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
18c00 63 6f 6d 70 6c 61 69 6e 20 6e 4c 61 72 67 65 73  complain nLarges
18c10 74 20 72 65 73 65 74 4f 6b 20 6e 46 72 65 65 20  t resetOk nFree 
18c20 63 6f 64 65 20 72 65 73 75 6c 74 20 64 62 20 66  code result db f
18c30 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
18c40 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
18c50 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 77 69  ommand.object wi
18c60 6e 64 6f 77 73 20 6d 6f 6e 6f 42 75 67 32 38 20  ndows monoBug28 
18c70 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
18c80 69 6c 65 2e 44 41 54 41 5c 0d 0a 53 51 4c 69 74  ile.DATA\..SQLit
18c90 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
18ca0 4c 69 74 65 20 62 75 69 6c 64 43 6f 6e 66 69 67  Lite buildConfig
18cb0 75 72 61 74 69 6f 6e 2e 52 65 6c 65 61 73 65 7d  uration.Release}
18cc0 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
18cd0 72 65 73 75 6c 74 20 5c 0d 0a 7b 5e 5c 7b 42 75  result \..{^\{Bu
18ce0 73 79 20 30 20 46 61 6c 73 65 20 30 5c 7d 20 5c  sy 0 False 0\} \
18cf0 7b 42 75 73 79 20 5c 64 2b 20 46 61 6c 73 65 20  {Busy \d+ False 
18d00 30 5c 7d 20 5c 7b 4f 6b 20 30 20 54 72 75 65 20  0\} \{Ok 0 True 
18d10 5c 64 2b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23  \d+\}$}}....####
18d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18d60 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
18d70 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
18d80 61 2d 31 2e 35 39 20 7b 70 65 72 63 65 6e 74 69  a-1.59 {percenti
18d90 6c 65 20 65 78 74 65 6e 73 69 6f 6e 7d 20 2d 73  le extension} -s
18da0 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
18db0 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
18dc0 64 61 74 61 2d 31 2e 35 39 2e 64 62 5d 0d 0a 7d  data-1.59.db]..}
18dd0 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
18de0 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
18df0 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20  bConnection]..  
18e00 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
18e10 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69  ]....  $connecti
18e20 6f 6e 20 45 6e 61 62 6c 65 45 78 74 65 6e 73 69  on EnableExtensi
18e30 6f 6e 73 20 74 72 75 65 0d 0a 0d 0a 20 20 24 63  ons true....  $c
18e40 6f 6e 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45 78  onnection LoadEx
18e50 74 65 6e 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  tension \..     
18e60 20 5b 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69   [getCoreExtensi
18e70 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  onBinaryFileName
18e80 20 6e 75 6c 6c 5d 20 73 71 6c 69 74 65 33 5f 70   null] sqlite3_p
18e90 65 72 63 65 6e 74 69 6c 65 5f 69 6e 69 74 0d 0a  ercentile_init..
18ea0 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
18eb0 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
18ec0 24 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c  $db "CREATE TABL
18ed0 45 20 74 31 28 78 29 3b 22 5d 0d 0a 20 20 6c 61  E t1(x);"]..  la
18ee0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
18ef0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
18f00 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
18f10 4c 55 45 53 28 31 29 2c 28 32 29 2c 28 33 29 2c  LUES(1),(2),(3),
18f20 28 34 29 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  (4);"]..  lappen
18f30 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
18f40 65 63 75 74 65 20 24 64 62 20 22 53 45 4c 45 43  ecute $db "SELEC
18f50 54 20 70 65 72 63 65 6e 74 69 6c 65 28 78 2c 32  T percentile(x,2
18f60 35 29 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d  5) FROM t1;"]...
18f70 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
18f80 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
18f90 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
18fa0 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c  db \..      "SEL
18fb0 45 43 54 20 70 65 72 63 65 6e 74 69 6c 65 28 78  ECT percentile(x
18fc0 2c 32 35 29 20 46 52 4f 4d 20 74 31 3b 22 5d 0d  ,25) FROM t1;"].
18fd0 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d  ...  set result.
18fe0 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
18ff0 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f   freeDbConnectio
19000 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  n....  unset -no
19010 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
19020 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  connection....  
19030 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
19040 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
19050 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69  nocomplain db fi
19060 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
19070 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
19080 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
19090 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
190a0 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
190b0 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43  SQLite\..defineC
190c0 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
190d0 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
190e0 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58  OP_PERCENTILE_EX
190f0 54 45 4e 53 49 4f 4e 5c 0d 0a 53 79 73 74 65 6d  TENSION\..System
19100 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
19110 69 74 65 49 6e 74 65 72 6f 70 7d 20 2d 72 65 73  iteInterop} -res
19120 75 6c 74 20 7b 30 20 34 20 2d 31 20 31 2e 37 35  ult {0 4 -1 1.75
19130 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
19140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19180 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
19190 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36 30   {test data-1.60
191a0 20 7b 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e   {per-connection
191b0 20 74 79 70 65 20 6d 61 70 70 69 6e 67 73 7d 20   type mappings} 
191c0 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
191d0 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
191e0 65 20 64 61 74 61 2d 31 2e 36 30 2e 64 62 5d 20  e data-1.60.db] 
191f0 22 22 20 22 22 20 22 22 20 55 73 65 43 6f 6e 6e  "" "" "" UseConn
19200 65 63 74 69 6f 6e 54 79 70 65 73 0d 0a 7d 20 2d  ectionTypes..} -
19210 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f  body {..  set co
19220 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
19230 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 73 65  onnection]..  se
19240 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
19250 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
19260 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
19270 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 43   $db \..      "C
19280 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
19290 20 44 41 54 45 2c 20 79 20 4d 59 44 41 54 45 29   DATE, y MYDATE)
192a0 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 64 61 74  ;"]....  set dat
192b0 65 54 69 6d 65 20 5b 63 6c 6f 63 6b 20 66 6f 72  eTime [clock for
192c0 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 63 61 6e 20  mat [clock scan 
192d0 22 32 30 31 34 2d 30 32 2d 30 31 20 31 32 3a 33  "2014-02-01 12:3
192e0 34 3a 35 36 5a 22 5d 20 5c 0d 0a 20 20 20 20 20  4:56Z"] \..     
192f0 20 2d 66 6f 72 6d 61 74 20 79 79 79 79 4d 4d 64   -format yyyyMMd
19300 64 48 48 6d 6d 73 73 20 2d 67 6d 74 20 74 72 75  dHHmmss -gmt tru
19310 65 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  e]....  lappend 
19320 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
19330 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41  ute $db [appendA
19340 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e  rgs \..      "IN
19350 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
19360 20 79 29 20 56 41 4c 55 45 53 28 27 22 20 24 64   y) VALUES('" $d
19370 61 74 65 54 69 6d 65 20 22 27 2c 20 27 22 20 24  ateTime "', '" $
19380 64 61 74 65 54 69 6d 65 20 22 27 29 3b 22 5d 5d  dateTime "');"]]
19390 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
193a0 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
193b0 65 20 2d 76 65 72 62 61 74 69 6d 20 2d 65 78 65  e -verbatim -exe
193c0 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72  cute reader -for
193d0 6d 61 74 20 6c 69 73 74 20 5c 0d 0a 20 20 20 20  mat list \..    
193e0 20 20 2d 64 61 74 65 74 69 6d 65 66 6f 72 6d 61    -datetimeforma
193f0 74 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f  t [getDateTimeFo
19400 72 6d 61 74 5d 20 24 64 62 20 22 53 45 4c 45 43  rmat] $db "SELEC
19410 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 3b 22  T x, y FROM t1;"
19420 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
19430 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69  esult [$connecti
19440 6f 6e 20 43 6c 65 61 72 54 79 70 65 4d 61 70 70  on ClearTypeMapp
19450 69 6e 67 73 5d 3b 20 23 20 30 0d 0a 20 20 6c 61  ings]; # 0..  la
19460 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63  ppend result [$c
19470 6f 6e 6e 65 63 74 69 6f 6e 20 41 64 64 54 79 70  onnection AddTyp
19480 65 4d 61 70 70 69 6e 67 20 4d 59 44 41 54 45 20  eMapping MYDATE 
19490 44 61 74 65 54 69 6d 65 20 66 61 6c 73 65 5d 3b  DateTime false];
194a0 20 23 20 30 0d 0a 20 20 6c 61 70 70 65 6e 64 20   # 0..  lappend 
194b0 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74  result [$connect
194c0 69 6f 6e 20 41 64 64 54 79 70 65 4d 61 70 70 69  ion AddTypeMappi
194d0 6e 67 20 4d 59 44 41 54 45 20 44 61 74 65 54 69  ng MYDATE DateTi
194e0 6d 65 20 74 72 75 65 5d 3b 20 23 20 31 0d 0a 20  me true]; # 1.. 
194f0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
19500 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 41 64 64  [$connection Add
19510 54 79 70 65 4d 61 70 70 69 6e 67 20 4d 59 44 41  TypeMapping MYDA
19520 54 45 20 44 61 74 65 54 69 6d 65 20 66 61 6c 73  TE DateTime fals
19530 65 5d 3b 20 23 20 31 0d 0a 20 20 6c 61 70 70 65  e]; # 1..  lappe
19540 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e  nd result [$conn
19550 65 63 74 69 6f 6e 20 41 64 64 54 79 70 65 4d 61  ection AddTypeMa
19560 70 70 69 6e 67 20 4d 59 44 41 54 45 20 44 61 74  pping MYDATE Dat
19570 65 54 69 6d 65 20 74 72 75 65 5d 3b 20 23 20 32  eTime true]; # 2
19580 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
19590 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  lt [$connection 
195a0 43 6c 65 61 72 54 79 70 65 4d 61 70 70 69 6e 67  ClearTypeMapping
195b0 73 5d 3b 20 23 20 32 0d 0a 20 20 6c 61 70 70 65  s]; # 2..  lappe
195c0 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e  nd result [$conn
195d0 65 63 74 69 6f 6e 20 41 64 64 54 79 70 65 4d 61  ection AddTypeMa
195e0 70 70 69 6e 67 20 4d 59 44 41 54 45 20 44 61 74  pping MYDATE Dat
195f0 65 54 69 6d 65 20 74 72 75 65 5d 3b 20 23 20 30  eTime true]; # 0
19600 0d 0a 0d 0a 20 20 73 65 74 20 74 79 70 65 4d 61  ....  set typeMa
19610 70 70 69 6e 67 73 20 5b 24 63 6f 6e 6e 65 63 74  ppings [$connect
19620 69 6f 6e 20 47 65 74 54 79 70 65 4d 61 70 70 69  ion GetTypeMappi
19630 6e 67 73 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74  ngs]....  object
19640 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias 
19650 70 61 69 72 20 24 74 79 70 65 4d 61 70 70 69 6e  pair $typeMappin
19660 67 73 20 7b 0d 0a 20 20 20 20 73 65 74 20 74 79  gs {..    set ty
19670 70 65 4d 61 70 70 69 6e 67 20 5b 24 70 61 69 72  peMapping [$pair
19680 20 56 61 6c 75 65 5d 0d 0a 20 20 20 20 6c 61 70   Value]..    lap
19690 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73  pend result [lis
196a0 74 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 5b 65  t [$pair Key] [e
196b0 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20  numerableToList 
196c0 24 74 79 70 65 4d 61 70 70 69 6e 67 5d 5d 0d 0a  $typeMapping]]..
196d0 20 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64    }....  lappend
196e0 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
196f0 63 75 74 65 20 2d 76 65 72 62 61 74 69 6d 20 2d  cute -verbatim -
19700 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
19710 66 6f 72 6d 61 74 20 6c 69 73 74 20 5c 0d 0a 20  format list \.. 
19720 20 20 20 20 20 2d 64 61 74 65 74 69 6d 65 66 6f       -datetimefo
19730 72 6d 61 74 20 5b 67 65 74 44 61 74 65 54 69 6d  rmat [getDateTim
19740 65 46 6f 72 6d 61 74 5d 20 24 64 62 20 22 53 45  eFormat] $db "SE
19750 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74  LECT x, y FROM t
19760 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  1;"]....  set re
19770 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
19780 20 7b 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e   {..  freeDbConn
19790 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65  ection....  unse
197a0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 79  t -nocomplain ty
197b0 70 65 4d 61 70 70 69 6e 67 20 74 79 70 65 4d 61  peMapping typeMa
197c0 70 70 69 6e 67 73 20 70 61 69 72 20 72 65 73 75  ppings pair resu
197d0 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  lt connection...
197e0 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
197f0 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
19800 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61  t -nocomplain da
19810 74 65 54 69 6d 65 20 64 62 20 66 69 6c 65 4e 61  teTime db fileNa
19820 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
19830 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e  ts {eagle comman
19840 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67  d.object monoBug
19850 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
19860 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
19870 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
19880 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
19890 20 7b 30 20 31 20 7b 7b 32 30 31 34 2d 30 32 2d   {0 1 {{2014-02-
198a0 30 31 20 31 32 3a 33 34 3a 35 36 7d 20 32 30 31  01 12:34:56} 201
198b0 34 30 32 30 31 31 32 33 34 35 36 7d 20 30 20 30  40201123456} 0 0
198c0 20 31 20 31 5c 0d 0a 32 20 32 20 30 20 7b 4d 59   1 1\..2 2 0 {MY
198d0 44 41 54 45 20 7b 4d 59 44 41 54 45 20 44 61 74  DATE {MYDATE Dat
198e0 65 54 69 6d 65 20 54 72 75 65 7d 7d 20 7b 7b 32  eTime True}} {{2
198f0 30 31 34 2d 30 32 2d 30 31 20 31 32 3a 33 34 3a  014-02-01 12:34:
19900 35 36 7d 20 7b 32 30 31 34 2d 30 32 2d 30 31 5c  56} {2014-02-01\
19910 0d 0a 31 32 3a 33 34 3a 35 36 7d 7d 7d 7d 0d 0a  ..12:34:56}}}}..
19920 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
19930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19970 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
19980 73 74 20 64 61 74 61 2d 31 2e 36 31 20 7b 53 45  st data-1.61 {SE
19990 4c 45 43 54 20 77 69 74 68 6f 75 74 20 54 59 50  LECT without TYP
199a0 45 53 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ES} -setup {..  
199b0 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
199c0 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 31 2e  eName data-1.61.
199d0 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
199e0 20 20 73 65 74 20 76 61 6c 75 65 73 20 5b 6c 69    set values [li
199f0 73 74 20 4e 55 4c 4c 20 31 20 27 6f 6e 65 27 20  st NULL 1 'one' 
19a00 31 2e 30 20 58 27 30 31 27 5d 0d 0a 20 20 73 71  1.0 X'01']..  sq
19a10 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
19a20 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
19a30 2c 20 79 29 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65  , y);"....  fore
19a40 61 63 68 20 78 20 24 76 61 6c 75 65 73 20 7b 0d  ach x $values {.
19a50 0a 20 20 20 20 66 6f 72 65 61 63 68 20 79 20 24  .    foreach y $
19a60 76 61 6c 75 65 73 20 7b 0d 0a 20 20 20 20 20 20  values {..      
19a70 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
19a80 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
19a90 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
19aa0 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
19ab0 56 41 4c 55 45 53 28 22 20 24 78 20 22 2c 20 22  VALUES(" $x ", "
19ac0 20 24 79 20 22 29 3b 22 5d 0d 0a 20 20 20 20 7d   $y ");"]..    }
19ad0 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65  ..  }....  sql e
19ae0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
19af0 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
19b00 69 73 74 20 2d 61 6c 6c 6f 77 6e 75 6c 6c 20 74  ist -allownull t
19b10 72 75 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  rue $db \..     
19b20 20 22 53 45 4c 45 43 54 20 72 6f 77 49 64 2c 20   "SELECT rowId, 
19b30 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44  x, y FROM t1 ORD
19b40 45 52 20 42 59 20 72 6f 77 49 64 3b 22 0d 0a 7d  ER BY rowId;"..}
19b50 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
19b60 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
19b70 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
19b80 6f 63 6f 6d 70 6c 61 69 6e 20 79 20 78 20 76 61  ocomplain y x va
19b90 6c 75 65 73 20 64 62 20 66 69 6c 65 4e 61 6d 65  lues db fileName
19ba0 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
19bb0 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
19bc0 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
19bd0 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
19be0 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
19bf0 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
19c00 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b  QLite} -result {
19c10 31 20 7b 7d 20 7b 7d 20 32 20 7b 7d 20 31 20 33  1 {} {} 2 {} 1 3
19c20 20 7b 7d 20 6f 6e 65 20 34 20 7b 7d 20 31 20 35   {} one 4 {} 1 5
19c30 20 7b 7d 20 31 20 36 20 31 20 7b 7d 20 37 20 31   {} 1 6 1 {} 7 1
19c40 20 31 5c 0d 0a 38 20 31 20 6f 6e 65 20 39 20 31   1\..8 1 one 9 1
19c50 20 31 20 31 30 20 31 20 31 20 31 31 20 6f 6e 65   1 10 1 1 11 one
19c60 20 7b 7d 20 31 32 20 6f 6e 65 20 31 20 31 33 20   {} 12 one 1 13 
19c70 6f 6e 65 20 6f 6e 65 20 31 34 20 6f 6e 65 20 31  one one 14 one 1
19c80 20 31 35 20 6f 6e 65 20 31 20 31 36 20 31 20 7b   15 one 1 16 1 {
19c90 7d 20 31 37 5c 0d 0a 31 20 31 20 31 38 20 31 20  } 17\..1 1 18 1 
19ca0 6f 6e 65 20 31 39 20 31 20 31 20 32 30 20 31 20  one 19 1 1 20 1 
19cb0 31 20 32 31 20 31 20 7b 7d 20 32 32 20 31 20 31  1 21 1 {} 22 1 1
19cc0 20 32 33 20 31 20 6f 6e 65 20 32 34 20 31 20 31   23 1 one 24 1 1
19cd0 20 32 35 20 31 20 31 7d 7d 0d 0a 0d 0a 23 23 23   25 1 1}}....###
19ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19d20 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
19d30 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
19d40 74 61 2d 31 2e 36 32 20 7b 53 45 4c 45 43 54 20  ta-1.62 {SELECT 
19d50 77 69 74 68 20 54 59 50 45 53 7d 20 2d 73 65 74  with TYPES} -set
19d60 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
19d70 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
19d80 74 61 2d 31 2e 36 32 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.62.db]..} -
19d90 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 76 61  body {..  set va
19da0 6c 75 65 73 20 5b 6c 69 73 74 20 4e 55 4c 4c 20  lues [list NULL 
19db0 31 20 27 6f 6e 65 27 20 31 2e 30 20 58 27 30 31  1 'one' 1.0 X'01
19dc0 27 5d 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ']..  sql execut
19dd0 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
19de0 42 4c 45 20 74 31 28 78 2c 20 79 29 3b 22 0d 0a  BLE t1(x, y);"..
19df0 0d 0a 20 20 66 6f 72 65 61 63 68 20 78 20 24 76  ..  foreach x $v
19e00 61 6c 75 65 73 20 7b 0d 0a 20 20 20 20 66 6f 72  alues {..    for
19e10 65 61 63 68 20 79 20 24 76 61 6c 75 65 73 20 7b  each y $values {
19e20 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63  ..      sql exec
19e30 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41  ute $db [appendA
19e40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
19e50 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
19e60 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 22   (x, y) VALUES("
19e70 20 24 78 20 22 2c 20 22 20 24 79 20 22 29 3b 22   $x ", " $y ");"
19e80 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  ]..    }..  }...
19e90 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
19ea0 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
19eb0 66 6f 72 6d 61 74 20 6c 69 73 74 20 2d 61 6c 6c  format list -all
19ec0 6f 77 6e 75 6c 6c 20 74 72 75 65 20 24 64 62 20  ownull true $db 
19ed0 5c 0d 0a 20 20 20 20 20 20 22 54 59 50 45 53 20  \..      "TYPES 
19ee0 49 4e 54 45 47 45 52 2c 20 49 4e 54 45 47 45 52  INTEGER, INTEGER
19ef0 2c 20 52 45 41 4c 3b 20 53 45 4c 45 43 54 20 72  , REAL; SELECT r
19f00 6f 77 49 64 2c 20 78 2c 20 79 20 46 52 4f 4d 20  owId, x, y FROM 
19f10 74 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 49  t1 ORDER BY rowI
19f20 64 3b 22 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  d;"..} -cleanup 
19f30 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
19f40 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
19f50 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
19f60 79 20 78 20 76 61 6c 75 65 73 20 64 62 20 66 69  y x values db fi
19f70 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
19f80 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
19f90 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
19fa0 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
19fb0 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
19fc0 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
19fd0 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65  Data.SQLite} -re
19fe0 73 75 6c 74 20 7b 31 20 7b 7d 20 7b 7d 20 32 20  sult {1 {} {} 2 
19ff0 7b 7d 20 31 20 33 20 7b 7d 20 30 20 34 20 7b 7d  {} 1 3 {} 0 4 {}
1a000 20 31 20 35 20 7b 7d 20 30 20 36 20 31 20 7b 7d   1 5 {} 0 6 1 {}
1a010 20 37 20 31 20 31 20 38 5c 0d 0a 31 20 30 20 39   7 1 1 8\..1 0 9
1a020 20 31 20 31 20 31 30 20 31 20 30 20 31 31 20 30   1 1 10 1 0 11 0
1a030 20 7b 7d 20 31 32 20 30 20 31 20 31 33 20 30 20   {} 12 0 1 13 0 
1a040 30 20 31 34 20 30 20 31 20 31 35 20 30 20 30 20  0 14 0 1 15 0 0 
1a050 31 36 20 31 20 7b 7d 20 31 37 20 31 20 31 20 31  16 1 {} 17 1 1 1
1a060 38 20 31 20 30 20 31 39 20 31 5c 0d 0a 31 20 32  8 1 0 19 1\..1 2
1a070 30 20 31 20 30 20 32 31 20 30 20 7b 7d 20 32 32  0 1 0 21 0 {} 22
1a080 20 30 20 31 20 32 33 20 30 20 30 20 32 34 20 30   0 1 23 0 0 24 0
1a090 20 31 20 32 35 20 30 20 30 7d 7d 0d 0a 0d 0a 23   1 25 0 0}}....#
1a0a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1a0f0 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1a100 64 61 74 61 2d 31 2e 36 33 20 7b 53 51 4c 69 74  data-1.63 {SQLit
1a110 65 44 61 74 61 52 65 61 64 65 72 20 48 61 73 52  eDataReader HasR
1a120 6f 77 73 20 70 72 6f 70 65 72 74 79 7d 20 2d 73  ows property} -s
1a130 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
1a140 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
1a150 64 61 74 61 2d 31 2e 36 33 2e 64 62 5d 0d 0a 7d  data-1.63.db]..}
1a160 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20   -body {..  sql 
1a170 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
1a180 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
1a190 74 31 28 78 29 3b 0d 0a 20 20 20 20 43 52 45 41  t1(x);..    CREA
1a1a0 54 45 20 54 41 42 4c 45 20 74 32 28 78 29 3b 0d  TE TABLE t2(x);.
1a1b0 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1a1c0 20 74 32 20 28 78 29 20 56 41 4c 55 45 53 28 31   t2 (x) VALUES(1
1a1d0 29 3b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54  );..    CREATE T
1a1e0 41 42 4c 45 20 74 33 28 78 29 3b 0d 0a 20 20 20  ABLE t3(x);..   
1a1f0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
1a200 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a  (x) VALUES(1);..
1a210 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1a220 74 33 20 28 78 29 20 56 41 4c 55 45 53 28 32 29  t3 (x) VALUES(2)
1a230 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ;..  }....  set 
1a240 72 65 61 64 65 72 28 31 29 20 5b 73 71 6c 20 65  reader(1) [sql e
1a250 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
1a260 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64  reader -format d
1a270 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69 61 73  atareader -alias
1a280 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53   \..      $db "S
1a290 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
1a2a0 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64  "]....  set read
1a2b0 65 72 28 32 29 20 5b 73 71 6c 20 65 78 65 63 75  er(2) [sql execu
1a2c0 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64  te -execute read
1a2d0 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72  er -format datar
1a2e0 65 61 64 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a  eader -alias \..
1a2f0 20 20 20 20 20 20 24 64 62 20 22 53 45 4c 45 43        $db "SELEC
1a300 54 20 2a 20 46 52 4f 4d 20 74 32 3b 22 5d 0d 0a  T * FROM t2;"]..
1a310 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72 28 33  ..  set reader(3
1a320 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  ) [sql execute -
1a330 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
1a340 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61 64 65  format datareade
1a350 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20  r -alias \..    
1a360 20 20 24 64 62 20 22 53 45 4c 45 43 54 20 2a 20    $db "SELECT * 
1a370 46 52 4f 4d 20 74 33 3b 22 5d 0d 0a 0d 0a 20 20  FROM t3;"]....  
1a380 73 65 74 20 6e 6f 52 6f 77 20 22 2a 3a 20 4e 6f  set noRow "*: No
1a390 20 63 75 72 72 65 6e 74 20 72 6f 77 2a 22 0d 0a   current row*"..
1a3a0 0d 0a 20 20 6c 69 73 74 20 5b 24 72 65 61 64 65  ..  list [$reade
1a3b0 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24  r(1) HasRows] [$
1a3c0 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f 77  reader(2) HasRow
1a3d0 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 48  s] [$reader(3) H
1a3e0 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20  asRows] \..     
1a3f0 20 5b 24 72 65 61 64 65 72 28 31 29 20 52 65 61   [$reader(1) Rea
1a400 64 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 52  d] [$reader(2) R
1a410 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29  ead] [$reader(3)
1a420 20 52 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20   Read] \..      
1a430 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73 52  [$reader(1) HasR
1a440 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29  ows] [$reader(2)
1a450 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64   HasRows] [$read
1a460 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c  er(3) HasRows] \
1a470 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
1a480 24 72 65 61 64 65 72 28 31 29 20 49 74 65 6d 20  $reader(1) Item 
1a490 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
1a4a0 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
1a4b0 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
1a4c0 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
1a4d0 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  2) Item x} error
1a4e0 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
1a4f0 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c  $noRow $error] \
1a500 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
1a510 24 72 65 61 64 65 72 28 33 29 20 49 74 65 6d 20  $reader(3) Item 
1a520 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
1a530 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
1a540 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
1a550 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73 52  [$reader(1) HasR
1a560 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29  ows] [$reader(2)
1a570 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64   HasRows] [$read
1a580 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c  er(3) HasRows] \
1a590 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72  ..      [$reader
1a5a0 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61 64  (1) Read] [$read
1a5b0 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72 65  er(2) Read] [$re
1a5c0 61 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c 0d  ader(3) Read] \.
1a5d0 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28  .      [$reader(
1a5e0 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65  1) HasRows] [$re
1a5f0 61 64 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d  ader(2) HasRows]
1a600 20 5b 24 72 65 61 64 65 72 28 33 29 20 48 61 73   [$reader(3) Has
1a610 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  Rows] \..      [
1a620 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 31  catch {$reader(1
1a630 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d  ) Item x} error]
1a640 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24   [string match $
1a650 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d  noRow $error] \.
1a660 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24  .      [catch {$
1a670 72 65 61 64 65 72 28 32 29 20 49 74 65 6d 20 78  reader(2) Item x
1a680 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67  } error] [string
1a690 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65   match $noRow $e
1a6a0 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  rror] \..      [
1a6b0 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 33  catch {$reader(3
1a6c0 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d  ) Item x} error]
1a6d0 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24   [string match $
1a6e0 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d  noRow $error] \.
1a6f0 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28  .      [$reader(
1a700 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65  1) HasRows] [$re
1a710 61 64 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d  ader(2) HasRows]
1a720 20 5b 24 72 65 61 64 65 72 28 33 29 20 48 61 73   [$reader(3) Has
1a730 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  Rows] \..      [
1a740 24 72 65 61 64 65 72 28 31 29 20 52 65 61 64 5d  $reader(1) Read]
1a750 20 5b 24 72 65 61 64 65 72 28 32 29 20 52 65 61   [$reader(2) Rea
1a760 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 52  d] [$reader(3) R
1a770 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ead] \..      [$
1a780 72 65 61 64 65 72 28 31 29 20 48 61 73 52 6f 77  reader(1) HasRow
1a790 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 48  s] [$reader(2) H
1a7a0 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72  asRows] [$reader
1a7b0 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d 0a  (3) HasRows] \..
1a7c0 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1a7d0 65 61 64 65 72 28 31 29 20 49 74 65 6d 20 78 7d  eader(1) Item x}
1a7e0 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1a7f0 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1a800 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63  ror] \..      [c
1a810 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 32 29  atch {$reader(2)
1a820 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20   Item x} error] 
1a830 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e  [string match $n
1a840 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a  oRow $error] \..
1a850 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1a860 65 61 64 65 72 28 33 29 20 49 74 65 6d 20 78 7d  eader(3) Item x}
1a870 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1a880 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1a890 72 6f 72 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ror]..} -cleanup
1a8a0 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
1a8b0 6f 6d 70 6c 61 69 6e 20 72 65 61 64 65 72 0d 0a  omplain reader..
1a8c0 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
1a8d0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
1a8e0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65  et -nocomplain e
1a8f0 72 72 6f 72 20 6e 6f 52 6f 77 20 64 62 20 66 69  rror noRow db fi
1a900 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
1a910 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
1a920 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
1a930 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
1a940 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
1a950 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
1a960 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65  Data.SQLite} -re
1a970 73 75 6c 74 20 7b 46 61 6c 73 65 20 54 72 75 65  sult {False True
1a980 20 54 72 75 65 20 46 61 6c 73 65 20 54 72 75 65   True False True
1a990 20 54 72 75 65 20 46 61 6c 73 65 20 54 72 75 65   True False True
1a9a0 20 54 72 75 65 20 31 5c 0d 0a 54 72 75 65 20 30   True 1\..True 0
1a9b0 20 46 61 6c 73 65 20 30 20 46 61 6c 73 65 20 46   False 0 False F
1a9c0 61 6c 73 65 20 54 72 75 65 20 54 72 75 65 20 46  alse True True F
1a9d0 61 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20  alse False True 
1a9e0 46 61 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65  False False True
1a9f0 20 31 20 54 72 75 65 20 31 5c 0d 0a 54 72 75 65   1 True 1\..True
1aa00 20 30 20 46 61 6c 73 65 20 46 61 6c 73 65 20 46   0 False False F
1aa10 61 6c 73 65 20 54 72 75 65 20 46 61 6c 73 65 20  alse True False 
1aa20 46 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73  False False Fals
1aa30 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20 31 20  e False False 1 
1aa40 54 72 75 65 20 31 20 54 72 75 65 5c 0d 0a 31 20  True 1 True\..1 
1aa50 54 72 75 65 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  True}}....######
1aa60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aaa0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
1aab0 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
1aac0 31 2e 36 34 20 7b 53 51 4c 69 74 65 44 61 74 61  1.64 {SQLiteData
1aad0 52 65 61 64 65 72 20 73 74 69 63 6b 79 20 48 61  Reader sticky Ha
1aae0 73 52 6f 77 73 20 70 72 6f 70 65 72 74 79 7d 20  sRows property} 
1aaf0 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
1ab00 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
1ab10 65 20 64 61 74 61 2d 31 2e 36 34 2e 64 62 5d 20  e data-1.64.db] 
1ab20 22 22 20 22 22 20 22 22 20 53 74 69 63 6b 79 48  "" "" "" StickyH
1ab30 61 73 52 6f 77 73 0d 0a 7d 20 2d 62 6f 64 79 20  asRows..} -body 
1ab40 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  {..  sql execute
1ab50 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41   $db {..    CREA
1ab60 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0d  TE TABLE t1(x);.
1ab70 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1ab80 45 20 74 32 28 78 29 3b 0d 0a 20 20 20 20 49 4e  E t2(x);..    IN
1ab90 53 45 52 54 20 49 4e 54 4f 20 74 32 20 28 78 29  SERT INTO t2 (x)
1aba0 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20 20   VALUES(1);..   
1abb0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
1abc0 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  (x);..    INSERT
1abd0 20 49 4e 54 4f 20 74 33 20 28 78 29 20 56 41 4c   INTO t3 (x) VAL
1abe0 55 45 53 28 31 29 3b 0d 0a 20 20 20 20 49 4e 53  UES(1);..    INS
1abf0 45 52 54 20 49 4e 54 4f 20 74 33 20 28 78 29 20  ERT INTO t3 (x) 
1ac00 56 41 4c 55 45 53 28 32 29 3b 0d 0a 20 20 7d 0d  VALUES(2);..  }.
1ac10 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72 28  ...  set reader(
1ac20 31 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  1) [sql execute 
1ac30 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
1ac40 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61 64  -format dataread
1ac50 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  er -alias \..   
1ac60 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20 2a     $db "SELECT *
1ac70 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20   FROM t1;"].... 
1ac80 20 73 65 74 20 72 65 61 64 65 72 28 32 29 20 5b   set reader(2) [
1ac90 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
1aca0 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72  cute reader -for
1acb0 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20 2d  mat datareader -
1acc0 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 24  alias \..      $
1acd0 64 62 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  db "SELECT * FRO
1ace0 4d 20 74 32 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74  M t2;"]....  set
1acf0 20 72 65 61 64 65 72 28 33 29 20 5b 73 71 6c 20   reader(3) [sql 
1ad00 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
1ad10 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
1ad20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69 61  datareader -alia
1ad30 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20 22  s \..      $db "
1ad40 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
1ad50 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 6e 6f 52  ;"]....  set noR
1ad60 6f 77 20 22 2a 3a 20 4e 6f 20 63 75 72 72 65 6e  ow "*: No curren
1ad70 74 20 72 6f 77 2a 22 0d 0a 0d 0a 20 20 6c 69 73  t row*"....  lis
1ad80 74 20 5b 24 72 65 61 64 65 72 28 31 29 20 48 61  t [$reader(1) Ha
1ad90 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28  sRows] [$reader(
1ada0 32 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65  2) HasRows] [$re
1adb0 61 64 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d  ader(3) HasRows]
1adc0 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64   \..      [$read
1add0 65 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65  er(1) Read] [$re
1ade0 61 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24  ader(2) Read] [$
1adf0 72 65 61 64 65 72 28 33 29 20 52 65 61 64 5d 20  reader(3) Read] 
1ae00 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65  \..      [$reade
1ae10 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24  r(1) HasRows] [$
1ae20 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f 77  reader(2) HasRow
1ae30 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 48  s] [$reader(3) H
1ae40 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20  asRows] \..     
1ae50 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72   [catch {$reader
1ae60 28 31 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f  (1) Item x} erro
1ae70 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  r] [string match
1ae80 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20   $noRow $error] 
1ae90 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1aea0 7b 24 72 65 61 64 65 72 28 32 29 20 49 74 65 6d  {$reader(2) Item
1aeb0 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1aec0 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1aed0 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1aee0 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72   [catch {$reader
1aef0 28 33 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f  (3) Item x} erro
1af00 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  r] [string match
1af10 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20   $noRow $error] 
1af20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65  \..      [$reade
1af30 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24  r(1) HasRows] [$
1af40 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f 77  reader(2) HasRow
1af50 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 48  s] [$reader(3) H
1af60 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20  asRows] \..     
1af70 20 5b 24 72 65 61 64 65 72 28 31 29 20 52 65 61   [$reader(1) Rea
1af80 64 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 52  d] [$reader(2) R
1af90 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29  ead] [$reader(3)
1afa0 20 52 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20   Read] \..      
1afb0 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73 52  [$reader(1) HasR
1afc0 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29  ows] [$reader(2)
1afd0 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64   HasRows] [$read
1afe0 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c  er(3) HasRows] \
1aff0 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
1b000 24 72 65 61 64 65 72 28 31 29 20 49 74 65 6d 20  $reader(1) Item 
1b010 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
1b020 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
1b030 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
1b040 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
1b050 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  2) Item x} error
1b060 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
1b070 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c  $noRow $error] \
1b080 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
1b090 24 72 65 61 64 65 72 28 33 29 20 49 74 65 6d 20  $reader(3) Item 
1b0a0 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
1b0b0 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
1b0c0 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
1b0d0 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73 52  [$reader(1) HasR
1b0e0 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29  ows] [$reader(2)
1b0f0 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64   HasRows] [$read
1b100 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c  er(3) HasRows] \
1b110 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72  ..      [$reader
1b120 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61 64  (1) Read] [$read
1b130 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72 65  er(2) Read] [$re
1b140 61 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c 0d  ader(3) Read] \.
1b150 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28  .      [$reader(
1b160 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65  1) HasRows] [$re
1b170 61 64 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d  ader(2) HasRows]
1b180 20 5b 24 72 65 61 64 65 72 28 33 29 20 48 61 73   [$reader(3) Has
1b190 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  Rows] \..      [
1b1a0 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 31  catch {$reader(1
1b1b0 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d  ) Item x} error]
1b1c0 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24   [string match $
1b1d0 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d  noRow $error] \.
1b1e0 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24  .      [catch {$
1b1f0 72 65 61 64 65 72 28 32 29 20 49 74 65 6d 20 78  reader(2) Item x
1b200 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67  } error] [string
1b210 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65   match $noRow $e
1b220 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  rror] \..      [
1b230 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 33  catch {$reader(3
1b240 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d  ) Item x} error]
1b250 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24   [string match $
1b260 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 0d 0a 7d  noRow $error]..}
1b270 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75   -cleanup {..  u
1b280 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1b290 20 72 65 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65   reader....  cle
1b2a0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
1b2b0 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
1b2c0 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72 20 6e 6f  omplain error no
1b2d0 52 6f 77 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  Row db fileName.
1b2e0 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
1b2f0 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
1b300 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
1b310 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
1b320 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c  ile.DATA SQLite\
1b330 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ..System.Data.SQ
1b340 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 46  Lite} -result {F
1b350 61 6c 73 65 20 54 72 75 65 20 54 72 75 65 20 46  alse True True F
1b360 61 6c 73 65 20 54 72 75 65 20 54 72 75 65 20 46  alse True True F
1b370 61 6c 73 65 20 54 72 75 65 20 54 72 75 65 20 31  alse True True 1
1b380 5c 0d 0a 54 72 75 65 20 30 20 46 61 6c 73 65 20  \..True 0 False 
1b390 30 20 46 61 6c 73 65 20 46 61 6c 73 65 20 54 72  0 False False Tr
1b3a0 75 65 20 54 72 75 65 20 46 61 6c 73 65 20 46 61  ue True False Fa
1b3b0 6c 73 65 20 54 72 75 65 20 46 61 6c 73 65 20 54  lse True False T
1b3c0 72 75 65 20 54 72 75 65 20 31 20 54 72 75 65 20  rue True 1 True 
1b3d0 31 5c 0d 0a 54 72 75 65 20 30 20 46 61 6c 73 65  1\..True 0 False
1b3e0 20 46 61 6c 73 65 20 54 72 75 65 20 54 72 75 65   False True True
1b3f0 20 46 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c   False False Fal
1b400 73 65 20 46 61 6c 73 65 20 54 72 75 65 20 54 72  se False True Tr
1b410 75 65 20 31 20 54 72 75 65 20 31 20 54 72 75 65  ue 1 True 1 True
1b420 20 31 5c 0d 0a 54 72 75 65 7d 7d 0d 0a 0d 0a 23   1\..True}}....#
1b430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1b480 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1b490 64 61 74 61 2d 31 2e 36 35 20 7b 53 51 4c 69 74  data-1.65 {SQLit
1b4a0 65 44 61 74 61 52 65 61 64 65 72 20 53 74 65 70  eDataReader Step
1b4b0 43 6f 75 6e 74 20 70 72 6f 70 65 72 74 79 7d 20  Count property} 
1b4c0 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
1b4d0 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
1b4e0 65 20 64 61 74 61 2d 31 2e 36 35 2e 64 62 5d 0d  e data-1.65.db].
1b4f0 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
1b500 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d  l execute $db {.
1b510 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1b520 45 20 74 31 28 78 29 3b 0d 0a 20 20 20 20 43 52  E t1(x);..    CR
1b530 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 29  EATE TABLE t2(x)
1b540 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
1b550 54 4f 20 74 32 20 28 78 29 20 56 41 4c 55 45 53  TO t2 (x) VALUES
1b560 28 31 29 3b 0d 0a 20 20 20 20 43 52 45 41 54 45  (1);..    CREATE
1b570 20 54 41 42 4c 45 20 74 33 28 78 29 3b 0d 0a 20   TABLE t3(x);.. 
1b580 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1b590 33 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  3 (x) VALUES(1);
1b5a0 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
1b5b0 4f 20 74 33 20 28 78 29 20 56 41 4c 55 45 53 28  O t3 (x) VALUES(
1b5c0 32 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  2);..  }....  se
1b5d0 74 20 72 65 61 64 65 72 28 31 29 20 5b 73 71 6c  t reader(1) [sql
1b5e0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
1b5f0 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
1b600 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69   datareader -ali
1b610 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20  as \..      $db 
1b620 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1b630 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  1;"]....  set re
1b640 61 64 65 72 28 32 29 20 5b 73 71 6c 20 65 78 65  ader(2) [sql exe
1b650 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
1b660 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74  ader -format dat
1b670 61 72 65 61 64 65 72 20 2d 61 6c 69 61 73 20 5c  areader -alias \
1b680 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53 45 4c  ..      $db "SEL
1b690 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 22 5d  ECT * FROM t2;"]
1b6a0 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72  ....  set reader
1b6b0 28 33 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65  (3) [sql execute
1b6c0 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
1b6d0 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
1b6e0 64 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  der -alias \..  
1b6f0 20 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20      $db "SELECT 
1b700 2a 20 46 52 4f 4d 20 74 33 3b 22 5d 0d 0a 0d 0a  * FROM t3;"]....
1b710 20 20 73 65 74 20 6e 6f 52 6f 77 20 22 2a 3a 20    set noRow "*: 
1b720 4e 6f 20 63 75 72 72 65 6e 74 20 72 6f 77 2a 22  No current row*"
1b730 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 24 72 65 61  ....  list [$rea
1b740 64 65 72 28 31 29 20 53 74 65 70 43 6f 75 6e 74  der(1) StepCount
1b750 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 53 74  ] [$reader(2) St
1b760 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65  epCount] [$reade
1b770 72 28 33 29 20 53 74 65 70 43 6f 75 6e 74 5d 20  r(3) StepCount] 
1b780 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65  \..      [$reade
1b790 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61  r(1) Read] [$rea
1b7a0 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72  der(2) Read] [$r
1b7b0 65 61 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c  eader(3) Read] \
1b7c0 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72  ..      [$reader
1b7d0 28 31 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b  (1) StepCount] [
1b7e0 24 72 65 61 64 65 72 28 32 29 20 53 74 65 70 43  $reader(2) StepC
1b7f0 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 33  ount] [$reader(3
1b800 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5c 0d 0a  ) StepCount] \..
1b810 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1b820 65 61 64 65 72 28 31 29 20 49 74 65 6d 20 78 7d  eader(1) Item x}
1b830 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1b840 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1b850 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63  ror] \..      [c
1b860 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 32 29  atch {$reader(2)
1b870 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20   Item x} error] 
1b880 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e  [string match $n
1b890 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a  oRow $error] \..
1b8a0 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1b8b0 65 61 64 65 72 28 33 29 20 49 74 65 6d 20 78 7d  eader(3) Item x}
1b8c0 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1b8d0 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1b8e0 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ror] \..      [$
1b8f0 72 65 61 64 65 72 28 31 29 20 53 74 65 70 43 6f  reader(1) StepCo
1b900 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 32 29  unt] [$reader(2)
1b910 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65   StepCount] [$re
1b920 61 64 65 72 28 33 29 20 53 74 65 70 43 6f 75 6e  ader(3) StepCoun
1b930 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65  t] \..      [$re
1b940 61 64 65 72 28 31 29 20 52 65 61 64 5d 20 5b 24  ader(1) Read] [$
1b950 72 65 61 64 65 72 28 32 29 20 52 65 61 64 5d 20  reader(2) Read] 
1b960 5b 24 72 65 61 64 65 72 28 33 29 20 52 65 61 64  [$reader(3) Read
1b970 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61  ] \..      [$rea
1b980 64 65 72 28 31 29 20 53 74 65 70 43 6f 75 6e 74  der(1) StepCount
1b990 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 53 74  ] [$reader(2) St
1b9a0 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65  epCount] [$reade
1b9b0 72 28 33 29 20 53 74 65 70 43 6f 75 6e 74 5d 20  r(3) StepCount] 
1b9c0 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1b9d0 7b 24 72 65 61 64 65 72 28 31 29 20 49 74 65 6d  {$reader(1) Item
1b9e0 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1b9f0 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1ba00 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1ba10 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72   [catch {$reader
1ba20 28 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f  (2) Item x} erro
1ba30 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  r] [string match
1ba40 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20   $noRow $error] 
1ba50 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1ba60 7b 24 72 65 61 64 65 72 28 33 29 20 49 74 65 6d  {$reader(3) Item
1ba70 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1ba80 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1ba90 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1baa0 20 5b 24 72 65 61 64 65 72 28 31 29 20 53 74 65   [$reader(1) Ste
1bab0 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65 72  pCount] [$reader
1bac0 28 32 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b  (2) StepCount] [
1bad0 24 72 65 61 64 65 72 28 33 29 20 53 74 65 70 43  $reader(3) StepC
1bae0 6f 75 6e 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  ount] \..      [
1baf0 24 72 65 61 64 65 72 28 31 29 20 52 65 61 64 5d  $reader(1) Read]
1bb00 20 5b 24 72 65 61 64 65 72 28 32 29 20 52 65 61   [$reader(2) Rea
1bb10 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 52  d] [$reader(3) R
1bb20 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ead] \..      [$
1bb30 72 65 61 64 65 72 28 31 29 20 53 74 65 70 43 6f  reader(1) StepCo
1bb40 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 32 29  unt] [$reader(2)
1bb50 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65   StepCount] [$re
1bb60 61 64 65 72 28 33 29 20 53 74 65 70 43 6f 75 6e  ader(3) StepCoun
1bb70 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  t] \..      [cat
1bb80 63 68 20 7b 24 72 65 61 64 65 72 28 31 29 20 49  ch {$reader(1) I
1bb90 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1bba0 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1bbb0 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ow $error] \..  
1bbc0 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61      [catch {$rea
1bbd0 64 65 72 28 32 29 20 49 74 65 6d 20 78 7d 20 65  der(2) Item x} e
1bbe0 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61  rror] [string ma
1bbf0 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f  tch $noRow $erro
1bc00 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  r] \..      [cat
1bc10 63 68 20 7b 24 72 65 61 64 65 72 28 33 29 20 49  ch {$reader(3) I
1bc20 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1bc30 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1bc40 6f 77 20 24 65 72 72 6f 72 5d 0d 0a 7d 20 2d 63  ow $error]..} -c
1bc50 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65  leanup {..  unse
1bc60 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
1bc70 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  ader....  cleanu
1bc80 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
1bc90 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
1bca0 6c 61 69 6e 20 65 72 72 6f 72 20 6e 6f 52 6f 77  lain error noRow
1bcb0 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
1bcc0 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
1bcd0 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
1bce0 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
1bcf0 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
1bd00 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
1bd10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1bd20 65 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 31 20  e} -result {0 1 
1bd30 31 20 46 61 6c 73 65 20 54 72 75 65 20 54 72 75  1 False True Tru
1bd40 65 20 30 20 31 20 31 20 31 20 54 72 75 65 20 30  e 0 1 1 1 True 0
1bd50 20 46 61 6c 73 65 20 30 20 46 61 6c 73 65 5c 0d   False 0 False\.
1bd60 0a 30 20 31 20 31 20 46 61 6c 73 65 20 46 61 6c  .0 1 1 False Fal
1bd70 73 65 20 54 72 75 65 20 30 20 31 20 32 20 31 20  se True 0 1 2 1 
1bd80 54 72 75 65 20 31 20 54 72 75 65 20 30 20 46 61  True 1 True 0 Fa
1bd90 6c 73 65 20 30 20 31 20 32 20 46 61 6c 73 65 20  lse 0 1 2 False 
1bda0 46 61 6c 73 65 20 46 61 6c 73 65 20 30 20 31 5c  False False 0 1\
1bdb0 0d 0a 32 20 31 20 54 72 75 65 20 31 20 54 72 75  ..2 1 True 1 Tru
1bdc0 65 20 31 20 54 72 75 65 7d 7d 0d 0a 0d 0a 23 23  e 1 True}}....##
1bdd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bde0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bdf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be10 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1be20 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
1be30 61 74 61 2d 31 2e 36 36 20 7b 53 51 4c 69 74 65  ata-1.66 {SQLite
1be40 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 65 74 43 68  Connection.SetCh
1be50 75 6e 6b 53 69 7a 65 20 64 65 66 61 75 6c 74 7d  unkSize default}
1be60 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
1be70 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
1be80 6d 65 20 64 61 74 61 2d 31 2e 36 36 2e 64 62 5d  me data-1.66.db]
1be90 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
1bea0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b  ql execute $db {
1beb0 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
1bec0 4c 45 20 74 31 28 61 2c 20 62 29 3b 0d 0a 20 20  LE t1(a, b);..  
1bed0 7d 0d 0a 0d 0a 20 20 66 69 6c 65 20 73 69 7a 65  }....  file size
1bee0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1bef0 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
1bf00 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 7d  y] $fileName]..}
1bf10 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
1bf20 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
1bf30 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
1bf40 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c  ocomplain db fil
1bf50 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
1bf60 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
1bf70 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
1bf80 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
1bf90 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
1bfa0 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
1bfb0 65 73 75 6c 74 20 5c 0d 0a 5b 65 78 70 72 20 7b  esult \..[expr {
1bfc0 5b 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 67  [getDbDefaultPag
1bfd0 65 53 69 7a 65 5d 20 2a 20 32 7d 5d 7d 0d 0a 0d  eSize] * 2}]}...
1bfe0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1bff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c030 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
1c040 74 20 64 61 74 61 2d 31 2e 36 37 20 7b 53 51 4c  t data-1.67 {SQL
1c050 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 65  iteConnection.Se
1c060 74 43 68 75 6e 6b 53 69 7a 65 20 6d 65 74 68 6f  tChunkSize metho
1c070 64 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  d} -setup {..  s
1c080 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
1c090 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 37 2e 64  Name data-1.67.d
1c0a0 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
1c0b0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
1c0c0 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
1c0d0 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
1c0e0 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69  esult [$connecti
1c0f0 6f 6e 20 53 65 74 43 68 75 6e 6b 53 69 7a 65 20  on SetChunkSize 
1c100 5b 65 78 70 72 20 7b 33 32 20 2a 20 31 30 32 34  [expr {32 * 1024
1c110 7d 5d 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  }]]....  sql exe
1c120 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20  cute $db {..    
1c130 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1c140 61 2c 20 62 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20  a, b);..  }.... 
1c150 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
1c160 5b 66 69 6c 65 20 73 69 7a 65 20 5b 66 69 6c 65  [file size [file
1c170 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
1c180 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69  seDirectory] $fi
1c190 6c 65 4e 61 6d 65 5d 5d 0d 0a 7d 20 2d 63 6c 65  leName]]..} -cle
1c1a0 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
1c1b0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
1c1c0 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
1c1d0 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ion....  unset -
1c1e0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
1c1f0 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20  t connection db 
1c200 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
1c210 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
1c220 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
1c230 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
1c240 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
1c250 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
1c260 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
1c270 72 65 73 75 6c 74 20 7b 4f 6b 20 33 32 37 36 38  result {Ok 32768
1c280 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
1c290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c2d0 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
1c2e0 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36 38   {test data-1.68
1c2f0 20 7b 75 6e 73 65 74 20 65 6e 76 28 44 65 66 61   {unset env(Defa
1c300 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43  ultFlags_SQLiteC
1c310 6f 6e 6e 65 63 74 69 6f 6e 29 7d 20 2d 73 65 74  onnection)} -set
1c320 75 70 20 7b 0d 0a 20 20 73 61 76 65 53 51 4c 69  up {..  saveSQLi
1c330 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69  teConnectionEnvi
1c340 72 6f 6e 6d 65 6e 74 0d 0a 0d 0a 20 20 75 6e 73  ronment....  uns
1c350 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65  et -nocomplain e
1c360 6e 76 28 44 65 66 61 75 6c 74 46 6c 61 67 73 5f  nv(DefaultFlags_
1c370 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1c380 29 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  )..  unset -noco
1c390 6d 70 6c 61 69 6e 20 3a 3a 63 6f 6e 6e 65 63 74  mplain ::connect
1c3a0 69 6f 6e 5f 66 6c 61 67 73 0d 0a 0d 0a 20 20 73  ion_flags....  s
1c3b0 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
1c3c0 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 38 2e 64  Name data-1.68.d
1c3d0 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
1c3e0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
1c3f0 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
1c400 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 6f 62 6a  ]....  list [obj
1c410 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
1c420 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1c430 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 44  LiteConnection D
1c440 65 66 61 75 6c 74 46 6c 61 67 73 5d 20 5c 0d 0a  efaultFlags] \..
1c450 20 20 20 20 20 20 5b 24 63 6f 6e 6e 65 63 74 69        [$connecti
1c460 6f 6e 20 46 6c 61 67 73 5d 0d 0a 7d 20 2d 63 6c  on Flags]..} -cl
1c470 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
1c480 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
1c490 20 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43    restoreSQLiteC
1c4a0 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e  onnectionEnviron
1c4b0 6d 65 6e 74 0d 0a 0d 0a 20 20 66 72 65 65 44 62  ment....  freeDb
1c4c0 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  Connection....  
1c4d0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1c4e0 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20  n connection db 
1c4f0 66 69 6c 65 4e 61 6d 65 20 73 61 76 65 64 45 6e  fileName savedEn
1c500 76 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  v..} -constraint
1c510 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
1c520 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
1c530 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
1c540 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
1c550 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
1c560 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20 72  SQLite} -match r
1c570 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d  egexp -result \.
1c580 0a 7b 5e 44 65 66 61 75 6c 74 20 44 65 66 61 75  .{^Default Defau
1c590 6c 74 7c 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78  lt|LogCallbackEx
1c5a0 63 65 70 74 69 6f 6e 20 4c 6f 67 43 61 6c 6c 62  ception LogCallb
1c5b0 61 63 6b 45 78 63 65 70 74 69 6f 6e 24 7d 7d 0d  ackException$}}.
1c5c0 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
1c5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c5e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c5f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c610 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
1c620 65 73 74 20 64 61 74 61 2d 31 2e 36 39 20 7b 73  est data-1.69 {s
1c630 65 74 20 65 6e 76 28 44 65 66 61 75 6c 74 46 6c  et env(DefaultFl
1c640 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ags_SQLiteConnec
1c650 74 69 6f 6e 29 7d 20 2d 73 65 74 75 70 20 7b 0d  tion)} -setup {.
1c660 0a 20 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e  .  saveSQLiteCon
1c670 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65  nectionEnvironme
1c680 6e 74 0d 0a 0d 0a 20 20 73 65 74 20 65 6e 76 28  nt....  set env(
1c690 44 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c  DefaultFlags_SQL
1c6a0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 20 22  iteConnection) "
1c6b0 44 65 74 65 63 74 54 65 78 74 41 66 66 69 6e 69  DetectTextAffini
1c6c0 74 79 2c 20 44 65 74 65 63 74 53 74 72 69 6e 67  ty, DetectString
1c6d0 54 79 70 65 22 0d 0a 20 20 75 6e 73 65 74 20 2d  Type"..  unset -
1c6e0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 63 6f 6e  nocomplain ::con
1c6f0 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 0d 0a 0d  nection_flags...
1c700 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
1c710 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
1c720 36 39 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  69.db]..} -body 
1c730 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  {..  set connect
1c740 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
1c750 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  tion]....  list 
1c760 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53  [object invoke S
1c770 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1c780 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
1c790 6f 6e 20 44 65 66 61 75 6c 74 46 6c 61 67 73 5d  on DefaultFlags]
1c7a0 20 5c 0d 0a 20 20 20 20 20 20 5b 24 63 6f 6e 6e   \..      [$conn
1c7b0 65 63 74 69 6f 6e 20 46 6c 61 67 73 5d 0d 0a 7d  ection Flags]..}
1c7c0 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
1c7d0 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
1c7e0 6d 65 0d 0a 20 20 72 65 73 74 6f 72 65 53 51 4c  me..  restoreSQL
1c7f0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76  iteConnectionEnv
1c800 69 72 6f 6e 6d 65 6e 74 0d 0a 0d 0a 20 20 66 72  ironment....  fr
1c810 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  eeDbConnection..
1c820 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
1c830 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  plain connection
1c840 20 64 62 20 66 69 6c 65 4e 61 6d 65 20 73 61 76   db fileName sav
1c850 65 64 45 6e 76 0d 0a 7d 20 2d 63 6f 6e 73 74 72  edEnv..} -constr
1c860 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
1c870 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
1c880 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
1c890 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
1c8a0 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
1c8b0 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
1c8c0 75 6c 74 20 7b 7b 44 65 74 65 63 74 54 65 78 74  ult {{DetectText
1c8d0 41 66 66 69 6e 69 74 79 2c 20 44 65 74 65 63 74  Affinity, Detect
1c8e0 53 74 72 69 6e 67 54 79 70 65 7d 5c 0d 0a 7b 44  StringType}\..{D
1c8f0 65 74 65 63 74 54 65 78 74 41 66 66 69 6e 69 74  etectTextAffinit
1c900 79 2c 20 44 65 74 65 63 74 53 74 72 69 6e 67 54  y, DetectStringT
1c910 79 70 65 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  ype}}}....######
1c920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c960 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
1c970 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
1c980 31 2e 37 30 20 7b 4c 49 4e 51 20 77 2f 53 74 72  1.70 {LINQ w/Str
1c990 69 6e 67 2e 53 75 62 73 74 72 69 6e 67 20 4d 65  ing.Substring Me
1c9a0 74 68 6f 64 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  thod} -body {.. 
1c9b0 20 63 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 62   copySampleDatab
1c9c0 61 73 65 46 69 6c 65 73 0d 0a 0d 0a 20 20 73 65  aseFiles....  se
1c9d0 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
1c9e0 0a 20 20 73 65 74 20 6f 75 74 70 75 74 20 22 22  .  set output ""
1c9f0 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
1ca00 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 74 65 73  catch {..    tes
1ca10 74 43 6c 72 45 78 65 63 20 24 74 65 73 74 4c 69  tClrExec $testLi
1ca20 6e 71 45 78 65 46 69 6c 65 20 5b 6c 69 73 74 20  nqExeFile [list 
1ca30 2d 65 76 65 6e 74 66 6c 61 67 73 20 57 61 69 74  -eventflags Wait
1ca40 20 2d 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   -directory \.. 
1ca50 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72         [file dir
1ca60 6e 61 6d 65 20 24 74 65 73 74 4c 69 6e 71 45 78  name $testLinqEx
1ca70 65 46 69 6c 65 5d 20 2d 6e 6f 63 61 72 72 69 61  eFile] -nocarria
1ca80 67 65 72 65 74 75 72 6e 73 20 2d 73 74 64 6f 75  gereturns -stdou
1ca90 74 20 6f 75 74 70 75 74 20 5c 0d 0a 20 20 20 20  t output \..    
1caa0 20 20 20 20 2d 73 75 63 63 65 73 73 20 53 75 63      -success Suc
1cab0 63 65 73 73 5d 20 2d 73 75 62 73 74 72 69 6e 67  cess] -substring
1cac0 0d 0a 20 20 7d 20 65 72 72 6f 72 5d 0d 0a 0d 0a  ..  } error]....
1cad0 20 20 74 6c 6f 67 20 22 2d 2d 2d 2d 20 42 45 47    tlog "---- BEG
1cae0 49 4e 20 53 54 44 4f 55 54 20 4f 55 54 50 55 54  IN STDOUT OUTPUT
1caf0 5c 6e 22 0d 0a 20 20 74 6c 6f 67 20 24 6f 75 74  \n"..  tlog $out
1cb00 70 75 74 0d 0a 20 20 74 6c 6f 67 20 22 5c 6e 2d  put..  tlog "\n-
1cb10 2d 2d 2d 20 45 4e 44 20 53 54 44 4f 55 54 20 4f  --- END STDOUT O
1cb20 55 54 50 55 54 5c 6e 22 0d 0a 0d 0a 20 20 6c 61  UTPUT\n"....  la
1cb30 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 63 6f  ppend result $co
1cb40 64 65 0d 0a 0d 0a 20 20 69 66 20 7b 24 63 6f 64  de....  if {$cod
1cb50 65 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e == 0} then {..
1cb60 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
1cb70 6c 74 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  lt [string trim 
1cb80 24 6f 75 74 70 75 74 5d 0d 0a 20 20 7d 20 65 6c  $output]..  } el
1cb90 73 65 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e  se {..    lappen
1cba0 64 20 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67  d result [string
1cbb0 20 74 72 69 6d 20 24 65 72 72 6f 72 5d 0d 0a 20   trim $error].. 
1cbc0 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75   }....  set resu
1cbd0 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
1cbe0 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
1cbf0 70 6c 61 69 6e 20 63 6f 64 65 20 6f 75 74 70 75  plain code outpu
1cc00 74 20 65 72 72 6f 72 20 72 65 73 75 6c 74 0d 0a  t error result..
1cc10 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
1cc20 65 61 67 6c 65 20 6d 6f 6e 6f 54 6f 44 6f 20 53  eagle monoToDo S
1cc30 51 4c 69 74 65 20 66 69 6c 65 5f 53 79 73 74 65  QLite file_Syste
1cc40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1cc50 6c 20 74 65 73 74 45 78 65 63 5c 0d 0a 66 69 6c  l testExec\..fil
1cc60 65 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e_System.Data.SQ
1cc70 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 66 69  Lite.Linq.dll fi
1cc80 6c 65 5f 74 65 73 74 6c 69 6e 71 2e 65 78 65 20  le_testlinq.exe 
1cc90 66 69 6c 65 5f 6e 6f 72 74 68 77 69 6e 64 45 46  file_northwindEF
1cca0 2e 64 62 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20  .db} \..-result 
1ccb0 7b 30 20 7b 54 72 75 65 20 54 72 75 65 20 54 72  {0 {True True Tr
1ccc0 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75  ue True True Tru
1ccd0 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65  e True True True
1cce0 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20   True True True 
1ccf0 54 72 75 65 5c 0d 0a 54 72 75 65 20 54 72 75 65  True\..True True
1cd00 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20   True True True 
1cd10 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54  True True True T
1cd20 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72  rue True True Tr
1cd30 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75  ue True True Tru
1cd40 65 20 54 72 75 65 5c 0d 0a 54 72 75 65 20 54 72  e True\..True Tr
1cd50 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75  ue True True Tru
1cd60 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65  e True True True
1cd70 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20   True True True 
1cd80 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54  True True True T
1cd90 72 75 65 20 54 72 75 65 5c 0d 0a 54 72 75 65 20  rue True\..True 
1cda0 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54  True True True T
1cdb0 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72  rue True True Tr
1cdc0 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75  ue True True Tru
1cdd0 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65  e True True True
1cde0 20 54 72 75 65 20 54 72 75 65 5c 0d 0a 54 72 75   True True\..Tru
1cdf0 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65  e True True True
1ce00 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20   True True True 
1ce10 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54  True True True T
1ce20 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72  rue True True Tr
1ce30 75 65 20 54 72 75 65 20 54 72 75 65 5c 0d 0a 54  ue True True\..T
1ce40 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72  rue True True Tr
1ce50 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75  ue True True Tru
1ce60 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65  e True True True
1ce70 20 54 72 75 65 20 54 72 75 65 20 54 72 75 65 20   True True True 
1ce80 54 72 75 65 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23  True}}}....#####
1ce90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ceb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1cec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ced0 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
1cee0 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
1cef0 2d 31 2e 37 31 20 7b 66 74 73 35 20 65 78 74 65  -1.71 {fts5 exte
1cf00 6e 73 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d  nsion} -setup {.
1cf10 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
1cf20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
1cf30 37 31 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  71.db]..} -body 
1cf40 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  {..  set connect
1cf50 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
1cf60 74 69 6f 6e 5d 0d 0a 20 20 73 65 74 20 72 65 73  tion]..  set res
1cf70 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
1cf80 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 45 6e 61 62  $connection Enab
1cf90 6c 65 45 78 74 65 6e 73 69 6f 6e 73 20 74 72 75  leExtensions tru
1cfa0 65 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69  e....  $connecti
1cfb0 6f 6e 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  on LoadExtension
1cfc0 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74 43 6f   \..      [getCo
1cfd0 72 65 45 78 74 65 6e 73 69 6f 6e 42 69 6e 61 72  reExtensionBinar
1cfe0 79 46 69 6c 65 4e 61 6d 65 20 6e 75 6c 6c 5d 20  yFileName null] 
1cff0 73 71 6c 69 74 65 33 5f 66 74 73 35 5f 69 6e 69  sqlite3_fts5_ini
1d000 74 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  t....  lappend r
1d010 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
1d020 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
1d030 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 66  ar $db "SELECT f
1d040 74 73 35 5f 73 6f 75 72 63 65 5f 69 64 28 29 3b  ts5_source_id();
1d050 22 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  "]....  lappend 
1d060 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
1d070 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
1d080 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
1d090 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
1d0a0 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
1d0b0 66 74 73 35 28 78 2c 20 70 72 65 66 69 78 3d 5c  fts5(x, prefix=\
1d0c0 22 31 5c 22 29 3b 22 5d 0d 0a 0d 0a 20 20 66 6f  "1\");"]....  fo
1d0d0 72 65 61 63 68 20 78 20 5b 6c 69 73 74 20 63 61  reach x [list ca
1d0e0 74 20 64 6f 67 20 68 6f 72 73 65 20 68 6f 75 73  t dog horse hous
1d0f0 65 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e  e] {..    lappen
1d100 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
1d110 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
1d120 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20  calar $db \..   
1d130 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
1d140 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
1d150 28 78 29 20 56 41 4c 55 45 53 28 27 22 20 24 78  (x) VALUES('" $x
1d160 20 22 27 29 3b 22 5d 5d 0d 0a 20 20 7d 0d 0a 0d   "');"]]..  }...
1d170 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
1d180 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
1d190 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
1d1a0 66 6f 72 6d 61 74 20 64 69 63 74 69 6f 6e 61 72  format dictionar
1d1b0 79 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  y $db \..      "
1d1c0 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 78 20  SELECT rowid, x 
1d1d0 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
1d1e0 20 4d 41 54 43 48 20 27 68 2a 27 3b 22 5d 0d 0a   MATCH 'h*';"]..
1d1f0 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
1d200 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
1d210 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  freeDbConnection
1d220 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
1d230 6f 6d 70 6c 61 69 6e 20 78 20 72 65 73 75 6c 74  omplain x result
1d240 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20   connection.... 
1d250 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1d260 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
1d270 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66  -nocomplain db f
1d280 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
1d290 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
1d2a0 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
1d2b0 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
1d2c0 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
1d2d0 20 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65   SQLite\..define
1d2e0 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
1d2f0 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
1d300 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49  ROP_FTS5_EXTENSI
1d310 4f 4e 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  ON\..System.Data
1d320 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e  .SQLite SQLiteIn
1d330 74 65 72 6f 70 7d 20 2d 6d 61 74 63 68 20 72 65  terop} -match re
1d340 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  gexp -result \..
1d350 7b 5e 5c 7b 66 74 73 35 3a 20 5c 64 7b 34 7d 2d  {^\{fts5: \d{4}-
1d360 5c 64 7b 32 7d 2d 5c 64 7b 32 7d 20 5c 64 7b 32  \d{2}-\d{2} \d{2
1d370 7d 3a 5c 64 7b 32 7d 3a 5c 64 7b 32 7d 20 5b 30  }:\d{2}:\d{2} [0
1d380 2d 39 61 2d 66 5d 7b 34 30 2c 36 34 7d 5c 7d 20  -9a-f]{40,64}\} 
1d390 5c 7b 5c 7d 20 5c 7b 5c 7d 20 5c 7b 5c 7d 5c 0d  \{\} \{\} \{\}\.
1d3a0 0a 5c 7b 5c 7d 20 5c 7b 5c 7d 20 5c 7b 72 6f 77  .\{\} \{\} \{row
1d3b0 69 64 20 33 20 78 20 68 6f 72 73 65 20 72 6f 77  id 3 x horse row
1d3c0 69 64 20 34 20 78 20 68 6f 75 73 65 5c 7d 24 7d  id 4 x house\}$}
1d3d0 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
1d3e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d3f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d420 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
1d430 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 37 32 20  {test data-1.72 
1d440 7b 75 6e 62 69 6e 64 20 66 75 6e 63 74 69 6f 6e  {unbind function
1d450 20 66 72 6f 6d 20 61 20 63 6f 6e 6e 65 63 74 69   from a connecti
1d460 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  on} -setup {..  
1d470 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
1d480 61 2d 31 2e 37 32 2e 64 62 0d 0a 7d 20 2d 62 6f  a-1.72.db..} -bo
1d490 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
1d4a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
1d4b0 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
1d4c0 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
1d4d0 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
1d4e0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
1d4f0 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
1d500 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
1d510 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20  set sql { \..   
1d520 20 53 45 4c 45 43 54 20 4d 79 52 61 6e 64 6f 6d   SELECT MyRandom
1d530 28 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  (); \..  }....  
1d540 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1d550 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
1d560 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
1d570 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
1d580 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
1d590 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20  using System;.. 
1d5a0 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
1d5b0 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a  Data.SQLite;....
1d5c0 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44      namespace _D
1d5d0 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20  ynamic${id}..   
1d5e0 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63   {..      public
1d5f0 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
1d600 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f   : SQLiteFunctio
1d610 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  n..      {..    
1d620 20 20 20 20 70 72 69 76 61 74 65 20 52 61 6e 64      private Rand
1d630 6f 6d 20 72 61 6e 64 6f 6d 3b 0d 0a 20 20 20 20  om random;..    
1d640 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1d650 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ic SQLiteFunctio
1d660 6e 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74  nAttribute funct
1d670 69 6f 6e 41 74 74 72 69 62 75 74 65 3b 0d 0a 20  ionAttribute;.. 
1d680 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1d690 74 61 74 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e  tatic SQLiteConn
1d6a0 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
1d6b0 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n;....        //
1d6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d700 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d710 20 70 75 62 6c 69 63 20 54 65 73 74 24 7b 69 64   public Test${id
1d720 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  }()..        {..
1d730 20 20 20 20 20 20 20 20 20 20 72 61 6e 64 6f 6d            random
1d740 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
1d750 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1d760 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d7b0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1d7c0 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
1d7d0 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20   Invoke(..      
1d7e0 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61      object\[\] a
1d7f0 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29  rgs..          )
1d800 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1d810 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 61         return ra
1d820 6e 64 6f 6d 2e 4e 65 78 74 28 29 3b 0d 0a 20 20  ndom.Next();..  
1d830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d840 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1d890 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1d8a0 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61  atic void Initia
1d8b0 6c 69 7a 65 28 29 0d 0a 20 20 20 20 20 20 20 20  lize()..        
1d8c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
1d8d0 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
1d8e0 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  te == null)..   
1d8f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d900 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 41 74        functionAt
1d910 74 72 69 62 75 74 65 20 3d 20 6e 65 77 20 53 51  tribute = new SQ
1d920 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
1d930 69 62 75 74 65 28 0d 0a 20 20 20 20 20 20 20 20  ibute(..        
1d940 20 20 20 20 20 20 20 20 22 4d 79 52 61 6e 64 6f          "MyRando
1d950 6d 22 2c 20 30 2c 20 46 75 6e 63 74 69 6f 6e 54  m", 0, FunctionT
1d960 79 70 65 2e 53 63 61 6c 61 72 29 3b 0d 0a 20 20  ype.Scalar);..  
1d970 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d980 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65         if (conne
1d990 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ction == null)..
1d9a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d9b0 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
1d9c0 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
1d9d0 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
1d9f0 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
1da00 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74  Source};[getTest
1da10 50 72 6f 70 65 72 74 69 65 73 5d 22 29 3b 0d 0a  Properties]");..
1da20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
1da30 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
1da40 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
1da50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1da60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1daa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1dab0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1dac0 61 74 69 63 20 76 6f 69 64 20 42 69 6e 64 46 75  atic void BindFu
1dad0 6e 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20 20 20  nction()..      
1dae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 49    {..          I
1daf0 6e 69 74 69 61 6c 69 7a 65 28 29 3b 0d 0a 0d 0a  nitialize();....
1db00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
1db10 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f  tion.BindFunctio
1db20 6e 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  n(functionAttrib
1db30 75 74 65 2c 20 6e 65 77 20 54 65 73 74 24 7b 69  ute, new Test${i
1db40 64 7d 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  d}());..        
1db50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dba0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1dbb0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62  public static ob
1dbc0 6a 65 63 74 20 43 61 6c 6c 46 75 6e 63 74 69 6f  ject CallFunctio
1dbd0 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
1dbe0 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
1dbf0 6c 69 7a 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  lize();....     
1dc00 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
1dc10 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
1dc20 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  d = new SQLiteCo
1dc30 6d 6d 61 6e 64 28 22 24 7b 73 71 6c 7d 22 2c 0d  mmand("${sql}",.
1dc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
1dc50 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20  onnection))..   
1dc60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1dc70 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d        return com
1dc80 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c  mand.ExecuteScal
1dc90 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ar();..         
1dca0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1dcb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1dcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1dd10 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 55  ic static bool U
1dd20 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 29 0d  nbindFunction().
1dd30 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1dd40 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65        Initialize
1dd50 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1dd60 20 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69   return connecti
1dd70 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  on.UnbindFunctio
1dd80 6e 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  n(functionAttrib
1dd90 75 74 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ute);..        }
1dda0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ddb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddf0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1de00 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
1de10 64 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 28 29  d Uninitialize()
1de20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1de30 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65         if (conne
1de40 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ction != null)..
1de50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1de60 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
1de70 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
1de80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
1de90 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  tion = null;..  
1dea0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1deb0 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
1dec0 69 6f 6e 41 74 74 72 69 62 75 74 65 20 21 3d 20  ionAttribute != 
1ded0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1dee0 20 20 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69     functionAttri
1def0 62 75 74 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  bute = null;..  
1df00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1df10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1df60 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1df70 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
1df80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1df90 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1dfa0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
1dfb0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1dfc0 0a 20 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65  .  }] true false
1dfd0 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
1dfe0 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
1dff0 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
1e000 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
1e010 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
1e020 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
1e030 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
1e040 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
1e050 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
1e060 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
1e070 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
1e080 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
1e090 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
1e0a0 69 64 7d 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e  id} BindFunction
1e0b0 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
1e0c0 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
1e0d0 22 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  ""]}] \..      [
1e0e0 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74  extractSystemDat
1e0f0 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  aSQLiteException
1e100 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d  Message $result]
1e110 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
1e120 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
1e130 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
1e140 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1e150 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
1e160 65 73 74 24 7b 69 64 7d 20 43 61 6c 6c 46 75 6e  est${id} CallFun
1e170 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 72  ction..      } r
1e180 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
1e190 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20  sult ""]}] \..  
1e1a0 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
1e1b0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
1e1c0 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65  ptionMessage $re
1e1d0 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  sult] \..      [
1e1e0 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
1e1f0 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
1e200 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1e210 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
1e220 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 55 6e  id}.Test${id} Un
1e230 62 69 6e 64 46 75 6e 63 74 69 6f 6e 0d 0a 20 20  bindFunction..  
1e240 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
1e250 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
1e260 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72  ] \..      [extr
1e270 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
1e280 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
1e290 61 67 65 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a  age $result] \..
1e2a0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
1e2b0 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
1e2c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
1e2d0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
1e2e0 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
1e2f0 7b 69 64 7d 20 43 61 6c 6c 46 75 6e 63 74 69 6f  {id} CallFunctio
1e300 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  n..      } resul
1e310 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
1e320 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20   ""]}] \..      
1e330 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61  [extractSystemDa
1e340 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  taSQLiteExceptio
1e350 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c 74  nMessage $result
1e360 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
1e370 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
1e380 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
1e390 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
1e3a0 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
1e3b0 54 65 73 74 24 7b 69 64 7d 20 42 69 6e 64 46 75  Test${id} BindFu
1e3c0 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20  nction..      } 
1e3d0 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
1e3e0 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20  esult ""]}] \.. 
1e3f0 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73       [extractSys
1e400 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
1e410 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72  eptionMessage $r
1e420 65 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20  esult] \..      
1e430 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
1e440 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
1e450 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
1e460 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
1e470 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 43  {id}.Test${id} C
1e480 61 6c 6c 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  allFunction..   
1e490 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
1e4a0 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
1e4b0 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61   \..      [extra
1e4c0 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69  ctSystemDataSQLi
1e4d0 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61  teExceptionMessa
1e4e0 67 65 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a 20  ge $result] \.. 
1e4f0 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
1e500 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
1e510 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
1e520 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
1e530 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
1e540 69 64 7d 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65  id} Uninitialize
1e550 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
1e560 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
1e570 22 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  ""]}] \..      [
1e580 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74  extractSystemDat
1e590 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  aSQLiteException
1e5a0 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d  Message $result]
1e5b0 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
1e5c0 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
1e5d0 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
1e5e0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
1e5f0 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73  ult code results
1e600 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61   errors sql data
1e610 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61  Source id fileNa
1e620 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
1e630 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e  ts {eagle comman
1e640 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67  d.object monoBug
1e650 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
1e660 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
1e670 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
1e680 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43  .SQLite compileC
1e690 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65  Sharp} -match re
1e6a0 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f  gexp -result {^O
1e6b0 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
1e6c0 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
1e6d0 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
1e6e0 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 30 20 28 3f  \{\} 0 \{\} 0 (?
1e6f0 3a 2d 29 3f 5c 64 2b 20 30 20 54 72 75 65 20 31  :-)?\d+ 0 True 1
1e700 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65  \..\{SQL logic e
1e710 72 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67  rror( or missing
1e720 20 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e   database)? -- n
1e730 6f 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a  o such function:
1e740 20 4d 79 52 61 6e 64 6f 6d 5c 7d 20 30 20 5c 7b   MyRandom\} 0 \{
1e750 5c 7d 5c 0d 0a 30 20 28 3f 3a 2d 29 3f 5c 64 2b  \}\..0 (?:-)?\d+
1e760 20 30 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23   0 \{\}$}}....##
1e770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e7a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e7b0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1e7c0 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
1e7d0 61 74 61 2d 31 2e 37 33 20 7b 75 6e 62 69 6e 64  ata-1.73 {unbind
1e7e0 20 66 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20   functions from 
1e7f0 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 6e 20  a connection on 
1e800 63 6c 6f 73 65 7d 20 2d 73 65 74 75 70 20 7b 0d  close} -setup {.
1e810 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
1e820 64 61 74 61 2d 31 2e 37 33 2e 64 62 0d 0a 7d 20  data-1.73.db..} 
1e830 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
1e840 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
1e850 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
1e860 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
1e870 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
1e880 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1e890 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
1e8a0 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
1e8b0 0a 20 20 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a  .  set sql { \..
1e8c0 20 20 20 20 53 45 4c 45 43 54 20 4d 79 52 61 6e      SELECT MyRan
1e8d0 64 6f 6d 28 29 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  dom(); \..  }...
1e8e0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
1e8f0 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
1e900 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
1e910 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
1e920 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
1e930 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b     using System;
1e940 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
1e950 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
1e960 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
1e970 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
1e980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
1e990 6c 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  lic class Test${
1e9a0 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63  id} : SQLiteFunc
1e9b0 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  tion..      {.. 
1e9c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52         private R
1e9d0 61 6e 64 6f 6d 20 72 61 6e 64 6f 6d 3b 0d 0a 20  andom random;.. 
1e9e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1e9f0 74 61 74 69 63 20 53 51 4c 69 74 65 46 75 6e 63  tatic SQLiteFunc
1ea00 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 66 75  tionAttribute fu
1ea10 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 3b  nctionAttribute;
1ea20 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1ea30 65 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 43  e static SQLiteC
1ea40 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
1ea50 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tion;....       
1ea60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ea70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eaa0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1eab0 20 20 20 20 70 75 62 6c 69 63 20 54 65 73 74 24      public Test$
1eac0 7b 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20  {id}()..        
1ead0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 61 6e  {..          ran
1eae0 64 6f 6d 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  dom = new Random
1eaf0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
1eb00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
1eb60 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a  lic override obj
1eb70 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20  ect Invoke(..   
1eb80 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c         object\[\
1eb90 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20  ] args..        
1eba0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1ebb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ebc0 20 72 61 6e 64 6f 6d 2e 4e 65 78 74 28 29 3b 0d   random.Next();.
1ebd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ebe0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ec30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1ec40 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
1ec50 74 69 61 6c 69 7a 65 28 29 0d 0a 20 20 20 20 20  tialize()..     
1ec60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ec70 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  if (functionAttr
1ec80 69 62 75 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ibute == null)..
1ec90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1eca0 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f           functio
1ecb0 6e 41 74 74 72 69 62 75 74 65 20 3d 20 6e 65 77  nAttribute = new
1ecc0 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41   SQLiteFunctionA
1ecd0 74 74 72 69 62 75 74 65 28 0d 0a 20 20 20 20 20  ttribute(..     
1ece0 20 20 20 20 20 20 20 20 20 20 20 22 4d 79 52 61             "MyRa
1ecf0 6e 64 6f 6d 22 2c 20 30 2c 20 46 75 6e 63 74 69  ndom", 0, Functi
1ed00 6f 6e 54 79 70 65 2e 53 63 61 6c 61 72 29 3b 0d  onType.Scalar);.
1ed10 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1ed20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1ed30 6e 6e 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  nnection == null
1ed40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
1ed60 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
1ed70 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
1eda0 61 74 61 53 6f 75 72 63 65 7d 3b 50 6f 6f 6c 69  ataSource};Pooli
1edb0 6e 67 3d 54 72 75 65 3b 22 20 2b 0d 0a 20 20 20  ng=True;" +..   
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b 67               "[g
1edd0 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
1ede0 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73   UnbindFunctions
1edf0 4f 6e 43 6c 6f 73 65 5d 22 29 3b 0d 0a 0d 0a 20  OnClose]");.... 
1ee00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
1ee10 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20  ction.Open();.. 
1ee20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1ee30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ee40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ee50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ee90 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1eea0 63 20 76 6f 69 64 20 42 69 6e 64 46 75 6e 63 74  c void BindFunct
1eeb0 69 6f 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ion()..        {
1eec0 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e 69 74  ..          Init
1eed0 69 61 6c 69 7a 65 28 29 3b 0d 0a 0d 0a 20 20 20  ialize();....   
1eee0 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
1eef0 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 66  n.BindFunction(f
1ef00 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
1ef10 2c 20 6e 65 77 20 54 65 73 74 24 7b 69 64 7d 28  , new Test${id}(
1ef20 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
1ef30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
1ef90 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63  lic static objec
1efa0 74 20 43 61 6c 6c 46 75 6e 63 74 69 6f 6e 28 29  t CallFunction()
1efb0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1efc0 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
1efd0 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
1efe0 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
1eff0 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
1f000 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61   new SQLiteComma
1f010 6e 64 28 22 24 7b 73 71 6c 7d 22 2c 0d 0a 20 20  nd("${sql}",..  
1f020 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
1f030 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ection))..      
1f040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f050 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e     return comman
1f060 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
1f070 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
1f080 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1f090 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f0e0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
1f0f0 73 74 61 74 69 63 20 76 6f 69 64 20 43 6c 6f 73  static void Clos
1f100 65 41 6e 64 52 65 6f 70 65 6e 28 29 0d 0a 20 20  eAndReopen()..  
1f110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f120 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 28 29 3b     Initialize();
1f130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ....          co
1f140 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
1f150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  ;..          con
1f160 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
1f170 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1f180 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f1d0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
1f1e0 73 74 61 74 69 63 20 76 6f 69 64 20 55 6e 69 6e  static void Unin
1f1f0 69 74 69 61 6c 69 7a 65 28 29 0d 0a 20 20 20 20  itialize()..    
1f200 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f210 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20   if (connection 
1f220 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1f230 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f240 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
1f250 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
1f260 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d      connection =
1f270 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
1f280 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f290 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 41 74 74   if (functionAtt
1f2a0 72 69 62 75 74 65 20 21 3d 20 6e 75 6c 6c 29 0d  ribute != null).
1f2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6e  .            fun
1f2c0 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d  ctionAttribute =
1f2d0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
1f2e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f330 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f340 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
1f350 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
1f360 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f370 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
1f380 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f390 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
1f3a0 74 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20  true false true 
1f3b0 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
1f3c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1f3d0 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74  e.dll]....  list
1f3e0 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
1f3f0 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
1f400 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
1f410 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
1f420 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
1f430 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
1f440 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
1f450 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1f460 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
1f470 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 42 69  id}.Test${id} Bi
1f480 6e 64 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  ndFunction..    
1f490 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
1f4a0 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
1f4b0 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63  \..      [extrac
1f4c0 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  tSystemDataSQLit
1f4d0 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67  eExceptionMessag
1f4e0 65 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a 20 20  e $result] \..  
1f4f0 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
1f500 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
1f510 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
1f520 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
1f530 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
1f540 64 7d 20 43 61 6c 6c 46 75 6e 63 74 69 6f 6e 0d  d} CallFunction.
1f550 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
1f560 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
1f570 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  "]}] \..      [e
1f580 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61  xtractSystemData
1f590 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d  SQLiteExceptionM
1f5a0 65 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d 20  essage $result] 
1f5b0 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
1f5c0 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
1f5d0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
1f5e0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
1f5f0 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
1f600 73 74 24 7b 69 64 7d 20 43 6c 6f 73 65 41 6e 64  st${id} CloseAnd
1f610 52 65 6f 70 65 6e 0d 0a 20 20 20 20 20 20 7d 20  Reopen..      } 
1f620 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
1f630 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20  esult ""]}] \.. 
1f640 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73       [extractSys
1f650 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
1f660 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72  eptionMessage $r
1f670 65 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20  esult] \..      
1f680 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
1f690 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
1f6a0 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
1f6b0 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
1f6c0 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 43  {id}.Test${id} C
1f6d0 61 6c 6c 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  allFunction..   
1f6e0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
1f6f0 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
1f700 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61   \..      [extra
1f710 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69  ctSystemDataSQLi
1f720 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61  teExceptionMessa
1f730 67 65 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a 20  ge $result] \.. 
1f740 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
1f750 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
1f760 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
1f770 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
1f780 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
1f790 69 64 7d 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e  id} BindFunction
1f7a0 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
1f7b0 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
1f7c0 22 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  ""]}] \..      [
1f7d0 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74  extractSystemDat
1f7e0 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  aSQLiteException
1f7f0 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d  Message $result]
1f800 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
1f810 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
1f820 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
1f830 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1f840 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
1f850 65 73 74 24 7b 69 64 7d 20 43 61 6c 6c 46 75 6e  est${id} CallFun
1f860 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 72  ction..      } r
1f870 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
1f880 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20  sult ""]}] \..  
1f890 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
1f8a0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
1f8b0 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65  ptionMessage $re
1f8c0 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  sult] \..      [
1f8d0 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
1f8e0 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
1f8f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1f900 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
1f910 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 55 6e  id}.Test${id} Un
1f920 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20  initialize..    
1f930 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
1f940 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
1f950 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63  \..      [extrac
1f960 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  tSystemDataSQLit
1f970 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67  eExceptionMessag
1f980 65 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63  e $result]..} -c
1f990 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
1f9a0 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
1f9b0 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
1f9c0 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
1f9d0 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
1f9e0 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
1f9f0 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
1fa00 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
1fa10 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
1fa20 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
1fa30 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
1fa40 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
1fa50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1fa60 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  e compileCSharp}
1fa70 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
1fa80 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  result {^Ok\..Sy
1fa90 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
1faa0 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
1fab0 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
1fac0 20 5c 7b 5c 7d 20 30 20 28 3f 3a 2d 29 3f 5c 64   \{\} 0 (?:-)?\d
1fad0 2b 20 30 20 5c 7b 5c 7d 20 31 5c 0d 0a 5c 7b 53  + 0 \{\} 1\..\{S
1fae0 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 28 20  QL logic error( 
1faf0 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
1fb00 61 73 65 29 3f 20 2d 2d 20 6e 6f 20 73 75 63 68  ase)? -- no such
1fb10 20 66 75 6e 63 74 69 6f 6e 3a 20 4d 79 52 61 6e   function: MyRan
1fb20 64 6f 6d 5c 7d 20 30 20 5c 7b 5c 7d 5c 0d 0a 30  dom\} 0 \{\}\..0
1fb30 20 28 3f 3a 2d 29 3f 5c 64 2b 20 30 20 5c 7b 5c   (?:-)?\d+ 0 \{\
1fb40 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
1fb50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1fb90 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
1fba0 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
1fbb0 37 34 20 7b 62 69 6e 64 20 66 75 6e 63 74 69 6f  74 {bind functio
1fbc0 6e 73 20 75 73 69 6e 67 20 64 65 6c 65 67 61 74  ns using delegat
1fbd0 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 70  e} -setup {..  p
1fbe0 72 6f 63 20 67 65 74 4d 79 46 75 6e 63 41 72 67  roc getMyFuncArg
1fbf0 73 20 7b 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  s { argumentCoun
1fc00 74 20 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 72  t } {..    set r
1fc10 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
1fc20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64      for {set ind
1fc30 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20  ex 0} {$index < 
1fc40 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 7d 20  $argumentCount} 
1fc50 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
1fc60 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
1fc70 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 73  sult [appendArgs
1fc80 20 27 6d 79 46 75 6e 63 41 72 67 20 5b 65 78 70   'myFuncArg [exp
1fc90 72 20 7b 24 69 6e 64 65 78 20 2b 20 31 7d 5d 20  r {$index + 1}] 
1fca0 27 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ']..    }....   
1fcb0 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result.
1fcc0 0a 20 20 7d 0d 0a 0d 0a 20 20 70 72 6f 63 20 67  .  }....  proc g
1fcd0 65 74 48 61 73 68 43 6f 64 65 20 7b 20 76 61 6c  etHashCode { val
1fce0 75 65 20 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b  ue } {..    if {
1fcf0 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20  [isObjectHandle 
1fd00 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d  $value]} then {.
1fd10 0a 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75  .      if {$valu
1fd20 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65  e eq "null"} the
1fd30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
1fd40 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 20 65  urn 0..      } e
1fd50 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  lse {..        r
1fd60 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e  eturn [object in
1fd70 76 6f 6b 65 20 24 76 61 6c 75 65 20 47 65 74 48  voke $value GetH
1fd80 61 73 68 43 6f 64 65 5d 0d 0a 20 20 20 20 20 20  ashCode]..      
1fd90 7d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  }..    } else {.
1fda0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
1fdb0 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65  ng length $value
1fdc0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1fdd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30          return 0
1fde0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1fdf0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74  ..        set st
1fe00 72 69 6e 67 20 5b 6f 62 6a 65 63 74 20 63 72 65  ring [object cre
1fe10 61 74 65 20 53 74 72 69 6e 67 20 24 76 61 6c 75  ate String $valu
1fe20 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  e]....        re
1fe30 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76  turn [object inv
1fe40 6f 6b 65 20 24 73 74 72 69 6e 67 20 47 65 74 48  oke $string GetH
1fe50 61 73 68 43 6f 64 65 5d 0d 0a 20 20 20 20 20 20  ashCode]..      
1fe60 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  }..    }..  }...
1fe70 0a 20 20 70 72 6f 63 20 68 61 73 68 4d 61 6e 61  .  proc hashMana
1fe80 67 65 64 41 72 72 61 79 20 7b 20 61 72 72 61 79  gedArray { array
1fe90 20 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 64 61   } {..    set da
1fea0 74 61 20 22 22 0d 0a 0d 0a 20 20 20 20 69 66 20  ta ""....    if 
1feb0 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65  {[isObjectHandle
1fec0 20 24 61 72 72 61 79 5d 20 26 26 20 24 61 72 72   $array] && $arr
1fed0 61 79 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68  ay ne "null"} th
1fee0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  en {..      if {
1fef0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $
1ff00 61 72 72 61 79 20 47 65 74 54 79 70 65 2e 49 73  array GetType.Is
1ff10 41 72 72 61 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Array]} then {..
1ff20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74          for {set
1ff30 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65   index 0} {$inde
1ff40 78 20 3c 20 5b 24 61 72 72 61 79 20 4c 65 6e 67  x < [$array Leng
1ff50 74 68 5d 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  th]} {incr index
1ff60 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  } {..          s
1ff70 65 74 20 65 6c 65 6d 65 6e 74 20 5b 24 61 72 72  et element [$arr
1ff80 61 79 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61  ay -create -alia
1ff90 73 20 47 65 74 56 61 6c 75 65 20 24 69 6e 64 65  s GetValue $inde
1ffa0 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  x]....          
1ffb0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1ffc0 74 68 20 24 65 6c 65 6d 65 6e 74 5d 20 3e 20 30  th $element] > 0
1ffd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
1ffe0 20 20 20 20 20 20 61 70 70 65 6e 64 20 64 61 74        append dat
1fff0 61 20 5b 24 65 6c 65 6d 65 6e 74 20 54 6f 53 74  a [$element ToSt
20000 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 20  ring]..         
20010 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
20020 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 64 61         append da
20030 74 61 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  ta null..       
20040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
20050 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
20060 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 67  ...    return [g
20070 65 74 48 61 73 68 43 6f 64 65 20 5b 68 61 73 68  etHashCode [hash
20080 20 6e 6f 72 6d 61 6c 20 73 68 61 31 20 24 64 61   normal sha1 $da
20090 74 61 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 70  ta]]..  }....  p
200a0 72 6f 63 20 6d 79 46 75 6e 63 43 61 6c 6c 62 61  roc myFuncCallba
200b0 63 6b 20 7b 20 61 72 67 73 20 7d 20 7b 0d 0a 20  ck { args } {.. 
200c0 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength 
200d0 24 61 72 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65  $args] == 0} the
200e0 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72  n {..      error
200f0 20 22 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 61 72   "no function ar
20100 67 75 6d 65 6e 74 73 22 0d 0a 20 20 20 20 7d 0d  guments"..    }.
20110 0a 0d 0a 20 20 20 20 73 65 74 20 6e 61 6d 65 20  ...    set name 
20120 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 30 5d  [lindex $args 0]
20130 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 69 73 4f  ....    if {[isO
20140 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6e 61 6d  bjectHandle $nam
20150 65 5d 20 26 26 20 24 6e 61 6d 65 20 6e 65 20 22  e] && $name ne "
20160 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {.. 
20170 20 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 6f       set name [o
20180 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 6e 61  bject invoke $na
20190 6d 65 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20  me ToString]..  
201a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 73 77 69 74 63    }....    switc
201b0 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 6e 61 6d  h -exact -- $nam
201c0 65 20 7b 0d 0a 20 20 20 20 20 20 49 6e 76 6f 6b  e {..      Invok
201d0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
201e0 75 72 6e 20 5b 68 61 73 68 4d 61 6e 61 67 65 64  urn [hashManaged
201f0 41 72 72 61 79 20 5b 6c 69 6e 64 65 78 20 24 61  Array [lindex $a
20200 72 67 73 20 65 6e 64 5d 5d 0d 0a 20 20 20 20 20  rgs end]]..     
20210 20 7d 0d 0a 20 20 20 20 20 20 53 74 65 70 20 7b   }..      Step {
20220 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61  ..        set va
20230 72 4e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 24 61  rName [lindex $a
20240 72 67 73 20 65 6e 64 5d 0d 0a 0d 0a 20 20 20 20  rgs end]....    
20250 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
20260 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d  length $varName]
20270 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {.. 
20280 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 22           error "
20290 69 6e 76 61 6c 69 64 20 61 67 67 72 65 67 61 74  invalid aggregat
202a0 65 20 63 6f 6e 74 65 78 74 20 76 61 72 69 61 62  e context variab
202b0 6c 65 20 6e 61 6d 65 22 0d 0a 20 20 20 20 20 20  le name"..      
202c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75    }....        u
202d0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 
202e0 63 74 78 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ctx....        i
202f0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20300 20 63 74 78 5d 20 7c 7c 20 5b 73 74 72 69 6e 67   ctx] || [string
20310 20 6c 65 6e 67 74 68 20 24 63 74 78 5d 20 3d 3d   length $ctx] ==
20320 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
20330 20 20 20 20 20 20 73 65 74 20 63 74 78 20 5b 70        set ctx [p
20340 69 64 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  id]..        }..
20350 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 68 61  ..        set ha
20360 73 68 43 74 78 20 5b 67 65 74 48 61 73 68 43 6f  shCtx [getHashCo
20370 64 65 20 24 63 74 78 5d 0d 0a 20 20 20 20 20 20  de $ctx]..      
20380 20 20 73 65 74 20 68 61 73 68 41 72 67 73 20 5b    set hashArgs [
20390 68 61 73 68 4d 61 6e 61 67 65 64 41 72 72 61 79  hashManagedArray
203a0 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 65   [lindex $args e
203b0 6e 64 2d 32 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  nd-2]]....      
203c0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
203d0 74 73 20 3a 3a 61 67 67 72 65 67 61 74 65 44 61  ts ::aggregateDa
203e0 74 61 28 24 68 61 73 68 43 74 78 29 5d 7d 20 74  ta($hashCtx)]} t
203f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
20400 20 69 6e 63 72 20 3a 3a 61 67 67 72 65 67 61 74   incr ::aggregat
20410 65 44 61 74 61 28 24 68 61 73 68 43 74 78 29 20  eData($hashCtx) 
20420 24 68 61 73 68 41 72 67 73 0d 0a 20 20 20 20 20  $hashArgs..     
20430 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
20440 20 20 20 20 20 20 20 73 65 74 20 3a 3a 61 67 67         set ::agg
20450 72 65 67 61 74 65 44 61 74 61 28 24 68 61 73 68  regateData($hash
20460 43 74 78 29 20 24 68 61 73 68 41 72 67 73 0d 0a  Ctx) $hashArgs..
20470 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20480 20 7d 0d 0a 20 20 20 20 20 20 46 69 6e 61 6c 20   }..      Final 
20490 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
204a0 74 78 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73  tx [lindex $args
204b0 20 65 6e 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 20   end]....       
204c0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
204d0 67 74 68 20 24 63 74 78 5d 20 3d 3d 20 30 7d 20  gth $ctx] == 0} 
204e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
204f0 20 20 65 72 72 6f 72 20 22 69 6e 76 61 6c 69 64    error "invalid
20500 20 61 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65   aggregate conte
20510 78 74 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  xt"..        }..
20520 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 68 61  ..        set ha
20530 73 68 43 74 78 20 5b 67 65 74 48 61 73 68 43 6f  shCtx [getHashCo
20540 64 65 20 24 63 74 78 5d 0d 0a 0d 0a 20 20 20 20  de $ctx]....    
20550 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
20560 69 73 74 73 20 3a 3a 61 67 67 72 65 67 61 74 65  ists ::aggregate
20570 44 61 74 61 28 24 68 61 73 68 43 74 78 29 5d 7d  Data($hashCtx)]}
20580 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
20590 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 61 67 67     return $::agg
205a0 72 65 67 61 74 65 44 61 74 61 28 24 68 61 73 68  regateData($hash
205b0 43 74 78 29 0d 0a 20 20 20 20 20 20 20 20 7d 20  Ctx)..        } 
205c0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
205d0 20 20 65 72 72 6f 72 20 22 6d 69 73 73 69 6e 67    error "missing
205e0 20 61 67 67 72 65 67 61 74 65 20 63 6f 6e 74 65   aggregate conte
205f0 78 74 20 64 61 74 61 22 0d 0a 20 20 20 20 20 20  xt data"..      
20600 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
20610 20 20 20 20 43 6f 6d 70 61 72 65 20 7b 0d 0a 20      Compare {.. 
20620 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 3a         lappend :
20630 3a 63 6f 6d 70 61 72 65 52 65 73 75 6c 74 73 20  :compareResults 
20640 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
20650 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20  create \..      
20660 20 20 20 20 20 20 49 6e 74 33 32 20 50 61 72 73        Int32 Pars
20670 65 20 5b 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  e [string compar
20680 65 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20  e [lindex $args 
20690 31 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  1] \..          
206a0 20 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20    [lindex $args 
206b0 32 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2]]]....        
206c0 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24  return [lindex $
206d0 3a 3a 63 6f 6d 70 61 72 65 52 65 73 75 6c 74 73  ::compareResults
206e0 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a   end]..      }..
206f0 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d        default {.
20700 0a 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b  .        error [
20710 61 70 70 65 6e 64 41 72 67 73 20 22 75 6e 6b 6e  appendArgs "unkn
20720 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c  own function cal
20730 6c 62 61 63 6b 20 5c 22 22 20 24 6e 61 6d 65 20  lback \"" $name 
20740 5c 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \"]..      }..  
20750 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 70 72    }..  }....  pr
20760 6f 63 20 6d 79 46 75 6e 63 49 6e 76 6f 6b 65 43  oc myFuncInvokeC
20770 61 6c 6c 62 61 63 6b 20 7b 20 70 61 72 61 6d 30  allback { param0
20780 20 6f 62 6a 73 20 7d 20 7b 0d 0a 20 20 20 20 72   objs } {..    r
20790 65 74 75 72 6e 20 5b 6d 79 46 75 6e 63 43 61 6c  eturn [myFuncCal
207a0 6c 62 61 63 6b 20 24 70 61 72 61 6d 30 20 24 6f  lback $param0 $o
207b0 62 6a 73 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 70  bjs]..  }....  p
207c0 72 6f 63 20 6d 79 46 75 6e 63 53 74 65 70 43 61  roc myFuncStepCa
207d0 6c 6c 62 61 63 6b 20 7b 20 70 61 72 61 6d 30 20  llback { param0 
207e0 6f 62 6a 73 20 73 74 65 70 4e 75 6d 62 65 72 20  objs stepNumber 
207f0 63 6f 6e 74 65 78 74 44 61 74 61 56 61 72 4e 61  contextDataVarNa
20800 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 75 70 76 61  me } {..    upva
20810 72 20 31 20 24 63 6f 6e 74 65 78 74 44 61 74 61  r 1 $contextData
20820 56 61 72 4e 61 6d 65 20 24 63 6f 6e 74 65 78 74  VarName $context
20830 44 61 74 61 56 61 72 4e 61 6d 65 0d 0a 20 20 20  DataVarName..   
20840 20 72 65 74 75 72 6e 20 5b 6d 79 46 75 6e 63 43   return [myFuncC
20850 61 6c 6c 62 61 63 6b 20 24 70 61 72 61 6d 30 20  allback $param0 
20860 24 6f 62 6a 73 20 24 73 74 65 70 4e 75 6d 62 65  $objs $stepNumbe
20870 72 20 24 63 6f 6e 74 65 78 74 44 61 74 61 56 61  r $contextDataVa
20880 72 4e 61 6d 65 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  rName]..  }.... 
20890 20 70 72 6f 63 20 6d 79 46 75 6e 63 46 69 6e 61   proc myFuncFina
208a0 6c 43 61 6c 6c 62 61 63 6b 20 7b 20 70 61 72 61  lCallback { para
208b0 6d 30 20 63 6f 6e 74 65 78 74 44 61 74 61 20 7d  m0 contextData }
208c0 20 7b 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b   {..    return [
208d0 6d 79 46 75 6e 63 43 61 6c 6c 62 61 63 6b 20 24  myFuncCallback $
208e0 70 61 72 61 6d 30 20 24 63 6f 6e 74 65 78 74 44  param0 $contextD
208f0 61 74 61 20 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ata ]..  }....  
20900 70 72 6f 63 20 6d 79 46 75 6e 63 43 6f 6d 70 61  proc myFuncCompa
20910 72 65 43 61 6c 6c 62 61 63 6b 20 7b 20 70 61 72  reCallback { par
20920 61 6d 30 20 70 61 72 61 6d 31 20 70 61 72 61 6d  am0 param1 param
20930 32 20 7d 20 7b 0d 0a 20 20 20 20 72 65 74 75 72  2 } {..    retur
20940 6e 20 5b 6d 79 46 75 6e 63 43 61 6c 6c 62 61 63  n [myFuncCallbac
20950 6b 20 24 70 61 72 61 6d 30 20 24 70 61 72 61 6d  k $param0 $param
20960 31 20 24 70 61 72 61 6d 32 5d 0d 0a 20 20 7d 0d  1 $param2]..  }.
20970 0a 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  ...  setupDb [se
20980 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
20990 31 2e 37 34 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  1.74.db]..} -bod
209a0 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
209b0 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54  te $db "CREATE T
209c0 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20  ABLE t1(x);"..  
209d0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
209e0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
209f0 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d  (x) VALUES(1);".
20a00 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
20a10 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
20a20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 32 29  t1 (x) VALUES(2)
20a30 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ;"..  sql execut
20a40 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
20a50 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
20a60 28 33 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65  (3);"..  sql exe
20a70 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
20a80 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c   INTO t1 (x) VAL
20a90 55 45 53 28 27 41 27 29 3b 22 0d 0a 20 20 73 71  UES('A');"..  sq
20aa0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
20ab0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
20ac0 29 20 56 41 4c 55 45 53 28 27 61 27 29 3b 22 0d  ) VALUES('a');".
20ad0 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
20ae0 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
20af0 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 27 4d  t1 (x) VALUES('M
20b00 27 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63  ');"..  sql exec
20b10 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
20b20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
20b30 45 53 28 27 6d 27 29 3b 22 0d 0a 20 20 73 71 6c  ES('m');"..  sql
20b40 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
20b50 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29  SERT INTO t1 (x)
20b60 20 56 41 4c 55 45 53 28 27 5a 27 29 3b 22 0d 0a   VALUES('Z');"..
20b70 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
20b80 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
20b90 31 20 28 78 29 20 56 41 4c 55 45 53 28 27 7a 27  1 (x) VALUES('z'
20ba0 29 3b 22 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e  );"....  set con
20bb0 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f  nection [getDbCo
20bc0 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 66  nnection]....  f
20bd0 6f 72 20 7b 73 65 74 20 61 72 67 75 6d 65 6e 74  or {set argument
20be0 43 6f 75 6e 74 20 30 7d 20 7b 24 61 72 67 75 6d  Count 0} {$argum
20bf0 65 6e 74 43 6f 75 6e 74 20 3c 20 33 7d 20 7b 69  entCount < 3} {i
20c00 6e 63 72 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  ncr argumentCoun
20c10 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 61 74  t} {..    set at
20c20 74 72 69 62 75 74 65 28 31 2c 24 61 72 67 75 6d  tribute(1,$argum
20c30 65 6e 74 43 6f 75 6e 74 29 20 5b 6f 62 6a 65 63  entCount) [objec
20c40 74 20 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20  t create \..    
20c50 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
20c60 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 75 6e  SQLite.SQLiteFun
20c70 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 5b  ctionAttribute [
20c80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
20c90 20 20 20 20 20 20 6d 79 46 75 6e 63 31 5f 37 34        myFunc1_74
20ca0 5f 31 5f 20 24 61 72 67 75 6d 65 6e 74 43 6f 75  _1_ $argumentCou
20cb0 6e 74 5d 20 24 61 72 67 75 6d 65 6e 74 43 6f 75  nt] $argumentCou
20cc0 6e 74 20 53 63 61 6c 61 72 5d 0d 0a 0d 0a 20 20  nt Scalar]....  
20cd0 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 6d    $connection -m
20ce0 61 72 73 68 61 6c 66 6c 61 67 73 20 5c 0d 0a 20  arshalflags \.. 
20cf0 20 20 20 20 20 20 20 7b 2d 53 74 72 69 63 74 4d         {-StrictM
20d00 61 74 63 68 54 79 70 65 20 2b 44 79 6e 61 6d 69  atchType +Dynami
20d10 63 43 61 6c 6c 62 61 63 6b 20 46 6f 72 63 65 50  cCallback ForceP
20d20 61 72 61 6d 65 74 65 72 54 79 70 65 7d 20 5c 0d  arameterType} \.
20d30 0a 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d 65  .        -parame
20d40 74 65 72 74 79 70 65 73 20 5b 6c 69 73 74 20 53  tertypes [list S
20d50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
20d60 65 2e 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  e.SQLiteFunction
20d70 41 74 74 72 69 62 75 74 65 20 5c 0d 0a 20 20 20  Attribute \..   
20d80 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
20d90 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
20da0 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67 61 74 65  teInvokeDelegate
20db0 20 44 65 6c 65 67 61 74 65 5d 20 5c 0d 0a 20 20   Delegate] \..  
20dc0 20 20 20 20 20 20 42 69 6e 64 46 75 6e 63 74 69        BindFuncti
20dd0 6f 6e 20 24 61 74 74 72 69 62 75 74 65 28 31 2c  on $attribute(1,
20de0 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 20  $argumentCount) 
20df0 5c 0d 0a 20 20 20 20 20 20 20 20 6d 79 46 75 6e  \..        myFun
20e00 63 49 6e 76 6f 6b 65 43 61 6c 6c 62 61 63 6b 20  cInvokeCallback 
20e10 6e 75 6c 6c 0d 0a 0d 0a 20 20 20 20 73 65 74 20  null....    set 
20e20 61 74 74 72 69 62 75 74 65 28 32 2c 24 61 72 67  attribute(2,$arg
20e30 75 6d 65 6e 74 43 6f 75 6e 74 29 20 5b 6f 62 6a  umentCount) [obj
20e40 65 63 74 20 63 72 65 61 74 65 20 5c 0d 0a 20 20  ect create \..  
20e50 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
20e60 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46  a.SQLite.SQLiteF
20e70 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
20e80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
20e90 20 20 20 20 20 20 20 20 6d 79 46 75 6e 63 31 5f          myFunc1_
20ea0 37 34 5f 32 5f 20 24 61 72 67 75 6d 65 6e 74 43  74_2_ $argumentC
20eb0 6f 75 6e 74 5d 20 24 61 72 67 75 6d 65 6e 74 43  ount] $argumentC
20ec0 6f 75 6e 74 20 41 67 67 72 65 67 61 74 65 5d 0d  ount Aggregate].
20ed0 0a 0d 0a 20 20 20 20 24 63 6f 6e 6e 65 63 74 69  ...    $connecti
20ee0 6f 6e 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73  on -marshalflags
20ef0 20 5c 0d 0a 20 20 20 20 20 20 20 20 7b 2d 53 74   \..        {-St
20f00 72 69 63 74 4d 61 74 63 68 54 79 70 65 20 2b 44  rictMatchType +D
20f10 79 6e 61 6d 69 63 43 61 6c 6c 62 61 63 6b 20 46  ynamicCallback F
20f20 6f 72 63 65 50 61 72 61 6d 65 74 65 72 54 79 70  orceParameterTyp
20f30 65 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 70  e} \..        -p
20f40 61 72 61 6d 65 74 65 72 74 79 70 65 73 20 5b 6c  arametertypes [l
20f50 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ist System.Data.
20f60 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 75 6e  SQLite.SQLiteFun
20f70 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 5c  ctionAttribute \
20f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
20f90 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
20fa0 2e 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65 67  .SQLiteStepDeleg
20fb0 61 74 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ate \..         
20fc0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
20fd0 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 69 6e 61  QLite.SQLiteFina
20fe0 6c 44 65 6c 65 67 61 74 65 5d 20 5c 0d 0a 20 20  lDelegate] \..  
20ff0 20 20 20 20 20 20 42 69 6e 64 46 75 6e 63 74 69        BindFuncti
21000 6f 6e 20 24 61 74 74 72 69 62 75 74 65 28 32 2c  on $attribute(2,
21010 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 20  $argumentCount) 
21020 5c 0d 0a 20 20 20 20 20 20 20 20 6d 79 46 75 6e  \..        myFun
21030 63 53 74 65 70 43 61 6c 6c 62 61 63 6b 20 6d 79  cStepCallback my
21040 46 75 6e 63 46 69 6e 61 6c 43 61 6c 6c 62 61 63  FuncFinalCallbac
21050 6b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  k..  }....  set 
21060 61 74 74 72 69 62 75 74 65 28 33 2c 30 29 20 5b  attribute(3,0) [
21070 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 5c 0d  object create \.
21080 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
21090 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
210a0 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
210b0 65 20 6d 79 46 75 6e 63 31 5f 37 34 5f 33 20 30  e myFunc1_74_3 0
210c0 20 5c 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61 74   \..      Collat
210d0 69 6f 6e 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65  ion]....  $conne
210e0 63 74 69 6f 6e 20 2d 6d 61 72 73 68 61 6c 66 6c  ction -marshalfl
210f0 61 67 73 20 5c 0d 0a 20 20 20 20 20 20 7b 2d 53  ags \..      {-S
21100 74 72 69 63 74 4d 61 74 63 68 54 79 70 65 20 2b  trictMatchType +
21110 44 79 6e 61 6d 69 63 43 61 6c 6c 62 61 63 6b 20  DynamicCallback 
21120 46 6f 72 63 65 50 61 72 61 6d 65 74 65 72 54 79  ForceParameterTy
21130 70 65 7d 20 5c 0d 0a 20 20 20 20 20 20 2d 70 61  pe} \..      -pa
21140 72 61 6d 65 74 65 72 74 79 70 65 73 20 5b 6c 69  rametertypes [li
21150 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
21160 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 75 6e 63  QLite.SQLiteFunc
21170 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 5c 0d  tionAttribute \.
21180 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65  .          Syste
21190 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
211a0 4c 69 74 65 43 6f 6d 70 61 72 65 44 65 6c 65 67  LiteCompareDeleg
211b0 61 74 65 20 44 65 6c 65 67 61 74 65 5d 20 5c 0d  ate Delegate] \.
211c0 0a 20 20 20 20 20 20 42 69 6e 64 46 75 6e 63 74  .      BindFunct
211d0 69 6f 6e 20 24 61 74 74 72 69 62 75 74 65 28 33  ion $attribute(3
211e0 2c 30 29 20 5c 0d 0a 20 20 20 20 20 20 6d 79 46  ,0) \..      myF
211f0 75 6e 63 43 6f 6d 70 61 72 65 43 61 6c 6c 62 61  uncCompareCallba
21200 63 6b 20 6e 75 6c 6c 0d 0a 0d 0a 20 20 66 6f 72  ck null....  for
21210 20 7b 73 65 74 20 61 72 67 75 6d 65 6e 74 43 6f   {set argumentCo
21220 75 6e 74 20 30 7d 20 7b 24 61 72 67 75 6d 65 6e  unt 0} {$argumen
21230 74 43 6f 75 6e 74 20 3c 20 33 7d 20 7b 69 6e 63  tCount < 3} {inc
21240 72 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 7d  r argumentCount}
21250 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
21260 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 0d  result [catch {.
21270 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75  .      sql execu
21280 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72  te $db [appendAr
21290 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
212a0 22 53 45 4c 45 43 54 20 22 20 6d 79 46 75 6e 63  "SELECT " myFunc
212b0 31 5f 37 34 5f 31 5f 20 24 61 72 67 75 6d 65 6e  1_74_1_ $argumen
212c0 74 43 6f 75 6e 74 20 28 20 5c 0d 0a 20 20 20 20  tCount ( \..    
212d0 20 20 20 20 20 20 5b 6a 6f 69 6e 20 5b 67 65 74        [join [get
212e0 4d 79 46 75 6e 63 41 72 67 73 20 24 61 72 67 75  MyFuncArgs $argu
212f0 6d 65 6e 74 43 6f 75 6e 74 5d 20 2c 5d 20 29 5c  mentCount] ,] )\
21300 3b 5d 0d 0a 20 20 20 20 7d 20 65 72 72 6f 72 5d  ;]..    } error]
21310 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 6c   $error....    l
21320 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
21330 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 73 71  atch {..      sq
21340 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61  l execute $db [a
21350 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..   
21360 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 22         "SELECT "
21370 20 6d 79 46 75 6e 63 31 5f 37 34 5f 32 5f 20 24   myFunc1_74_2_ $
21380 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 28 20  argumentCount ( 
21390 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6a 6f  \..          [jo
213a0 69 6e 20 5b 67 65 74 4d 79 46 75 6e 63 41 72 67  in [getMyFuncArg
213b0 73 20 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  s $argumentCount
213c0 5d 20 2c 5d 20 29 5c 3b 5d 0d 0a 20 20 20 20 7d  ] ,] )\;]..    }
213d0 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
213e0 20 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64    }....  lappend
213f0 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
21400 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74  ..    sql execut
21410 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
21420 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24  r -format list $
21430 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20 22 53  db \..        "S
21440 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31 20  ELECT x FROM t1 
21450 4f 52 44 45 52 20 42 59 20 78 20 43 4f 4c 4c 41  ORDER BY x COLLA
21460 54 45 20 6d 79 46 75 6e 63 31 5f 37 34 5f 33 3b  TE myFunc1_74_3;
21470 22 0d 0a 20 20 7d 20 65 72 72 6f 72 5d 20 24 65  "..  } error] $e
21480 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  rror....  lappen
21490 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65  d result [$conne
214a0 63 74 69 6f 6e 20 55 6e 62 69 6e 64 41 6c 6c 46  ction UnbindAllF
214b0 75 6e 63 74 69 6f 6e 73 20 66 61 6c 73 65 5d 0d  unctions false].
214c0 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 61 72  ...  for {set ar
214d0 67 75 6d 65 6e 74 43 6f 75 6e 74 20 30 7d 20 7b  gumentCount 0} {
214e0 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 3c  $argumentCount <
214f0 20 33 7d 20 7b 69 6e 63 72 20 61 72 67 75 6d 65   3} {incr argume
21500 6e 74 43 6f 75 6e 74 7d 20 7b 0d 0a 20 20 20 20  ntCount} {..    
21510 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
21520 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 73  catch {..      s
21530 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [
21540 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
21550 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
21560 22 20 6d 79 46 75 6e 63 31 5f 37 34 5f 31 5f 20  " myFunc1_74_1_ 
21570 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 28  $argumentCount (
21580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6a   \..          [j
21590 6f 69 6e 20 5b 67 65 74 4d 79 46 75 6e 63 41 72  oin [getMyFuncAr
215a0 67 73 20 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e  gs $argumentCoun
215b0 74 5d 20 2c 5d 20 29 5c 3b 5d 0d 0a 20 20 20 20  t] ,] )\;]..    
215c0 7d 20 65 72 72 6f 72 5d 20 5b 65 78 70 72 20 7b  } error] [expr {
215d0 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 5b 61  [string first [a
215e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..   
215f0 20 20 20 20 20 22 6e 6f 20 73 75 63 68 20 66 75       "no such fu
21600 6e 63 74 69 6f 6e 3a 20 6d 79 46 75 6e 63 31 5f  nction: myFunc1_
21610 37 34 5f 31 5f 22 20 24 61 72 67 75 6d 65 6e 74  74_1_" $argument
21620 43 6f 75 6e 74 5d 20 24 65 72 72 6f 72 5d 20 21  Count] $error] !
21630 3d 20 2d 31 7d 5d 0d 0a 0d 0a 20 20 20 20 6c 61  = -1}]....    la
21640 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
21650 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c  tch {..      sql
21660 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70   execute $db [ap
21670 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
21680 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 22 20        "SELECT " 
21690 6d 79 46 75 6e 63 31 5f 37 34 5f 32 5f 20 24 61  myFunc1_74_2_ $a
216a0 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 28 20 5c  rgumentCount ( \
216b0 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6a 6f 69  ..          [joi
216c0 6e 20 5b 67 65 74 4d 79 46 75 6e 63 41 72 67 73  n [getMyFuncArgs
216d0 20 24 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 5d   $argumentCount]
216e0 20 2c 5d 20 29 5c 3b 5d 0d 0a 20 20 20 20 7d 20   ,] )\;]..    } 
216f0 65 72 72 6f 72 5d 20 5b 65 78 70 72 20 7b 5b 73  error] [expr {[s
21700 74 72 69 6e 67 20 66 69 72 73 74 20 5b 61 70 70  tring first [app
21710 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
21720 20 20 20 22 6e 6f 20 73 75 63 68 20 66 75 6e 63     "no such func
21730 74 69 6f 6e 3a 20 6d 79 46 75 6e 63 31 5f 37 34  tion: myFunc1_74
21740 5f 32 5f 22 20 24 61 72 67 75 6d 65 6e 74 43 6f  _2_" $argumentCo
21750 75 6e 74 5d 20 24 65 72 72 6f 72 5d 20 21 3d 20  unt] $error] != 
21760 2d 31 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 6c  -1}]..  }....  l
21770 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
21780 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20  atch {..    sql 
21790 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
217a0 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
217b0 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20 20  list $db \..    
217c0 20 20 20 20 22 53 45 4c 45 43 54 20 78 20 46 52      "SELECT x FR
217d0 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78  OM t1 ORDER BY x
217e0 20 43 4f 4c 4c 41 54 45 20 6d 79 46 75 6e 63 31   COLLATE myFunc1
217f0 5f 37 34 5f 33 3b 22 0d 0a 20 20 7d 20 65 72 72  _74_3;"..  } err
21800 6f 72 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69  or] [expr {[stri
21810 6e 67 20 66 69 72 73 74 20 22 6e 6f 20 73 75 63  ng first "no suc
21820 68 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  h collation sequ
21830 65 6e 63 65 3a 20 6d 79 46 75 6e 63 31 5f 37 34  ence: myFunc1_74
21840 5f 33 22 20 5c 0d 0a 20 20 20 20 20 20 24 65 72  _3" \..      $er
21850 72 6f 72 5d 20 21 3d 20 2d 31 7d 5d 0d 0a 0d 0a  ror] != -1}]....
21860 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
21870 20 5b 61 72 72 61 79 20 73 69 7a 65 20 61 67 67   [array size agg
21880 72 65 67 61 74 65 44 61 74 61 5d 0d 0a 20 20 6c  regateData]..  l
21890 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 74  append result [t
218a0 65 73 74 41 72 72 61 79 47 65 74 20 61 67 67 72  estArrayGet aggr
218b0 65 67 61 74 65 44 61 74 61 5d 0d 0a 0d 0a 20 20  egateData]....  
218c0 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  set result..} -c
218d0 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
218e0 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
218f0 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65  ...  freeDbConne
21900 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 61 74 63 68  ction....  catch
21910 20 7b 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 63   {object removec
21920 61 6c 6c 62 61 63 6b 20 6d 79 46 75 6e 63 43 6f  allback myFuncCo
21930 6d 70 61 72 65 43 61 6c 6c 62 61 63 6b 7d 0d 0a  mpareCallback}..
21940 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20    catch {object 
21950 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 6d  removecallback m
21960 79 46 75 6e 63 46 69 6e 61 6c 43 61 6c 6c 62 61  yFuncFinalCallba
21970 63 6b 7d 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62  ck}..  catch {ob
21980 6a 65 63 74 20 72 65 6d 6f 76 65 63 61 6c 6c 62  ject removecallb
21990 61 63 6b 20 6d 79 46 75 6e 63 53 74 65 70 43 61  ack myFuncStepCa
219a0 6c 6c 62 61 63 6b 7d 0d 0a 20 20 63 61 74 63 68  llback}..  catch
219b0 20 7b 6f 62 6a 65 63 74 20 72 65 6d 6f 76 65 63   {object removec
219c0 61 6c 6c 62 61 63 6b 20 6d 79 46 75 6e 63 49 6e  allback myFuncIn
219d0 76 6f 6b 65 43 61 6c 6c 62 61 63 6b 7d 0d 0a 0d  vokeCallback}...
219e0 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  .  catch {..    
219f0 66 6f 72 65 61 63 68 20 63 6f 6d 70 61 72 65 52  foreach compareR
21a00 65 73 75 6c 74 20 24 63 6f 6d 70 61 72 65 52 65  esult $compareRe
21a10 73 75 6c 74 73 20 7b 0d 0a 20 20 20 20 20 20 63  sults {..      c
21a20 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73  atch {object dis
21a30 70 6f 73 65 20 24 63 6f 6d 70 61 72 65 52 65 73  pose $compareRes
21a40 75 6c 74 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  ult}..    }..  }
21a50 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
21a60 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 65  omplain result e
21a70 72 72 6f 72 20 63 6f 6d 70 61 72 65 52 65 73 75  rror compareResu
21a80 6c 74 20 63 6f 6d 70 61 72 65 52 65 73 75 6c 74  lt compareResult
21a90 73 20 5c 0d 0a 20 20 20 20 20 20 61 67 67 72 65  s \..      aggre
21aa0 67 61 74 65 44 61 74 61 20 61 72 67 75 6d 65 6e  gateData argumen
21ab0 74 43 6f 75 6e 74 20 61 74 74 72 69 62 75 74 65  tCount attribute
21ac0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66   connection db f
21ad0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 72 65 6e  ileName....  ren
21ae0 61 6d 65 20 6d 79 46 75 6e 63 43 6f 6d 70 61 72  ame myFuncCompar
21af0 65 43 61 6c 6c 62 61 63 6b 20 22 22 0d 0a 20 20  eCallback ""..  
21b00 72 65 6e 61 6d 65 20 6d 79 46 75 6e 63 46 69 6e  rename myFuncFin
21b10 61 6c 43 61 6c 6c 62 61 63 6b 20 22 22 0d 0a 20  alCallback "".. 
21b20 20 72 65 6e 61 6d 65 20 6d 79 46 75 6e 63 53 74   rename myFuncSt
21b30 65 70 43 61 6c 6c 62 61 63 6b 20 22 22 0d 0a 20  epCallback "".. 
21b40 20 72 65 6e 61 6d 65 20 6d 79 46 75 6e 63 49 6e   rename myFuncIn
21b50 76 6f 6b 65 43 61 6c 6c 62 61 63 6b 20 22 22 0d  vokeCallback "".
21b60 0a 20 20 72 65 6e 61 6d 65 20 6d 79 46 75 6e 63  .  rename myFunc
21b70 43 61 6c 6c 62 61 63 6b 20 22 22 0d 0a 20 20 72  Callback ""..  r
21b80 65 6e 61 6d 65 20 68 61 73 68 4d 61 6e 61 67 65  ename hashManage
21b90 64 41 72 72 61 79 20 22 22 0d 0a 20 20 72 65 6e  dArray ""..  ren
21ba0 61 6d 65 20 67 65 74 48 61 73 68 43 6f 64 65 20  ame getHashCode 
21bb0 22 22 0d 0a 20 20 72 65 6e 61 6d 65 20 67 65 74  ""..  rename get
21bc0 4d 79 46 75 6e 63 41 72 67 73 20 22 22 0d 0a 7d  MyFuncArgs ""..}
21bd0 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
21be0 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
21bf0 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  ect monoBug28 co
21c00 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
21c10 65 2e 44 41 54 41 5c 0d 0a 63 6f 6d 70 69 6c 65  e.DATA\..compile
21c20 2e 45 4d 49 54 20 53 51 4c 69 74 65 20 53 79 73  .EMIT SQLite Sys
21c30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
21c40 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
21c50 72 65 73 75 6c 74 20 7b 5e 30 20 2d 31 20 30 20  result {^0 -1 0 
21c60 2d 31 20 30 20 2d 31 5c 0d 0a 30 20 2d 31 20 30  -1 0 -1\..0 -1 0
21c70 20 2d 31 20 30 20 2d 31 20 30 20 5c 7b 31 20 32   -1 0 -1 0 \{1 2
21c80 20 33 20 41 20 61 20 4d 20 6d 20 5a 20 7a 5c 7d   3 A a M m Z z\}
21c90 20 54 72 75 65 20 31 20 54 72 75 65 20 31 20 54   True 1 True 1 T
21ca0 72 75 65 20 31 20 54 72 75 65 20 31 20 54 72 75  rue 1 True 1 Tru
21cb0 65 20 31 20 54 72 75 65 5c 0d 0a 31 20 54 72 75  e 1 True\..1 Tru
21cc0 65 20 31 20 54 72 75 65 20 31 20 5c 7b 28 3f 3a  e 1 True 1 \{(?:
21cd0 2d 29 3f 5c 64 2b 20 28 3f 3a 2d 29 3f 5c 64 2b  -)?\d+ (?:-)?\d+
21ce0 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  \}$}}....#######
21cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21d30 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
21d40 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
21d50 2e 37 35 20 7b 53 51 4c 69 74 65 43 6f 6d 6d 61  .75 {SQLiteComma
21d60 6e 64 2e 52 65 73 65 74 20 6d 65 74 68 6f 64 7d  nd.Reset method}
21d70 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
21d80 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
21d90 6d 65 20 64 61 74 61 2d 31 2e 37 35 2e 64 62 5d  me data-1.75.db]
21da0 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
21db0 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67  et connection [g
21dc0 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d  etDbConnection].
21dd0 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  ...  set result 
21de0 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c 20  [list]....  sql 
21df0 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
21e00 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
21e10 74 31 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45  t1(x);..    INSE
21e20 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
21e30 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20 20 20 49  ALUES(1);..    I
21e40 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
21e50 29 20 56 41 4c 55 45 53 28 32 29 3b 0d 0a 20 20  ) VALUES(2);..  
21e60 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
21e70 20 28 78 29 20 56 41 4c 55 45 53 28 33 29 3b 0d   (x) VALUES(3);.
21e80 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
21e90 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 34   t1 (x) VALUES(4
21ea0 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
21eb0 20 63 6f 6d 6d 61 6e 64 20 5b 24 63 6f 6e 6e 65   command [$conne
21ec0 63 74 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72 65  ction -alias Cre
21ed0 61 74 65 43 6f 6d 6d 61 6e 64 5d 0d 0a 20 20 73  ateCommand]..  s
21ee0 65 74 20 70 61 72 61 6d 65 74 65 72 20 5b 24 63  et parameter [$c
21ef0 6f 6d 6d 61 6e 64 20 2d 61 6c 69 61 73 20 43 72  ommand -alias Cr
21f00 65 61 74 65 50 61 72 61 6d 65 74 65 72 5d 0d 0a  eateParameter]..
21f10 0d 0a 20 20 24 70 61 72 61 6d 65 74 65 72 20 50  ..  $parameter P
21f20 61 72 61 6d 65 74 65 72 4e 61 6d 65 20 70 61 72  arameterName par
21f30 61 6d 31 0d 0a 20 20 24 70 61 72 61 6d 65 74 65  am1..  $paramete
21f40 72 20 44 62 54 79 70 65 20 49 6e 74 33 32 0d 0a  r DbType Int32..
21f50 20 20 24 70 61 72 61 6d 65 74 65 72 20 56 61 6c    $parameter Val
21f60 75 65 20 34 0d 0a 0d 0a 20 20 24 63 6f 6d 6d 61  ue 4....  $comma
21f70 6e 64 20 43 6f 6d 6d 61 6e 64 54 65 78 74 20 22  nd CommandText "
21f80 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
21f90 20 57 48 45 52 45 20 78 20 3c 20 3f 20 4f 52 44   WHERE x < ? ORD
21fa0 45 52 20 42 59 20 78 3b 22 0d 0a 20 20 24 63 6f  ER BY x;"..  $co
21fb0 6d 6d 61 6e 64 20 50 61 72 61 6d 65 74 65 72 73  mmand Parameters
21fc0 2e 41 64 64 20 24 70 61 72 61 6d 65 74 65 72 0d  .Add $parameter.
21fd0 0a 0d 0a 20 20 73 65 74 20 64 61 74 61 52 65 61  ...  set dataRea
21fe0 64 65 72 28 31 29 20 5b 24 63 6f 6d 6d 61 6e 64  der(1) [$command
21ff0 20 2d 61 6c 69 61 73 20 45 78 65 63 75 74 65 52   -alias ExecuteR
22000 65 61 64 65 72 5d 0d 0a 0d 0a 20 20 24 64 61 74  eader]....  $dat
22010 61 52 65 61 64 65 72 28 31 29 20 52 65 61 64 3b  aReader(1) Read;
22020 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
22030 5b 24 64 61 74 61 52 65 61 64 65 72 28 31 29 20  [$dataReader(1) 
22040 49 74 65 6d 20 78 5d 0d 0a 20 20 24 64 61 74 61  Item x]..  $data
22050 52 65 61 64 65 72 28 31 29 20 52 65 61 64 3b 20  Reader(1) Read; 
22060 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
22070 24 64 61 74 61 52 65 61 64 65 72 28 31 29 20 49  $dataReader(1) I
22080 74 65 6d 20 78 5d 0d 0a 20 20 24 64 61 74 61 52  tem x]..  $dataR
22090 65 61 64 65 72 28 31 29 20 44 69 73 70 6f 73 65  eader(1) Dispose
220a0 0d 0a 0d 0a 20 20 24 63 6f 6d 6d 61 6e 64 20 52  ....  $command R
220b0 65 73 65 74 3b 20 73 65 74 20 64 61 74 61 52 65  eset; set dataRe
220c0 61 64 65 72 28 32 29 20 5b 24 63 6f 6d 6d 61 6e  ader(2) [$comman
220d0 64 20 2d 61 6c 69 61 73 20 45 78 65 63 75 74 65  d -alias Execute
220e0 52 65 61 64 65 72 5d 0d 0a 20 20 24 64 61 74 61  Reader]..  $data
220f0 52 65 61 64 65 72 28 32 29 20 52 65 61 64 3b 20  Reader(2) Read; 
22100 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
22110 24 64 61 74 61 52 65 61 64 65 72 28 32 29 20 49  $dataReader(2) I
22120 74 65 6d 20 78 5d 0d 0a 20 20 24 64 61 74 61 52  tem x]..  $dataR
22130 65 61 64 65 72 28 32 29 20 52 65 61 64 3b 20 6c  eader(2) Read; l
22140 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24  append result [$
22150 64 61 74 61 52 65 61 64 65 72 28 32 29 20 49 74  dataReader(2) It
22160 65 6d 20 78 5d 0d 0a 20 20 24 64 61 74 61 52 65  em x]..  $dataRe
22170 61 64 65 72 28 32 29 20 44 69 73 70 6f 73 65 0d  ader(2) Dispose.
22180 0a 0d 0a 20 20 24 63 6f 6d 6d 61 6e 64 20 52 65  ...  $command Re
22190 73 65 74 3b 20 73 65 74 20 64 61 74 61 52 65 61  set; set dataRea
221a0 64 65 72 28 33 29 20 5b 24 63 6f 6d 6d 61 6e 64  der(3) [$command
221b0 20 2d 61 6c 69 61 73 20 45 78 65 63 75 74 65 52   -alias ExecuteR
221c0 65 61 64 65 72 5d 0d 0a 20 20 24 64 61 74 61 52  eader]..  $dataR
221d0 65 61 64 65 72 28 33 29 20 52 65 61 64 3b 20 6c  eader(3) Read; l
221e0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24  append result [$
221f0 64 61 74 61 52 65 61 64 65 72 28 33 29 20 49 74  dataReader(3) It
22200 65 6d 20 78 5d 0d 0a 20 20 24 64 61 74 61 52 65  em x]..  $dataRe
22210 61 64 65 72 28 33 29 20 52 65 61 64 3b 20 6c 61  ader(3) Read; la
22220 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 64  ppend result [$d
22230 61 74 61 52 65 61 64 65 72 28 33 29 20 49 74 65  ataReader(3) Ite
22240 6d 20 78 5d 0d 0a 20 20 24 64 61 74 61 52 65 61  m x]..  $dataRea
22250 64 65 72 28 33 29 20 44 69 73 70 6f 73 65 0d 0a  der(3) Dispose..
22260 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
22270 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
22280 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
22290 6e 20 64 61 74 61 52 65 61 64 65 72 20 70 61 72  n dataReader par
222a0 61 6d 65 74 65 72 20 63 6f 6d 6d 61 6e 64 0d 0a  ameter command..
222b0 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  ..  freeDbConnec
222c0 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  tion....  cleanu
222d0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
222e0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
222f0 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 6e 6e  lain result conn
22300 65 63 74 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61  ection db fileNa
22310 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
22320 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e  ts {eagle comman
22330 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67  d.object monoBug
22340 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
22350 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
22360 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
22370 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
22380 20 7b 31 20 32 20 31 20 32 20 31 20 32 7d 7d 0d   {1 2 1 2 1 2}}.
22390 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
223a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
223b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
223c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
223d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
223e0 23 23 0d 0a 0d 0a 73 65 74 20 66 69 6c 65 4e 61  ##....set fileNa
223f0 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e 61 74 69  me(1) [file nati
22400 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 5b 66  vename \..    [f
22410 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
22420 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
22430 64 61 74 61 2d 31 2e 37 36 2e 64 62 5d 5d 0d 0a  data-1.76.db]]..
22440 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
22450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22490 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
224a0 73 74 20 64 61 74 61 2d 31 2e 37 36 20 7b 53 51  st data-1.76 {SQ
224b0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 46  LiteConnection.F
224c0 69 6c 65 4e 61 6d 65 20 70 72 6f 70 65 72 74 79  ileName property
224d0 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
224e0 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
224f0 61 6d 65 28 32 29 20 64 61 74 61 2d 31 2e 37 36  ame(2) data-1.76
22500 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  .db]..} -body {.
22510 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f  .  set connectio
22520 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  n [getDbConnecti
22530 6f 6e 5d 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69  on]..  $connecti
22540 6f 6e 20 46 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  on FileName..} -
22550 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 66 72 65  cleanup {..  fre
22560 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
22570 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
22580 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  lain connection.
22590 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
225a0 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20  fileName(2).... 
225b0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
225c0 69 6e 20 64 62 0d 0a 7d 20 2d 63 6f 6e 73 74 72  in db..} -constr
225d0 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
225e0 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
225f0 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
22600 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
22610 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
22620 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
22630 75 6c 74 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  ult $fileName(1)
22640 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
22650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22690 23 23 23 23 0d 0a 0d 0a 75 6e 73 65 74 20 2d 6e  ####....unset -n
226a0 6f 63 6f 6d 70 6c 61 69 6e 20 66 69 6c 65 4e 61  ocomplain fileNa
226b0 6d 65 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  me....##########
226c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
226f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22700 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
22710 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 37 37   {test data-1.77
22720 20 7b 6a 73 6f 6e 31 20 65 78 74 65 6e 73 69 6f   {json1 extensio
22730 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  n} -setup {..  s
22740 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
22750 4e 61 6d 65 20 64 61 74 61 2d 31 2e 37 37 2e 64  Name data-1.77.d
22760 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
22770 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
22780 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   {..    CREATE T
22790 41 42 4c 45 20 62 69 67 28 6a 73 6f 6e 20 4a 53  ABLE big(json JS
227a0 4f 4e 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  ON);..    INSERT
227b0 20 49 4e 54 4f 20 62 69 67 20 28 6a 73 6f 6e 29   INTO big (json)
227c0 20 56 41 4c 55 45 53 28 32 29 3b 0d 0a 20 20 20   VALUES(2);..   
227d0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 69 67   INSERT INTO big
227e0 20 28 6a 73 6f 6e 29 20 56 41 4c 55 45 53 28 33   (json) VALUES(3
227f0 2e 35 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  .5);..    INSERT
22800 20 49 4e 54 4f 20 62 69 67 20 28 6a 73 6f 6e 29   INTO big (json)
22810 20 56 41 4c 55 45 53 28 27 74 72 75 65 27 29 3b   VALUES('true');
22820 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
22830 4f 20 62 69 67 20 28 6a 73 6f 6e 29 20 56 41 4c  O big (json) VAL
22840 55 45 53 28 27 66 61 6c 73 65 27 29 3b 0d 0a 20  UES('false');.. 
22850 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62     INSERT INTO b
22860 69 67 20 28 6a 73 6f 6e 29 20 56 41 4c 55 45 53  ig (json) VALUES
22870 28 27 6e 75 6c 6c 27 29 3b 0d 0a 20 20 20 20 49  ('null');..    I
22880 4e 53 45 52 54 20 49 4e 54 4f 20 62 69 67 20 28  NSERT INTO big (
22890 6a 73 6f 6e 29 20 56 41 4c 55 45 53 28 27 22 78  json) VALUES('"x
228a0 22 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  "');..    INSERT
228b0 20 49 4e 54 4f 20 62 69 67 20 28 6a 73 6f 6e 29   INTO big (json)
228c0 20 56 41 4c 55 45 53 28 27 5b 34 2c 20 35 2e 37   VALUES('[4, 5.7
228d0 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 6e  , true, false, n
228e0 75 6c 6c 2c 20 22 78 22 5d 27 29 3b 0d 0a 20 20  ull, "x"]');..  
228f0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 69    INSERT INTO bi
22900 67 20 28 6a 73 6f 6e 29 20 56 41 4c 55 45 53 28  g (json) VALUES(
22910 27 7b 22 61 22 20 3a 20 5b 38 2c 20 39 2e 31 2c  '{"a" : [8, 9.1,
22920 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 6e 75   true, false, nu
22930 6c 6c 2c 20 22 79 22 5d 7d 27 29 3b 0d 0a 20 20  ll, "y"]}');..  
22940 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65  }....  set conne
22950 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
22960 65 63 74 69 6f 6e 5d 0d 0a 20 20 73 65 74 20 72  ection]..  set r
22970 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
22980 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 45 6e    $connection En
22990 61 62 6c 65 45 78 74 65 6e 73 69 6f 6e 73 20 74  ableExtensions t
229a0 72 75 65 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63  rue....  $connec
229b0 74 69 6f 6e 20 4c 6f 61 64 45 78 74 65 6e 73 69  tion LoadExtensi
229c0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74  on \..      [get
229d0 43 6f 72 65 45 78 74 65 6e 73 69 6f 6e 42 69 6e  CoreExtensionBin
229e0 61 72 79 46 69 6c 65 4e 61 6d 65 20 6e 75 6c 6c  aryFileName null
229f0 5d 20 73 71 6c 69 74 65 33 5f 6a 73 6f 6e 5f 69  ] sqlite3_json_i
22a00 6e 69 74 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  nit....  lappend
22a10 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
22a20 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
22a30 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20  alar $db \..    
22a40 20 20 7b 53 45 4c 45 43 54 20 6a 73 6f 6e 28 27    {SELECT json('
22a50 7b 20 22 74 68 69 73 22 20 3a 20 22 69 73 22 2c  { "this" : "is",
22a60 20 22 61 22 3a 20 5b 20 22 74 65 73 74 22 20 5d   "a": [ "test" ]
22a70 20 7d 27 29 3b 7d 5d 0d 0a 0d 0a 20 20 6c 61 70   }');}]....  lap
22a80 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
22a90 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
22aa0 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
22ab0 20 6c 69 73 74 20 24 64 62 20 5c 0d 0a 20 20 20   list $db \..   
22ac0 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77 69 64     "SELECT rowid
22ad0 2c 20 6a 73 6f 6e 5f 74 79 70 65 28 6a 73 6f 6e  , json_type(json
22ae0 29 20 46 52 4f 4d 20 62 69 67 3b 22 5d 0d 0a 0d  ) FROM big;"]...
22af0 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
22b00 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
22b10 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
22b20 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20  format list $db 
22b30 7b 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 62 69  {..    SELECT bi
22b40 67 2e 72 6f 77 69 64 2c 20 66 75 6c 6c 6b 65 79  g.rowid, fullkey
22b50 2c 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 46  , value..      F
22b60 52 4f 4d 20 62 69 67 2c 20 6a 73 6f 6e 5f 74 72  ROM big, json_tr
22b70 65 65 28 62 69 67 2e 6a 73 6f 6e 29 0d 0a 20 20  ee(big.json)..  
22b80 20 20 20 57 48 45 52 45 20 6a 73 6f 6e 5f 74 72     WHERE json_tr
22b90 65 65 2e 74 79 70 65 20 4e 4f 54 20 49 4e 20 28  ee.type NOT IN (
22ba0 27 6f 62 6a 65 63 74 27 2c 20 27 61 72 72 61 79  'object', 'array
22bb0 27 29 3b 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 73  ');..  }]....  s
22bc0 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  et result..} -cl
22bd0 65 61 6e 75 70 20 7b 0d 0a 20 20 66 72 65 65 44  eanup {..  freeD
22be0 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20  bConnection.... 
22bf0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
22c00 69 6e 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63  in result connec
22c10 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  tion....  cleanu
22c20 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
22c30 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
22c40 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65  lain db fileName
22c50 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
22c60 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
22c70 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
22c80 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
22c90 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
22ca0 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
22cb0 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
22cc0 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 4a 53 4f  Lite.INTEROP_JSO
22cd0 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 5c 0d 0a 53  N1_EXTENSION\..S
22ce0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
22cf0 65 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 7d  e SQLiteInterop}
22d00 20 2d 72 65 73 75 6c 74 20 7b 7b 7b 22 74 68 69   -result {{{"thi
22d10 73 22 3a 22 69 73 22 2c 22 61 22 3a 5b 22 74 65  s":"is","a":["te
22d20 73 74 22 5d 7d 7d 20 7b 31 5c 0d 0a 69 6e 74 65  st"]}} {1\..inte
22d30 67 65 72 20 32 20 72 65 61 6c 20 33 20 74 72 75  ger 2 real 3 tru
22d40 65 20 34 20 66 61 6c 73 65 20 35 20 6e 75 6c 6c  e 4 false 5 null
22d50 20 36 20 74 65 78 74 20 37 20 61 72 72 61 79 20   6 text 7 array 
22d60 38 20 6f 62 6a 65 63 74 7d 20 7b 31 20 7b 24 7d  8 object} {1 {$}
22d70 20 32 20 32 20 7b 24 7d 5c 0d 0a 33 2e 35 20 33   2 2 {$}\..3.5 3
22d80 20 7b 24 7d 20 31 20 34 20 7b 24 7d 20 30 20 35   {$} 1 4 {$} 0 5
22d90 20 7b 24 7d 20 36 20 7b 24 7d 20 78 20 37 20 7b   {$} 6 {$} x 7 {
22da0 24 5b 30 5d 7d 20 34 20 37 20 7b 24 5b 31 5d 7d  $[0]} 4 7 {$[1]}
22db0 20 35 2e 37 20 37 20 7b 24 5b 32 5d 7d 20 31 20   5.7 7 {$[2]} 1 
22dc0 37 20 7b 24 5b 33 5d 7d 20 30 5c 0d 0a 37 20 7b  7 {$[3]} 0\..7 {
22dd0 24 5b 34 5d 7d 20 37 20 7b 24 5b 35 5d 7d 20 78  $[4]} 7 {$[5]} x
22de0 20 38 20 7b 24 2e 61 5b 30 5d 7d 20 38 20 38 20   8 {$.a[0]} 8 8 
22df0 7b 24 2e 61 5b 31 5d 7d 20 39 2e 31 20 38 20 7b  {$.a[1]} 9.1 8 {
22e00 24 2e 61 5b 32 5d 7d 20 31 20 38 20 7b 24 2e 61  $.a[2]} 1 8 {$.a
22e10 5b 33 5d 7d 20 30 20 38 5c 0d 0a 7b 24 2e 61 5b  [3]} 0 8\..{$.a[
22e20 34 5d 7d 20 38 20 7b 24 2e 61 5b 35 5d 7d 20 79  4]} 8 {$.a[5]} y
22e30 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }}}....#########
22e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22e80 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
22e90 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 37  t {test data-1.7
22ea0 38 20 7b 62 61 73 69 63 20 61 6e 64 20 65 78 74  8 {basic and ext
22eb0 65 6e 64 65 64 20 63 6f 6c 75 6d 6e 20 6d 65 74  ended column met
22ec0 61 64 61 74 61 7d 20 2d 73 65 74 75 70 20 7b 0d  adata} -setup {.
22ed0 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
22ee0 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
22ef0 37 38 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  78.db]..} -body 
22f00 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  {..  sql execute
22f10 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41   $db {..    CREA
22f20 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e  TE TABLE t1(x IN
22f30 54 45 47 45 52 2c 20 79 20 54 45 58 54 2c 20 7a  TEGER, y TEXT, z
22f40 20 4d 59 54 59 50 45 29 3b 0d 0a 20 20 20 20 49   MYTYPE);..    I
22f50 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
22f60 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 31  , y, z) VALUES(1
22f70 2c 20 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b 0d  , 'foo', 1234);.
22f80 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
22f90 20 74 31 20 28 78 2c 20 79 2c 20 7a 29 20 56 41   t1 (x, y, z) VA
22fa0 4c 55 45 53 28 31 2c 20 35 36 37 38 2c 20 27 62  LUES(1, 5678, 'b
22fb0 61 72 27 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ar');..  }....  
22fc0 73 65 74 20 64 61 74 61 52 65 61 64 65 72 20 5b  set dataReader [
22fd0 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
22fe0 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72  cute reader -for
22ff0 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20 5c  mat datareader \
23000 0d 0a 20 20 20 20 20 20 2d 61 6c 69 61 73 20 24  ..      -alias $
23010 64 62 20 22 53 45 4c 45 43 54 20 78 2c 20 79 2c  db "SELECT x, y,
23020 20 7a 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d   z FROM t1;"]...
23030 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
23040 69 73 74 5d 0d 0a 0d 0a 20 20 77 68 69 6c 65 20  ist]....  while 
23050 7b 5b 24 64 61 74 61 52 65 61 64 65 72 20 52 65  {[$dataReader Re
23060 61 64 5d 7d 20 7b 0d 0a 20 20 20 20 6c 61 70 70  ad]} {..    lapp
23070 65 6e 64 20 72 65 73 75 6c 74 20 5c 0d 0a 20 20  end result \..  
23080 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 24 64 61        [list [$da
23090 74 61 52 65 61 64 65 72 20 47 65 74 4f 72 64 69  taReader GetOrdi
230a0 6e 61 6c 20 78 5d 20 5b 24 64 61 74 61 52 65 61  nal x] [$dataRea
230b0 64 65 72 20 47 65 74 4e 61 6d 65 20 30 5d 20 5c  der GetName 0] \
230c0 0d 0a 20 20 20 20 20 20 20 20 5b 24 64 61 74 61  ..        [$data
230d0 52 65 61 64 65 72 20 47 65 74 56 61 6c 75 65 20  Reader GetValue 
230e0 30 5d 20 5b 24 64 61 74 61 52 65 61 64 65 72 20  0] [$dataReader 
230f0 47 65 74 44 61 74 61 62 61 73 65 4e 61 6d 65 20  GetDatabaseName 
23100 30 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24  0] \..        [$
23110 64 61 74 61 52 65 61 64 65 72 20 47 65 74 54 61  dataReader GetTa
23120 62 6c 65 4e 61 6d 65 20 30 5d 20 5b 24 64 61 74  bleName 0] [$dat
23130 61 52 65 61 64 65 72 20 47 65 74 4f 72 69 67 69  aReader GetOrigi
23140 6e 61 6c 4e 61 6d 65 20 30 5d 20 5c 0d 0a 20 20  nalName 0] \..  
23150 20 20 20 20 20 20 5b 24 64 61 74 61 52 65 61 64        [$dataRead
23160 65 72 20 47 65 74 44 61 74 61 54 79 70 65 4e 61  er GetDataTypeNa
23170 6d 65 20 30 5d 20 5c 0d 0a 20 20 20 20 20 20 20  me 0] \..       
23180 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 2d 74   [$dataReader -t
23190 6f 73 74 72 69 6e 67 20 47 65 74 46 69 65 6c 64  ostring GetField
231a0 54 79 70 65 20 30 5d 5d 20 5c 0d 0a 20 20 20 20  Type 0]] \..    
231b0 20 20 20 20 5b 6c 69 73 74 20 5b 24 64 61 74 61      [list [$data
231c0 52 65 61 64 65 72 20 47 65 74 4f 72 64 69 6e 61  Reader GetOrdina
231d0 6c 20 79 5d 20 5b 24 64 61 74 61 52 65 61 64 65  l y] [$dataReade
231e0 72 20 47 65 74 4e 61 6d 65 20 31 5d 20 5c 0d 0a  r GetName 1] \..
231f0 20 20 20 20 20 20 20 20 5b 24 64 61 74 61 52 65          [$dataRe
23200 61 64 65 72 20 47 65 74 56 61 6c 75 65 20 31 5d  ader GetValue 1]
23210 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 47 65   [$dataReader Ge
23220 74 44 61 74 61 62 61 73 65 4e 61 6d 65 20 31 5d  tDatabaseName 1]
23230 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24 64 61   \..        [$da
23240 74 61 52 65 61 64 65 72 20 47 65 74 54 61 62 6c  taReader GetTabl
23250 65 4e 61 6d 65 20 31 5d 20 5b 24 64 61 74 61 52  eName 1] [$dataR
23260 65 61 64 65 72 20 47 65 74 4f 72 69 67 69 6e 61  eader GetOrigina
23270 6c 4e 61 6d 65 20 31 5d 20 5c 0d 0a 20 20 20 20  lName 1] \..    
23280 20 20 20 20 5b 24 64 61 74 61 52 65 61 64 65 72      [$dataReader
23290 20 47 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65   GetDataTypeName
232a0 20 31 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b   1] \..        [
232b0 24 64 61 74 61 52 65 61 64 65 72 20 2d 74 6f 73  $dataReader -tos
232c0 74 72 69 6e 67 20 47 65 74 46 69 65 6c 64 54 79  tring GetFieldTy
232d0 70 65 20 31 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  pe 1]] \..      
232e0 20 20 5b 6c 69 73 74 20 5b 24 64 61 74 61 52 65    [list [$dataRe
232f0 61 64 65 72 20 47 65 74 4f 72 64 69 6e 61 6c 20  ader GetOrdinal 
23300 7a 5d 20 5b 24 64 61 74 61 52 65 61 64 65 72 20  z] [$dataReader 
23310 47 65 74 4e 61 6d 65 20 32 5d 20 5c 0d 0a 20 20  GetName 2] \..  
23320 20 20 20 20 20 20 5b 24 64 61 74 61 52 65 61 64        [$dataRead
23330 65 72 20 47 65 74 56 61 6c 75 65 20 32 5d 20 5b  er GetValue 2] [
23340 24 64 61 74 61 52 65 61 64 65 72 20 47 65 74 44  $dataReader GetD
23350 61 74 61 62 61 73 65 4e 61 6d 65 20 32 5d 20 5c  atabaseName 2] \
23360 0d 0a 20 20 20 20 20 20 20 20 5b 24 64 61 74 61  ..        [$data
23370 52 65 61 64 65 72 20 47 65 74 54 61 62 6c 65 4e  Reader GetTableN
23380 61 6d 65 20 32 5d 20 5b 24 64 61 74 61 52 65 61  ame 2] [$dataRea
23390 64 65 72 20 47 65 74 4f 72 69 67 69 6e 61 6c 4e  der GetOriginalN
233a0 61 6d 65 20 32 5d 20 5c 0d 0a 20 20 20 20 20 20  ame 2] \..      
233b0 20 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 47    [$dataReader G
233c0 65 74 44 61 74 61 54 79 70 65 4e 61 6d 65 20 32  etDataTypeName 2
233d0 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24 64  ] \..        [$d
233e0 61 74 61 52 65 61 64 65 72 20 2d 74 6f 73 74 72  ataReader -tostr
233f0 69 6e 67 20 47 65 74 46 69 65 6c 64 54 79 70 65  ing GetFieldType
23400 20 32 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73   2]]..  }....  s
23410 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  et result..} -cl
23420 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74  eanup {..  unset
23430 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74   -nocomplain dat
23440 61 52 65 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65  aReader....  cle
23450 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
23460 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
23470 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 64  omplain result d
23480 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
23490 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
234a0 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
234b0 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
234c0 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
234d0 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73  ATA SQLite\..Sys
234e0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
234f0 20 2d 72 65 73 75 6c 74 20 7b 7b 30 20 78 20 31   -result {{0 x 1
23500 20 6d 61 69 6e 20 74 31 20 78 20 49 4e 54 45 47   main t1 x INTEG
23510 45 52 20 53 79 73 74 65 6d 2e 49 6e 74 36 34 7d  ER System.Int64}
23520 20 7b 31 20 79 20 66 6f 6f 5c 0d 0a 6d 61 69 6e   {1 y foo\..main
23530 20 74 31 20 79 20 54 45 58 54 20 53 79 73 74 65   t1 y TEXT Syste
23540 6d 2e 53 74 72 69 6e 67 7d 20 7b 32 20 7a 20 31  m.String} {2 z 1
23550 32 33 34 20 6d 61 69 6e 20 74 31 20 7a 20 4d 59  234 main t1 z MY
23560 54 59 50 45 20 53 79 73 74 65 6d 2e 49 6e 74 36  TYPE System.Int6
23570 34 7d 20 7b 30 20 78 20 31 5c 0d 0a 6d 61 69 6e  4} {0 x 1\..main
23580 20 74 31 20 78 20 49 4e 54 45 47 45 52 20 53 79   t1 x INTEGER Sy
23590 73 74 65 6d 2e 49 6e 74 36 34 7d 20 7b 31 20 79  stem.Int64} {1 y
235a0 20 35 36 37 38 20 6d 61 69 6e 20 74 31 20 79 20   5678 main t1 y 
235b0 54 45 58 54 20 53 79 73 74 65 6d 2e 53 74 72 69  TEXT System.Stri
235c0 6e 67 7d 20 7b 32 20 7a 5c 0d 0a 62 61 72 20 6d  ng} {2 z\..bar m
235d0 61 69 6e 20 74 31 20 7a 20 4d 59 54 59 50 45 20  ain t1 z MYTYPE 
235e0 53 79 73 74 65 6d 2e 53 74 72 69 6e 67 7d 7d 7d  System.String}}}
235f0 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
23600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23610 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23620 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23640 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
23650 74 65 73 74 20 64 61 74 61 2d 31 2e 37 39 20 7b  test data-1.79 {
23660 44 61 74 65 54 69 6d 65 20 75 73 69 6e 67 20 49  DateTime using I
23670 6e 74 36 34 7d 20 2d 73 65 74 75 70 20 7b 0d 0a  nt64} -setup {..
23680 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66    setupDb [set f
23690 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 37  ileName data-1.7
236a0 39 2e 64 62 5d 20 22 22 20 55 6e 69 78 45 70 6f  9.db] "" UnixEpo
236b0 63 68 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  ch..} -body {.. 
236c0 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
236d0 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   {..    CREATE T
236e0 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45  ABLE t1(x INTEGE
236f0 52 2c 20 79 20 44 41 54 45 54 49 4d 45 29 3b 0d  R, y DATETIME);.
23700 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
23710 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45   t1 (x, y) VALUE
23720 53 28 31 2c 20 73 74 72 66 74 69 6d 65 28 27 25  S(1, strftime('%
23730 73 27 2c 20 27 32 30 33 38 2d 30 31 2d 32 30 27  s', '2038-01-20'
23740 29 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71  ));..  }....  sq
23750 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
23760 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61  te reader -forma
23770 74 20 6c 69 73 74 20 2d 64 61 74 65 74 69 6d 65  t list -datetime
23780 66 6f 72 6d 61 74 20 5c 0d 0a 20 20 20 20 20 20  format \..      
23790 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d  [getDateTimeForm
237a0 61 74 5d 20 24 64 62 20 22 53 45 4c 45 43 54 20  at] $db "SELECT 
237b0 78 2c 20 79 20 46 52 4f 4d 20 74 31 3b 22 0d 0a  x, y FROM t1;"..
237c0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
237d0 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
237e0 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
237f0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69  nocomplain db fi
23800 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
23810 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
23820 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
23830 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
23840 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
23850 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
23860 72 65 73 75 6c 74 20 5c 0d 0a 7b 31 20 7b 32 30  result \..{1 {20
23870 33 38 2d 30 31 2d 32 30 20 30 30 3a 30 30 3a 30  38-01-20 00:00:0
23880 30 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  0}}}....########
23890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
238d0 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
238e0 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
238f0 38 30 20 7b 70 61 67 65 20 73 69 7a 65 20 75 73  80 {page size us
23900 69 6e 67 20 50 52 41 47 4d 41 7d 20 2d 73 65 74  ing PRAGMA} -set
23910 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
23920 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
23930 74 61 2d 31 2e 38 30 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.80.db]..} -
23940 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65  body {..  set re
23950 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
23960 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
23970 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   {..    CREATE T
23980 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20 20  ABLE t1(x);..   
23990 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
239a0 28 78 29 20 56 41 4c 55 45 53 28 52 41 4e 44 4f  (x) VALUES(RANDO
239b0 4d 42 4c 4f 42 28 31 30 34 38 35 37 36 29 29 3b  MBLOB(1048576));
239c0 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65  ..  }....  lappe
239d0 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
239e0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
239f0 73 63 61 6c 61 72 20 24 64 62 20 7b 0d 0a 20 20  scalar $db {..  
23a00 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69    PRAGMA page_si
23a10 7a 65 3b 0d 0a 20 20 7d 5d 0d 0a 0d 0a 20 20 6c  ze;..  }]....  l
23a20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
23a30 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b  ql execute $db {
23a40 0d 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67  ..    PRAGMA pag
23a50 65 5f 73 69 7a 65 3d 38 31 39 32 3b 0d 0a 20 20  e_size=8192;..  
23a60 7d 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  }]....  lappend 
23a70 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
23a80 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 56  ute $db {..    V
23a90 41 43 55 55 4d 3b 0d 0a 20 20 7d 5d 0d 0a 0d 0a  ACUUM;..  }]....
23aa0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
23ab0 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
23ac0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
23ad0 62 20 7b 0d 0a 20 20 20 20 50 52 41 47 4d 41 20  b {..    PRAGMA 
23ae0 70 61 67 65 5f 73 69 7a 65 3b 0d 0a 20 20 7d 5d  page_size;..  }]
23af0 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
23b00 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
23b10 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
23b20 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
23b30 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ult db fileName.
23b40 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
23b50 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
23b60 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
23b70 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
23b80 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
23b90 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20  SQLite} -result 
23ba0 5c 0d 0a 5b 6c 69 73 74 20 5b 67 65 74 44 62 44  \..[list [getDbD
23bb0 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 5d 20  efaultPageSize] 
23bc0 2d 31 20 31 20 38 31 39 32 5d 7d 0d 0a 0d 0a 23  -1 1 8192]}....#
23bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
23c20 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
23c30 64 61 74 61 2d 31 2e 38 31 20 7b 53 51 4c 69 74  data-1.81 {SQLit
23c40 65 43 6f 6d 6d 61 6e 64 2e 56 65 72 69 66 79 4f  eCommand.VerifyO
23c50 6e 6c 79 20 6d 65 74 68 6f 64 7d 20 2d 73 65 74  nly method} -set
23c60 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
23c70 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
23c80 74 61 2d 31 2e 38 31 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.81.db]..} -
23c90 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f  body {..  set co
23ca0 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
23cb0 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....  
23cc0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
23cd0 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  {..    CREATE TA
23ce0 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20 20 20  BLE t1(x);..    
23cf0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
23d00 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20  x) VALUES(1);.. 
23d10 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
23d20 31 20 28 78 29 20 56 41 4c 55 45 53 28 32 29 3b  1 (x) VALUES(2);
23d30 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
23d40 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
23d50 33 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  3);..  }....  se
23d60 74 20 63 6f 6d 6d 61 6e 64 20 5b 24 63 6f 6e 6e  t command [$conn
23d70 65 63 74 69 6f 6e 20 2d 61 6c 69 61 73 20 43 72  ection -alias Cr
23d80 65 61 74 65 43 6f 6d 6d 61 6e 64 5d 0d 0a 0d 0a  eateCommand]....
23d90 20 20 73 65 74 20 63 6f 64 65 28 31 29 20 5b 63    set code(1) [c
23da0 61 74 63 68 20 7b 0d 0a 20 20 20 20 24 63 6f 6d  atch {..    $com
23db0 6d 61 6e 64 20 43 6f 6d 6d 61 6e 64 54 65 78 74  mand CommandText
23dc0 20 6e 75 6c 6c 0d 0a 20 20 20 20 24 63 6f 6d 6d   null..    $comm
23dd0 61 6e 64 20 56 65 72 69 66 79 4f 6e 6c 79 0d 0a  and VerifyOnly..
23de0 20 20 7d 20 72 65 73 75 6c 74 28 31 29 5d 0d 0a    } result(1)]..
23df0 0d 0a 20 20 73 65 74 20 63 6f 64 65 28 32 29 20  ..  set code(2) 
23e00 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 24 63  [catch {..    $c
23e10 6f 6d 6d 61 6e 64 20 43 6f 6d 6d 61 6e 64 54 65  ommand CommandTe
23e20 78 74 20 22 22 0d 0a 20 20 20 20 24 63 6f 6d 6d  xt ""..    $comm
23e30 61 6e 64 20 56 65 72 69 66 79 4f 6e 6c 79 0d 0a  and VerifyOnly..
23e40 20 20 7d 20 72 65 73 75 6c 74 28 32 29 5d 0d 0a    } result(2)]..
23e50 0d 0a 20 20 73 65 74 20 63 6f 64 65 28 33 29 20  ..  set code(3) 
23e60 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 24 63  [catch {..    $c
23e70 6f 6d 6d 61 6e 64 20 43 6f 6d 6d 61 6e 64 54 65  ommand CommandTe
23e80 78 74 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  xt "SELECT * FRO
23e90 4d 20 74 31 3b 22 0d 0a 20 20 20 20 24 63 6f 6d  M t1;"..    $com
23ea0 6d 61 6e 64 20 56 65 72 69 66 79 4f 6e 6c 79 0d  mand VerifyOnly.
23eb0 0a 20 20 7d 20 72 65 73 75 6c 74 28 33 29 5d 0d  .  } result(3)].
23ec0 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 28 34 29  ...  set code(4)
23ed0 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 24   [catch {..    $
23ee0 63 6f 6d 6d 61 6e 64 20 43 6f 6d 6d 61 6e 64 54  command CommandT
23ef0 65 78 74 20 22 53 45 4c 45 43 54 20 2a 20 46 52  ext "SELECT * FR
23f00 4f 4d 20 74 32 3b 22 0d 0a 20 20 20 20 24 63 6f  OM t2;"..    $co
23f10 6d 6d 61 6e 64 20 56 65 72 69 66 79 4f 6e 6c 79  mmand VerifyOnly
23f20 3b 20 23 20 74 68 72 6f 77 0d 0a 20 20 7d 20 72  ; # throw..  } r
23f30 65 73 75 6c 74 28 34 29 5d 0d 0a 0d 0a 20 20 73  esult(4)]....  s
23f40 65 74 20 63 6f 64 65 28 35 29 20 5b 63 61 74 63  et code(5) [catc
23f50 68 20 7b 0d 0a 20 20 20 20 24 63 6f 6d 6d 61 6e  h {..    $comman
23f60 64 20 43 6f 6d 6d 61 6e 64 54 65 78 74 20 22 42  d CommandText "B
23f70 41 44 20 43 4f 4d 4d 41 4e 44 3b 22 0d 0a 20 20  AD COMMAND;"..  
23f80 20 20 24 63 6f 6d 6d 61 6e 64 20 56 65 72 69 66    $command Verif
23f90 79 4f 6e 6c 79 3b 20 23 20 74 68 72 6f 77 0d 0a  yOnly; # throw..
23fa0 20 20 7d 20 72 65 73 75 6c 74 28 35 29 5d 0d 0a    } result(5)]..
23fb0 0d 0a 20 20 73 65 74 20 63 6f 64 65 28 36 29 20  ..  set code(6) 
23fc0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 24 63  [catch {..    $c
23fd0 6f 6d 6d 61 6e 64 20 43 6f 6d 6d 61 6e 64 54 65  ommand CommandTe
23fe0 78 74 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  xt "INSERT INTO 
23ff0 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 34 29  t1 (x) VALUES(4)
24000 3b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  ; SELECT * FROM 
24010 74 31 3b 22 0d 0a 20 20 20 20 24 63 6f 6d 6d 61  t1;"..    $comma
24020 6e 64 20 56 65 72 69 66 79 4f 6e 6c 79 0d 0a 20  nd VerifyOnly.. 
24030 20 7d 20 72 65 73 75 6c 74 28 36 29 5d 0d 0a 0d   } result(6)]...
24040 0a 20 20 73 65 74 20 63 6f 64 65 28 37 29 20 5b  .  set code(7) [
24050 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 24 63 6f  catch {..    $co
24060 6d 6d 61 6e 64 20 43 6f 6d 6d 61 6e 64 54 65 78  mmand CommandTex
24070 74 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  t "INSERT INTO t
24080 31 20 28 78 29 20 56 41 4c 55 45 53 28 35 29 3b  1 (x) VALUES(5);
24090 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
240a0 32 3b 22 0d 0a 20 20 20 20 24 63 6f 6d 6d 61 6e  2;"..    $comman
240b0 64 20 56 65 72 69 66 79 4f 6e 6c 79 3b 20 23 20  d VerifyOnly; # 
240c0 74 68 72 6f 77 0d 0a 20 20 7d 20 72 65 73 75 6c  throw..  } resul
240d0 74 28 37 29 5d 0d 0a 0d 0a 20 20 73 65 74 20 63  t(7)]....  set c
240e0 6f 64 65 28 38 29 20 5b 63 61 74 63 68 20 7b 0d  ode(8) [catch {.
240f0 0a 20 20 20 20 24 63 6f 6d 6d 61 6e 64 20 43 6f  .    $command Co
24100 6d 6d 61 6e 64 54 65 78 74 20 22 42 41 44 20 43  mmandText "BAD C
24110 4f 4d 4d 41 4e 44 3b 20 49 4e 53 45 52 54 20 49  OMMAND; INSERT I
24120 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
24130 53 28 36 29 3b 22 0d 0a 20 20 20 20 24 63 6f 6d  S(6);"..    $com
24140 6d 61 6e 64 20 56 65 72 69 66 79 4f 6e 6c 79 3b  mand VerifyOnly;
24150 20 23 20 74 68 72 6f 77 0d 0a 20 20 7d 20 72 65   # throw..  } re
24160 73 75 6c 74 28 38 29 5d 0d 0a 0d 0a 20 20 73 65  sult(8)]....  se
24170 74 20 63 6f 64 65 28 39 29 20 5b 63 61 74 63 68  t code(9) [catch
24180 20 7b 0d 0a 20 20 20 20 24 63 6f 6d 6d 61 6e 64   {..    $command
24190 20 43 6f 6d 6d 61 6e 64 54 65 78 74 20 22 53 45   CommandText "SE
241a0 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 20  LECT * FROM t2; 
241b0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
241c0 78 29 20 56 41 4c 55 45 53 28 37 29 3b 22 0d 0a  x) VALUES(7);"..
241d0 20 20 20 20 24 63 6f 6d 6d 61 6e 64 20 56 65 72      $command Ver
241e0 69 66 79 4f 6e 6c 79 3b 20 23 20 74 68 72 6f 77  ifyOnly; # throw
241f0 0d 0a 20 20 7d 20 72 65 73 75 6c 74 28 39 29 5d  ..  } result(9)]
24200 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
24210 28 31 30 29 20 5b 73 71 6c 20 65 78 65 63 75 74  (10) [sql execut
24220 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
24230 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 24  r -format list $
24240 64 62 20 7b 0d 0a 20 20 20 20 53 45 4c 45 43 54  db {..    SELECT
24250 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   * FROM t1 ORDER
24260 20 42 59 20 78 3b 0d 0a 20 20 7d 5d 0d 0a 0d 0a   BY x;..  }]....
24270 20 20 6c 69 73 74 20 24 63 6f 64 65 28 31 29 20    list $code(1) 
24280 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61  [extractSystemDa
24290 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  taSQLiteExceptio
242a0 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c 74  nMessage $result
242b0 28 31 29 5d 20 5c 0d 0a 20 20 20 20 20 20 24 63  (1)] \..      $c
242c0 6f 64 65 28 32 29 20 5b 65 78 74 72 61 63 74 53  ode(2) [extractS
242d0 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
242e0 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20  xceptionMessage 
242f0 24 72 65 73 75 6c 74 28 32 29 5d 20 5c 0d 0a 20  $result(2)] \.. 
24300 20 20 20 20 20 24 63 6f 64 65 28 33 29 20 5b 65       $code(3) [e
24310 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61  xtractSystemData
24320 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d  SQLiteExceptionM
24330 65 73 73 61 67 65 20 24 72 65 73 75 6c 74 28 33  essage $result(3
24340 29 5d 20 5c 0d 0a 20 20 20 20 20 20 24 63 6f 64  )] \..      $cod
24350 65 28 34 29 20 5b 65 78 74 72 61 63 74 53 79 73  e(4) [extractSys
24360 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
24370 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72  eptionMessage $r
24380 65 73 75 6c 74 28 34 29 5d 20 5c 0d 0a 20 20 20  esult(4)] \..   
24390 20 20 20 24 63 6f 64 65 28 35 29 20 5b 65 78 74     $code(5) [ext
243a0 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51  ractSystemDataSQ
243b0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73  LiteExceptionMes
243c0 73 61 67 65 20 24 72 65 73 75 6c 74 28 35 29 5d  sage $result(5)]
243d0 20 5c 0d 0a 20 20 20 20 20 20 24 63 6f 64 65 28   \..      $code(
243e0 36 29 20 5b 65 78 74 72 61 63 74 53 79 73 74 65  6) [extractSyste
243f0 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
24400 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73  tionMessage $res
24410 75 6c 74 28 36 29 5d 20 5c 0d 0a 20 20 20 20 20  ult(6)] \..     
24420 20 24 63 6f 64 65 28 37 29 20 5b 65 78 74 72 61   $code(7) [extra
24430 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69  ctSystemDataSQLi
24440 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61  teExceptionMessa
24450 67 65 20 24 72 65 73 75 6c 74 28 37 29 5d 20 5c  ge $result(7)] \
24460 0d 0a 20 20 20 20 20 20 24 63 6f 64 65 28 38 29  ..      $code(8)
24470 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
24480 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
24490 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c  onMessage $resul
244a0 74 28 38 29 5d 20 5c 0d 0a 20 20 20 20 20 20 24  t(8)] \..      $
244b0 63 6f 64 65 28 39 29 20 5b 65 78 74 72 61 63 74  code(9) [extract
244c0 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
244d0 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
244e0 20 24 72 65 73 75 6c 74 28 39 29 5d 20 5c 0d 0a   $result(9)] \..
244f0 20 20 20 20 20 20 24 72 65 73 75 6c 74 28 31 30        $result(10
24500 29 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  )..} -cleanup {.
24510 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
24520 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ion....  cleanup
24530 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
24540 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
24550 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
24560 63 6f 6d 6d 61 6e 64 20 63 6f 6e 6e 65 63 74 69  command connecti
24570 6f 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  on db fileName..
24580 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
24590 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
245a0 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63  ject monoBug28 c
245b0 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
245c0 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d  le.DATA SQLite\.
245d0 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
245e0 69 74 65 7d 20 2d 6d 61 74 63 68 20 72 65 67 65  ite} -match rege
245f0 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 30 20 5c  xp -result {^0 \
24600 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  {\} 0 \{\} 0 \{\
24610 7d 20 31 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 5c  } 1 \{SQL logic\
24620 0d 0a 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73  ..error( or miss
24630 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d  ing database)? -
24640 2d 20 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a  - no such table:
24650 20 74 32 5c 7d 20 31 20 5c 7b 53 51 4c 20 6c 6f   t2\} 1 \{SQL lo
24660 67 69 63 20 65 72 72 6f 72 28 20 6f 72 5c 0d 0a  gic error( or\..
24670 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
24680 29 3f 20 2d 2d 20 6e 65 61 72 20 22 42 41 44 22  )? -- near "BAD"
24690 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 5c 7d  : syntax error\}
246a0 20 30 20 5c 7b 5c 7d 20 31 20 5c 7b 53 51 4c 20   0 \{\} 1 \{SQL 
246b0 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72 5c  logic error( or\
246c0 0d 0a 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61  ..missing databa
246d0 73 65 29 3f 20 2d 2d 20 6e 6f 20 73 75 63 68 20  se)? -- no such 
246e0 74 61 62 6c 65 3a 20 74 32 5c 7d 20 31 20 5c 7b  table: t2\} 1 \{
246f0 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 28  SQL logic error(
24700 20 6f 72 20 6d 69 73 73 69 6e 67 5c 0d 0a 64 61   or missing\..da
24710 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 65 61 72  tabase)? -- near
24720 20 22 42 41 44 22 3a 20 73 79 6e 74 61 78 20 65   "BAD": syntax e
24730 72 72 6f 72 5c 7d 20 31 20 5c 7b 53 51 4c 20 6c  rror\} 1 \{SQL l
24740 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72 20 6d  ogic error( or m
24750 69 73 73 69 6e 67 5c 0d 0a 64 61 74 61 62 61 73  issing\..databas
24760 65 29 3f 20 2d 2d 20 6e 6f 20 73 75 63 68 20 74  e)? -- no such t
24770 61 62 6c 65 3a 20 74 32 5c 7d 20 5c 7b 31 20 32  able: t2\} \{1 2
24780 20 33 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23   3\}$}}....#####
24790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
247d0 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
247e0 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
247f0 2d 31 2e 38 32 20 7b 49 73 52 65 61 64 4f 6e 6c  -1.82 {IsReadOnl
24800 79 20 6d 65 74 68 6f 64 7d 20 2d 73 65 74 75 70  y method} -setup
24810 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61   {..  set fileNa
24820 6d 65 20 64 61 74 61 2d 31 2e 38 32 2e 64 62 0d  me data-1.82.db.
24830 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
24840 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
24850 0a 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69  ...  setupDb $fi
24860 6c 65 4e 61 6d 65 0d 0a 20 20 73 65 74 20 63 6f  leName..  set co
24870 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
24880 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....  
24890 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
248a0 63 61 74 63 68 20 7b 24 63 6f 6e 6e 65 63 74 69  catch {$connecti
248b0 6f 6e 20 49 73 52 65 61 64 4f 6e 6c 79 20 6e 75  on IsReadOnly nu
248c0 6c 6c 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ll} error] \..  
248d0 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
248e0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
248f0 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72  ptionMessage $er
24900 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  ror]....  lappen
24910 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
24920 7b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 49 73 52  {$connection IsR
24930 65 61 64 4f 6e 6c 79 20 77 72 6f 6e 67 7d 20 65  eadOnly wrong} e
24940 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  rror] \..      [
24950 65 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74  extractSystemDat
24960 61 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  aSQLiteException
24970 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72 5d 0d  Message $error].
24980 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
24990 20 24 64 62 20 7b 0d 0a 20 20 20 20 53 45 4c 45   $db {..    SELE
249a0 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
249b0 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 31 20  _master WHERE 1 
249c0 3d 20 30 3b 0d 0a 20 20 7d 3b 20 23 20 4e 4f 54  = 0;..  }; # NOT
249d0 45 3a 20 46 6f 72 63 65 20 66 69 6c 65 20 63 72  E: Force file cr
249e0 65 61 74 69 6f 6e 2e 0d 0a 0d 0a 20 20 66 72 65  eation.....  fre
249f0 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  eDbConnection.. 
24a00 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
24a10 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c  Name db true fal
24a20 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65  se false....  se
24a30 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  tupDb $fileName 
24a40 22 22 20 22 22 20 22 22 20 22 22 20 22 52 65 61  "" "" "" "" "Rea
24a50 64 20 4f 6e 6c 79 3d 54 72 75 65 3b 22 20 74 72  d Only=True;" tr
24a60 75 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 20  ue false..  set 
24a70 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
24a80 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a  bConnection]....
24a90 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
24aa0 20 5b 63 61 74 63 68 20 7b 24 63 6f 6e 6e 65 63   [catch {$connec
24ab0 74 69 6f 6e 20 49 73 52 65 61 64 4f 6e 6c 79 20  tion IsReadOnly 
24ac0 6e 75 6c 6c 7d 20 65 72 72 6f 72 5d 20 5c 0d 0a  null} error] \..
24ad0 20 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79        [extractSy
24ae0 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78  stemDataSQLiteEx
24af0 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24  ceptionMessage $
24b00 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 6c 61 70 70  error]....  lapp
24b10 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
24b20 68 20 7b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 49  h {$connection I
24b30 73 52 65 61 64 4f 6e 6c 79 20 77 72 6f 6e 67 7d  sReadOnly wrong}
24b40 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20   error] \..     
24b50 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
24b60 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
24b70 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72  onMessage $error
24b80 5d 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e  ]....  freeDbCon
24b90 6e 65 63 74 69 6f 6e 0d 0a 20 20 63 6c 65 61 6e  nection..  clean
24ba0 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64  upDb $fileName d
24bb0 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c  b true false fal
24bc0 73 65 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62 20  se....  setupDb 
24bd0 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20  $fileName "" "" 
24be0 22 22 20 22 22 20 22 52 65 61 64 20 4f 6e 6c 79  "" "" "Read Only
24bf0 3d 46 61 6c 73 65 3b 22 20 74 72 75 65 20 66 61  =False;" true fa
24c00 6c 73 65 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65  lse..  set conne
24c10 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
24c20 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 6c 61 70  ection]....  lap
24c30 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
24c40 63 68 20 7b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  ch {$connection 
24c50 49 73 52 65 61 64 4f 6e 6c 79 20 6e 75 6c 6c 7d  IsReadOnly null}
24c60 20 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20   error] \..     
24c70 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
24c80 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
24c90 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72 6f 72  onMessage $error
24ca0 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
24cb0 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 24 63  esult [catch {$c
24cc0 6f 6e 6e 65 63 74 69 6f 6e 20 49 73 52 65 61 64  onnection IsRead
24cd0 4f 6e 6c 79 20 77 72 6f 6e 67 7d 20 65 72 72 6f  Only wrong} erro
24ce0 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74  r] \..      [ext
24cf0 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51  ractSystemDataSQ
24d00 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73  LiteExceptionMes
24d10 73 61 67 65 20 24 65 72 72 6f 72 5d 0d 0a 0d 0a  sage $error]....
24d20 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69    freeDbConnecti
24d30 6f 6e 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  on..  cleanupDb 
24d40 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75  $fileName db tru
24d50 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 0d  e false false...
24d60 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
24d70 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 66   -cleanup {..  f
24d80 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d  reeDbConnection.
24d90 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
24da0 6d 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f  mplain connectio
24db0 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  n....  cleanupDb
24dc0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
24dd0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
24de0 6e 20 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64  n error result d
24df0 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
24e00 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
24e10 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
24e20 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
24e30 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
24e40 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73  ATA SQLite\..Sys
24e50 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
24e60 20 2d 72 65 73 75 6c 74 20 7b 30 20 46 61 6c 73   -result {0 Fals
24e70 65 20 31 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72  e 1 {unknown err
24e80 6f 72 20 2d 2d 20 64 61 74 61 62 61 73 65 20 22  or -- database "
24e90 77 72 6f 6e 67 22 20 6e 6f 74 5c 0d 0a 66 6f 75  wrong" not\..fou
24ea0 6e 64 7d 20 30 20 54 72 75 65 20 31 20 7b 75 6e  nd} 0 True 1 {un
24eb0 6b 6e 6f 77 6e 20 65 72 72 6f 72 20 2d 2d 20 64  known error -- d
24ec0 61 74 61 62 61 73 65 20 22 77 72 6f 6e 67 22 20  atabase "wrong" 
24ed0 6e 6f 74 20 66 6f 75 6e 64 7d 20 30 20 46 61 6c  not found} 0 Fal
24ee0 73 65 20 31 5c 0d 0a 7b 75 6e 6b 6e 6f 77 6e 20  se 1\..{unknown 
24ef0 65 72 72 6f 72 20 2d 2d 20 64 61 74 61 62 61 73  error -- databas
24f00 65 20 22 77 72 6f 6e 67 22 20 6e 6f 74 20 66 6f  e "wrong" not fo
24f10 75 6e 64 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  und}}}....######
24f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
24f60 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
24f70 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
24f80 31 2e 38 33 20 7b 62 69 6e 64 20 61 6e 64 20 75  1.83 {bind and u
24f90 73 65 20 52 45 47 45 58 50 20 66 75 6e 63 74 69  se REGEXP functi
24fa0 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  on} -setup {..  
24fb0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
24fc0 61 2d 31 2e 38 33 2e 64 62 0d 0a 7d 20 2d 62 6f  a-1.83.db..} -bo
24fd0 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
24fe0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
24ff0 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
25000 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
25010 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
25020 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
25030 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
25040 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
25050 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a  set sql(1) { \..
25060 20 20 20 20 53 45 4c 45 43 54 20 27 74 65 73 74      SELECT 'test
25070 27 20 52 45 47 45 58 50 20 27 5e 74 2e 3f 2e 3f  ' REGEXP '^t.?.?
25080 74 24 27 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  t$'; \..  }.... 
25090 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
250a0 0a 20 20 20 20 53 45 4c 45 43 54 20 27 6e 6f 27  .    SELECT 'no'
250b0 20 52 45 47 45 58 50 20 27 5e 6e 6f 70 65 24 27   REGEXP '^nope$'
250c0 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
250d0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
250e0 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
250f0 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
25100 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
25110 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
25120 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
25130 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
25140 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
25150 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78  using System.Tex
25160 74 2e 52 65 67 75 6c 61 72 45 78 70 72 65 73 73  t.RegularExpress
25170 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  ions;....    nam
25180 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
25190 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
251a0 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20     public class 
251b0 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
251c0 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  teFunction..    
251d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 72 69    {..        pri
251e0 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c 69  vate static SQLi
251f0 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
25200 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  ute functionAttr
25210 69 62 75 74 65 3b 0d 0a 20 20 20 20 20 20 20 20  ibute;..        
25220 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53  private static S
25230 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
25240 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0d 0a 0d 0a 20  connection;.... 
25250 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
252a0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
252b0 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
252c0 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20   Invoke(..      
252d0 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61      object\[\] a
252e0 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29  rgs..          )
252f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25300 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20         if (args 
25310 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25320 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
25330 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
25340 65 70 74 69 6f 6e 28 22 61 72 67 73 22 29 3b 0d  eption("args");.
25350 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
25360 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 21 3d 20  (args.Length != 
25370 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2)..            
25380 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75 6d  return new Argum
25390 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72  entException(Str
253a0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
253b0 20 20 20 20 20 20 20 20 20 20 20 22 6e 65 65 64             "need
253c0 20 65 78 61 63 74 6c 79 20 74 77 6f 20 61 72 67   exactly two arg
253d0 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b 30 7d 22  uments, got {0}"
253e0 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68 29 29 3b  , args.Length));
253f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ....          st
25400 72 69 6e 67 20 70 61 74 74 65 72 6e 20 3d 20 28  ring pattern = (
25410 61 72 67 73 5c 5b 30 5c 5d 20 21 3d 20 6e 75 6c  args\[0\] != nul
25420 6c 29 20 3f 20 61 72 67 73 5c 5b 30 5c 5d 2e 54  l) ? args\[0\].T
25430 6f 53 74 72 69 6e 67 28 29 20 3a 20 6e 75 6c 6c  oString() : null
25440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
25450 66 20 28 70 61 74 74 65 72 6e 20 3d 3d 20 6e 75  f (pattern == nu
25460 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25470 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75   return new Argu
25480 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
25490 6e 28 22 70 61 74 74 65 72 6e 22 29 3b 0d 0a 0d  n("pattern");...
254a0 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
254b0 67 20 69 6e 70 75 74 20 3d 20 28 61 72 67 73 5c  g input = (args\
254c0 5b 31 5c 5d 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  [1\] != null) ? 
254d0 61 72 67 73 5c 5b 31 5c 5d 2e 54 6f 53 74 72 69  args\[1\].ToStri
254e0 6e 67 28 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ng() : null;....
254f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
25500 70 75 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  put == null)..  
25510 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25520 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
25530 6c 45 78 63 65 70 74 69 6f 6e 28 22 69 6e 70 75  lException("inpu
25540 74 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t");....        
25550 20 20 72 65 74 75 72 6e 20 52 65 67 65 78 2e 49    return Regex.I
25560 73 4d 61 74 63 68 28 69 6e 70 75 74 2c 20 70 61  sMatch(input, pa
25570 74 74 65 72 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ttern);..       
25580 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
25590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
255e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
255f0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 28  void Initialize(
25600 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
25610 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
25620 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d  tionAttribute ==
25630 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25650 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75   functionAttribu
25660 74 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 46  te = new SQLiteF
25670 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
25680 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25690 20 20 20 22 72 65 67 65 78 70 22 2c 20 32 2c 20     "regexp", 2, 
256a0 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 53 63 61  FunctionType.Sca
256b0 6c 61 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lar);..         
256c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
256d0 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  if (connection =
256e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
256f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25700 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e    connection = n
25710 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
25720 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
25730 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
25740 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
25750 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74  ;[getTestPropert
25760 69 65 73 5d 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ies]");....     
25770 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
25780 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20  n.Open();..     
25790 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
257a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
257b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
257f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25800 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
25810 69 64 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28  id BindFunction(
25820 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
25830 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
25840 7a 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ze();....       
25850 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 69     connection.Bi
25860 6e 64 46 75 6e 63 74 69 6f 6e 28 66 75 6e 63 74  ndFunction(funct
25870 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 6e 65  ionAttribute, ne
25880 77 20 54 65 73 74 24 7b 69 64 7d 28 29 29 3b 0d  w Test${id}());.
25890 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
258a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
258b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
258f0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
25900 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 43 61  static object Ca
25910 6c 6c 46 75 6e 63 74 69 6f 6e 31 28 29 0d 0a 20  llFunction1().. 
25920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25930 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 28 29      Initialize()
25940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
25950 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
25960 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65  and command = ne
25970 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
25980 22 24 7b 73 71 6c 28 31 29 7d 22 2c 0d 0a 20 20  "${sql(1)}",..  
25990 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
259a0 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ection))..      
259b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
259c0 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e     return comman
259d0 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
259e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
259f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
25a00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25a50 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
25a60 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 43 61  static object Ca
25a70 6c 6c 46 75 6e 63 74 69 6f 6e 32 28 29 0d 0a 20  llFunction2().. 
25a80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25a90 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 28 29      Initialize()
25aa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
25ab0 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
25ac0 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65  and command = ne
25ad0 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28  w SQLiteCommand(
25ae0 22 24 7b 73 71 6c 28 32 29 7d 22 2c 0d 0a 20 20  "${sql(2)}",..  
25af0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
25b00 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ection))..      
25b10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25b20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e     return comman
25b30 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
25b40 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
25b50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
25b60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25bb0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
25bc0 73 74 61 74 69 63 20 62 6f 6f 6c 20 55 6e 62 69  static bool Unbi
25bd0 6e 64 46 75 6e 63 74 69 6f 6e 28 29 0d 0a 20 20  ndFunction()..  
25be0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25bf0 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 28 29 3b     Initialize();
25c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
25c10 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  turn connection.
25c20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 66  UnbindFunction(f
25c30 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
25c40 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
25c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
25c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
25cb0 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 55  ic static void U
25cc0 6e 69 6e 69 74 69 61 6c 69 7a 65 28 29 0d 0a 20  ninitialize().. 
25cd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25ce0 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69      if (connecti
25cf0 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
25d00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25d10 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
25d20 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
25d30 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
25d40 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  n = null;..     
25d50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25d60 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e      if (function
25d70 41 74 74 72 69 62 75 74 65 20 21 3d 20 6e 75 6c  Attribute != nul
25d80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25d90 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
25da0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
25db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e00 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25e10 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
25e20 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
25e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25e40 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
25e50 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
25e60 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
25e70 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74 72  }] true false tr
25e80 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
25e90 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
25ea0 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
25eb0 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
25ec0 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
25ed0 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
25ee0 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
25ef0 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
25f00 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
25f10 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
25f20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
25f30 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
25f40 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
25f50 20 43 61 6c 6c 46 75 6e 63 74 69 6f 6e 31 0d 0a   CallFunction1..
25f60 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
25f70 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
25f80 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  ]}] \..      [ex
25f90 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53  tractSystemDataS
25fa0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65  QLiteExceptionMe
25fb0 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d 20 5c  ssage $result] \
25fc0 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
25fd0 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
25fe0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
25ff0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
26000 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
26010 74 24 7b 69 64 7d 20 43 61 6c 6c 46 75 6e 63 74  t${id} CallFunct
26020 69 6f 6e 32 0d 0a 20 20 20 20 20 20 7d 20 72 65  ion2..      } re
26030 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
26040 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20 20  ult ""]}] \..   
26050 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65     [extractSyste
26060 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
26070 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73  tionMessage $res
26080 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ult] \..      [e
26090 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
260a0 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
260b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
260c0 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
260d0 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 42 69 6e  d}.Test${id} Bin
260e0 64 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20  dFunction..     
260f0 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
26100 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5c  t result ""]}] \
26110 0d 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74  ..      [extract
26120 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
26130 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
26140 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a 20 20 20   $result] \..   
26150 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
26160 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
26170 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
26180 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
26190 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
261a0 7d 20 43 61 6c 6c 46 75 6e 63 74 69 6f 6e 31 0d  } CallFunction1.
261b0 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
261c0 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
261d0 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  "]}] \..      [e
261e0 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61  xtractSystemData
261f0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d  SQLiteExceptionM
26200 65 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d 20  essage $result] 
26210 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
26220 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
26230 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
26240 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
26250 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
26260 73 74 24 7b 69 64 7d 20 43 61 6c 6c 46 75 6e 63  st${id} CallFunc
26270 74 69 6f 6e 32 0d 0a 20 20 20 20 20 20 7d 20 72  tion2..      } r
26280 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
26290 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20  sult ""]}] \..  
262a0 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 74      [extractSyst
262b0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
262c0 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65  ptionMessage $re
262d0 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  sult] \..      [
262e0 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
262f0 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
26300 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
26310 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
26320 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 55 6e  id}.Test${id} Un
26330 62 69 6e 64 46 75 6e 63 74 69 6f 6e 0d 0a 20 20  bindFunction..  
26340 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
26350 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
26360 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74 72  ] \..      [extr
26370 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
26380 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
26390 61 67 65 20 24 72 65 73 75 6c 74 5d 20 5c 0d 0a  age $result] \..
263a0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
263b0 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
263c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
263d0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
263e0 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
263f0 7b 69 64 7d 20 43 61 6c 6c 46 75 6e 63 74 69 6f  {id} CallFunctio
26400 6e 31 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  n1..      } resu
26410 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
26420 74 20 22 22 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20  t ""]}] \..     
26430 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
26440 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
26450 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 6c  onMessage $resul
26460 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  t] \..      [exp
26470 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
26480 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
26490 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
264a0 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
264b0 2e 54 65 73 74 24 7b 69 64 7d 20 43 61 6c 6c 46  .Test${id} CallF
264c0 75 6e 63 74 69 6f 6e 32 0d 0a 20 20 20 20 20 20  unction2..      
264d0 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
264e0 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5c 0d   result ""]}] \.
264f0 0a 20 20 20 20 20 20 5b 65 78 74 72 61 63 74 53  .      [extractS
26500 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
26510 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20  xceptionMessage 
26520 24 72 65 73 75 6c 74 5d 20 5c 0d 0a 20 20 20 20  $result] \..    
26530 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
26540 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
26550 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
26560 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
26570 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
26580 20 55 6e 69 6e 69 74 69 61 6c 69 7a 65 0d 0a 20   Uninitialize.. 
26590 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
265a0 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
265b0 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 74  }] \..      [ext
265c0 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51  ractSystemDataSQ
265d0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73  LiteExceptionMes
265e0 73 61 67 65 20 24 72 65 73 75 6c 74 5d 0d 0a 7d  sage $result]..}
265f0 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
26600 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
26610 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
26620 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
26630 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72   code results er
26640 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75  rors sql dataSou
26650 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d  rce id fileName.
26660 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
26670 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
26680 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
26690 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
266a0 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c  ile.DATA SQLite\
266b0 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ..System.Data.SQ
266c0 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61  Lite compileCSha
266d0 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78  rp} -match regex
266e0 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  p -result {^Ok\.
266f0 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
26700 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
26710 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
26720 7d 20 31 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  } 1 \{SQL logic 
26730 65 72 72 6f 72 28 20 6f 72 5c 0d 0a 6d 69 73 73  error( or\..miss
26740 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d  ing database)? -
26750 2d 20 6e 6f 20 73 75 63 68 20 66 75 6e 63 74 69  - no such functi
26760 6f 6e 3a 20 52 45 47 45 58 50 5c 7d 20 31 20 5c  on: REGEXP\} 1 \
26770 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  {SQL logic error
26780 28 20 6f 72 5c 0d 0a 6d 69 73 73 69 6e 67 20 64  ( or\..missing d
26790 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f 20  atabase)? -- no 
267a0 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 52  such function: R
267b0 45 47 45 58 50 5c 7d 20 30 20 5c 7b 5c 7d 20 30  EGEXP\} 0 \{\} 0
267c0 20 31 20 30 20 30 20 30 20 54 72 75 65 20 31 20   1 0 0 0 True 1 
267d0 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67 69 63 20 65 72  \{SQL\..logic er
267e0 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20  ror( or missing 
267f0 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f  database)? -- no
26800 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20   such function: 
26810 52 45 47 45 58 50 5c 7d 20 31 20 5c 7b 53 51 4c  REGEXP\} 1 \{SQL
26820 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 28 20   logic\..error( 
26830 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
26840 61 73 65 29 3f 20 2d 2d 20 6e 6f 20 73 75 63 68  ase)? -- no such
26850 20 66 75 6e 63 74 69 6f 6e 3a 20 52 45 47 45 58   function: REGEX
26860 50 5c 7d 20 30 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d  P\} 0 \{\}$}}...
26870 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
26880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
268a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
268b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
268c0 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
268d0 74 20 64 61 74 61 2d 31 2e 38 34 20 7b 47 65 74  t data-1.84 {Get
268e0 42 6c 6f 62 20 6d 65 74 68 6f 64 20 61 6e 64 20  Blob method and 
268f0 53 51 4c 69 74 65 42 6c 6f 62 20 63 6c 61 73 73  SQLiteBlob class
26900 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 70 72  } -setup {..  pr
26910 6f 63 20 67 65 74 42 79 74 65 73 41 73 4c 69 73  oc getBytesAsLis
26920 74 20 7b 20 62 79 74 65 73 20 7d 20 7b 0d 0a 20  t { bytes } {.. 
26930 20 20 20 23 0d 0a 20 20 20 20 23 20 48 41 43 4b     #..    # HACK
26940 3a 20 2a 4d 4f 4e 4f 2a 20 4d 6f 6e 6f 20 64 6f  : *MONO* Mono do
26950 65 73 20 6e 6f 74 20 63 68 6f 6f 73 65 20 74 68  es not choose th
26960 65 20 72 69 67 68 74 20 42 79 74 65 4c 69 73 74  e right ByteList
26970 20 63 6f 6e 73 74 72 75 63 74 6f 72 0d 0a 20 20   constructor..  
26980 20 20 23 20 20 20 20 20 20 20 6f 76 65 72 6c 6f    #       overlo
26990 61 64 20 68 65 72 65 2e 20 20 54 68 65 72 65 66  ad here.  Theref
269a0 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  ore, attempt to 
269b0 66 6f 72 63 65 20 74 68 65 20 69 73 73 75 65 2e  force the issue.
269c0 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74  ..    #..    set
269d0 20 62 79 74 65 4c 69 73 74 20 5b 6f 62 6a 65 63   byteList [objec
269e0 74 20 63 72 65 61 74 65 20 2d 70 61 72 61 6d 65  t create -parame
269f0 74 65 72 74 79 70 65 73 20 5b 6c 69 73 74 20 5c  tertypes [list \
26a00 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d  ..        System
26a10 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 2e 47 65 6e  .Collections.Gen
26a20 65 72 69 63 2e 49 45 6e 75 6d 65 72 61 62 6c 65  eric.IEnumerable
26a30 60 31 5c 5b 53 79 73 74 65 6d 2e 42 79 74 65 5c  `1\[System.Byte\
26a40 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61  ]] \..        -a
26a50 6c 69 61 73 20 42 79 74 65 4c 69 73 74 20 24 62  lias ByteList $b
26a60 79 74 65 73 5d 0d 0a 0d 0a 20 20 20 20 72 65 74  ytes]....    ret
26a70 75 72 6e 20 5b 24 62 79 74 65 4c 69 73 74 20 54  urn [$byteList T
26a80 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 7d 0d 0a 0d  oString]..  }...
26a90 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
26aa0 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
26ab0 38 34 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20  84.db] "" "" "" 
26ac0 4e 6f 56 65 72 69 66 79 54 79 70 65 41 66 66 69  NoVerifyTypeAffi
26ad0 6e 69 74 79 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  nity..} -body {.
26ae0 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
26af0 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45  db {..    CREATE
26b00 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45   TABLE t1(x INTE
26b10 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
26b20 20 79 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54   y);..    INSERT
26b30 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
26b40 56 41 4c 55 45 53 28 31 2c 20 27 6e 6f 70 65 27  VALUES(1, 'nope'
26b50 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
26b60 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
26b70 4c 55 45 53 28 32 2c 20 27 31 39 38 34 27 29 3b  LUES(2, '1984');
26b80 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 64  ..  }....  set d
26b90 61 74 61 52 65 61 64 65 72 20 5b 73 71 6c 20 65  ataReader [sql e
26ba0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
26bb0 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64  reader -format d
26bc0 61 74 61 72 65 61 64 65 72 20 5c 0d 0a 20 20 20  atareader \..   
26bd0 20 20 20 2d 62 65 68 61 76 69 6f 72 20 2b 4b 65     -behavior +Ke
26be0 79 49 6e 66 6f 20 2d 61 6c 69 61 73 20 24 64 62  yInfo -alias $db
26bf0 20 22 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   "SELECT x, y FR
26c00 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65  OM t1;"]....  se
26c10 74 20 73 69 7a 65 20 34 0d 0a 20 20 73 65 74 20  t size 4..  set 
26c20 62 79 74 65 73 28 31 29 20 5b 6f 62 6a 65 63 74  bytes(1) [object
26c30 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 42   create -alias B
26c40 79 74 65 5c 5b 5c 5d 20 24 73 69 7a 65 5d 0d 0a  yte\[\] $size]..
26c50 20 20 73 65 74 20 62 79 74 65 73 28 32 29 20 5b    set bytes(2) [
26c60 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
26c70 6c 69 61 73 20 42 79 74 65 5c 5b 5c 5d 20 24 73  lias Byte\[\] $s
26c80 69 7a 65 5d 0d 0a 20 20 73 65 74 20 72 65 73 75  ize]..  set resu
26c90 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 77  lt [list]....  w
26ca0 68 69 6c 65 20 7b 5b 24 64 61 74 61 52 65 61 64  hile {[$dataRead
26cb0 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a 20 20 20  er Read]} {..   
26cc0 20 73 65 74 20 62 6c 6f 62 20 5b 24 64 61 74 61   set blob [$data
26cd0 52 65 61 64 65 72 20 2d 61 6c 69 61 73 20 47 65  Reader -alias Ge
26ce0 74 42 6c 6f 62 20 31 20 66 61 6c 73 65 5d 0d 0a  tBlob 1 false]..
26cf0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
26d00 6c 74 20 5b 24 62 6c 6f 62 20 47 65 74 43 6f 75  lt [$blob GetCou
26d10 6e 74 5d 0d 0a 20 20 20 20 24 62 6c 6f 62 20 52  nt]..    $blob R
26d20 65 61 64 20 24 62 79 74 65 73 28 31 29 20 24 73  ead $bytes(1) $s
26d30 69 7a 65 20 30 0d 0a 20 20 20 20 6c 61 70 70 65  ize 0..    lappe
26d40 6e 64 20 72 65 73 75 6c 74 20 5b 67 65 74 42 79  nd result [getBy
26d50 74 65 73 41 73 4c 69 73 74 20 24 62 79 74 65 73  tesAsList $bytes
26d60 28 31 29 5d 0d 0a 0d 0a 20 20 20 20 66 6f 72 20  (1)]....    for 
26d70 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
26d80 24 73 69 7a 65 7d 20 7b 69 6e 63 72 20 69 7d 20  $size} {incr i} 
26d90 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 62 79 74  {..      set byt
26da0 65 20 5b 24 62 79 74 65 73 28 31 29 20 47 65 74  e [$bytes(1) Get
26db0 56 61 6c 75 65 20 24 69 5d 0d 0a 20 20 20 20 20  Value $i]..     
26dc0 20 69 6e 63 72 20 62 79 74 65 3b 20 73 65 74 20   incr byte; set 
26dd0 62 79 74 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76  byte [object inv
26de0 6f 6b 65 20 2d 63 72 65 61 74 65 20 42 79 74 65  oke -create Byte
26df0 20 50 61 72 73 65 20 24 62 79 74 65 5d 0d 0a 20   Parse $byte].. 
26e00 20 20 20 20 20 24 62 79 74 65 73 28 31 29 20 53       $bytes(1) S
26e10 65 74 56 61 6c 75 65 20 24 62 79 74 65 20 24 69  etValue $byte $i
26e20 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 24  ..    }....    $
26e30 62 6c 6f 62 20 57 72 69 74 65 20 24 62 79 74 65  blob Write $byte
26e40 73 28 31 29 20 24 73 69 7a 65 20 30 0d 0a 0d 0a  s(1) $size 0....
26e50 20 20 20 20 69 66 20 7b 5b 24 64 61 74 61 52 65      if {[$dataRe
26e60 61 64 65 72 20 47 65 74 49 6e 74 36 34 20 30 5d  ader GetInt64 0]
26e70 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 1} then {.. 
26e80 20 20 20 20 20 24 62 6c 6f 62 20 52 65 6f 70 65       $blob Reope
26e90 6e 20 32 0d 0a 20 20 20 20 20 20 24 62 6c 6f 62  n 2..      $blob
26ea0 20 52 65 61 64 20 24 62 79 74 65 73 28 32 29 20   Read $bytes(2) 
26eb0 24 73 69 7a 65 20 30 0d 0a 20 20 20 20 20 20 6c  $size 0..      l
26ec0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 67  append result [g
26ed0 65 74 42 79 74 65 73 41 73 4c 69 73 74 20 24 62  etBytesAsList $b
26ee0 79 74 65 73 28 32 29 5d 0d 0a 20 20 20 20 7d 0d  ytes(2)]..    }.
26ef0 0a 0d 0a 20 20 20 20 24 62 6c 6f 62 20 43 6c 6f  ...    $blob Clo
26f00 73 65 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 24 64 61  se..  }....  $da
26f10 74 61 52 65 61 64 65 72 20 43 6c 6f 73 65 3b 20  taReader Close; 
26f20 75 6e 73 65 74 20 64 61 74 61 52 65 61 64 65 72  unset dataReader
26f30 0d 0a 0d 0a 20 20 73 65 74 20 64 61 74 61 52 65  ....  set dataRe
26f40 61 64 65 72 20 5b 73 71 6c 20 65 78 65 63 75 74  ader [sql execut
26f50 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
26f60 72 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65  r -format datare
26f70 61 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 2d 61  ader \..      -a
26f80 6c 69 61 73 20 24 64 62 20 22 53 45 4c 45 43 54  lias $db "SELECT
26f90 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 3b 22 5d   x, y FROM t1;"]
26fa0 0d 0a 0d 0a 20 20 77 68 69 6c 65 20 7b 5b 24 64  ....  while {[$d
26fb0 61 74 61 52 65 61 64 65 72 20 52 65 61 64 5d 7d  ataReader Read]}
26fc0 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
26fd0 72 65 73 75 6c 74 20 5b 24 64 61 74 61 52 65 61  result [$dataRea
26fe0 64 65 72 20 47 65 74 49 6e 74 36 34 20 30 5d 0d  der GetInt64 0].
26ff0 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
27000 75 6c 74 20 5b 24 64 61 74 61 52 65 61 64 65 72  ult [$dataReader
27010 20 47 65 74 53 74 72 69 6e 67 20 30 5d 0d 0a 20   GetString 0].. 
27020 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
27030 74 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 47  t [$dataReader G
27040 65 74 49 6e 74 36 34 20 31 5d 0d 0a 20 20 20 20  etInt64 1]..    
27050 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
27060 24 64 61 74 61 52 65 61 64 65 72 20 47 65 74 53  $dataReader GetS
27070 74 72 69 6e 67 20 31 5d 0d 0a 20 20 7d 0d 0a 0d  tring 1]..  }...
27080 0a 20 20 24 64 61 74 61 52 65 61 64 65 72 20 43  .  $dataReader C
27090 6c 6f 73 65 3b 20 75 6e 73 65 74 20 64 61 74 61  lose; unset data
270a0 52 65 61 64 65 72 0d 0a 0d 0a 20 20 73 65 74 20  Reader....  set 
270b0 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
270c0 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  up {..  unset -n
270d0 6f 63 6f 6d 70 6c 61 69 6e 20 62 6c 6f 62 0d 0a  ocomplain blob..
270e0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
270f0 61 69 6e 20 64 61 74 61 52 65 61 64 65 72 0d 0a  ain dataReader..
27100 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
27110 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
27120 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 62  et -nocomplain b
27130 79 74 65 20 69 20 62 79 74 65 73 20 73 69 7a 65  yte i bytes size
27140 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
27150 61 6d 65 0d 0a 0d 0a 20 20 72 65 6e 61 6d 65 20  ame....  rename 
27160 67 65 74 42 79 74 65 73 41 73 4c 69 73 74 20 22  getBytesAsList "
27170 22 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  "..} -constraint
27180 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
27190 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
271a0 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
271b0 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
271c0 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
271d0 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20  SQLite} -result 
271e0 7b 34 20 7b 31 31 30 20 31 31 31 20 31 31 32 20  {4 {110 111 112 
271f0 31 30 31 7d 20 7b 34 39 20 35 37 20 35 36 20 35  101} {49 57 56 5
27200 32 7d 20 34 20 7b 34 39 20 35 37 20 35 36 20 35  2} 4 {49 57 56 5
27210 32 7d 5c 0d 0a 31 20 31 20 30 20 6f 70 71 66 20  2}\..1 1 0 opqf 
27220 32 20 32 20 32 20 32 3a 39 35 7d 7d 0d 0a 0d 0a  2 2 2 2:95}}....
27230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
27280 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
27290 20 64 61 74 61 2d 31 2e 38 35 20 7b 73 68 61 31   data-1.85 {sha1
272a0 20 65 78 74 65 6e 73 69 6f 6e 7d 20 2d 73 65 74   extension} -set
272b0 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
272c0 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
272d0 74 61 2d 31 2e 38 35 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.85.db]..} -
272e0 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78  body {..  sql ex
272f0 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20  ecute $db {..   
27300 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
27310 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  (x);..    INSERT
27320 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c   INTO t1 (x) VAL
27330 55 45 53 28 4e 55 4c 4c 29 3b 0d 0a 20 20 20 20  UES(NULL);..    
27340 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
27350 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20  x) VALUES(1);.. 
27360 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
27370 31 20 28 78 29 20 56 41 4c 55 45 53 28 27 7a 65  1 (x) VALUES('ze
27380 72 6f 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  ro');..    INSER
27390 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
273a0 4c 55 45 53 28 31 2e 32 33 29 3b 0d 0a 20 20 20  LUES(1.23);..   
273b0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
273c0 28 78 29 20 56 41 4c 55 45 53 28 78 27 34 35 27  (x) VALUES(x'45'
273d0 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
273e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74   connection [get
273f0 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20  DbConnection].. 
27400 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
27410 74 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74  t]....  $connect
27420 69 6f 6e 20 45 6e 61 62 6c 65 45 78 74 65 6e 73  ion EnableExtens
27430 69 6f 6e 73 20 74 72 75 65 0d 0a 0d 0a 20 20 24  ions true....  $
27440 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45  connection LoadE
27450 78 74 65 6e 73 69 6f 6e 20 5c 0d 0a 20 20 20 20  xtension \..    
27460 20 20 5b 67 65 74 43 6f 72 65 45 78 74 65 6e 73    [getCoreExtens
27470 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  ionBinaryFileNam
27480 65 20 6e 75 6c 6c 5d 20 73 71 6c 69 74 65 33 5f  e null] sqlite3_
27490 73 68 61 5f 69 6e 69 74 0d 0a 0d 0a 20 20 6c 61  sha_init....  la
274a0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
274b0 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
274c0 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \.
274d0 0a 20 20 20 20 20 20 7b 53 45 4c 45 43 54 20 73  .      {SELECT s
274e0 68 61 31 28 27 67 72 6f 75 6e 64 68 6f 67 27 29  ha1('groundhog')
274f0 3b 7d 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  ;}]....  lappend
27500 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
27510 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
27520 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20  alar $db \..    
27530 20 20 7b 53 45 4c 45 43 54 20 73 68 61 31 5f 71    {SELECT sha1_q
27540 75 65 72 79 28 27 53 45 4c 45 43 54 20 78 20 46  uery('SELECT x F
27550 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
27560 78 3b 27 29 3b 7d 5d 0d 0a 0d 0a 20 20 73 65 74  x;');}]....  set
27570 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
27580 6e 75 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43  nup {..  freeDbC
27590 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
275a0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
275b0 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74 69   result connecti
275c0 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  on....  cleanupD
275d0 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
275e0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
275f0 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  in db fileName..
27600 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
27610 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
27620 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63  ject monoBug28 c
27630 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
27640 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d  le.DATA SQLite\.
27650 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
27660 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
27670 74 65 2e 49 4e 54 45 52 4f 50 5f 53 48 41 31 5f  te.INTEROP_SHA1_
27680 45 58 54 45 4e 53 49 4f 4e 5c 0d 0a 53 79 73 74  EXTENSION\..Syst
27690 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53  em.Data.SQLite S
276a0 51 4c 69 74 65 49 6e 74 65 72 6f 70 7d 20 2d 72  QLiteInterop} -r
276b0 65 73 75 6c 74 20 5c 0d 0a 7b 35 35 37 38 31 33  esult \..{557813
276c0 39 62 34 37 30 65 33 35 61 33 63 32 33 31 61 34  9b470e35a3c231a4
276d0 39 39 64 30 36 35 38 39 32 31 35 65 34 36 65 38  99d06589215e46e8
276e0 64 66 5c 0d 0a 61 32 37 66 35 65 36 66 38 35 61  df\..a27f5e6f85a
276f0 33 38 37 32 65 64 32 65 34 65 34 30 31 38 63 38  3872ed2e4e4018c8
27700 66 64 37 64 66 61 66 66 30 35 32 62 63 7d 7d 0d  fd7dfaff052bc}}.
27710 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
27720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27760 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
27770 65 73 74 20 64 61 74 61 2d 31 2e 38 36 20 7b 63  est data-1.86 {c
27780 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
27790 20 69 6e 74 65 67 65 72 20 70 61 72 73 69 6e 67   integer parsing
277a0 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 6f 62  } -setup {..  ob
277b0 6a 65 63 74 20 69 6d 70 6f 72 74 20 53 79 73 74  ject import Syst
277c0 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
277d0 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6d 70 6f 72  ..  object impor
277e0 74 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69  t System.Threadi
277f0 6e 67 0d 0a 0d 0a 20 20 73 65 74 20 63 75 6c 74  ng....  set cult
27800 75 72 65 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  ure [object crea
27810 74 65 20 2d 61 6c 69 61 73 20 43 75 6c 74 75 72  te -alias Cultur
27820 65 49 6e 66 6f 20 65 6e 2d 55 53 5d 0d 0a 20 20  eInfo en-US]..  
27830 24 63 75 6c 74 75 72 65 20 4e 75 6d 62 65 72 46  $culture NumberF
27840 6f 72 6d 61 74 2e 4e 65 67 61 74 69 76 65 53 69  ormat.NegativeSi
27850 67 6e 20 2f 0d 0a 0d 0a 20 20 73 65 74 20 73 61  gn /....  set sa
27860 76 65 64 43 75 6c 74 75 72 65 20 5b 6f 62 6a 65  vedCulture [obje
27870 63 74 20 69 6e 76 6f 6b 65 20 54 68 72 65 61 64  ct invoke Thread
27880 2e 43 75 72 72 65 6e 74 54 68 72 65 61 64 20 43  .CurrentThread C
27890 75 72 72 65 6e 74 43 75 6c 74 75 72 65 5d 0d 0a  urrentCulture]..
278a0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
278b0 54 68 72 65 61 64 2e 43 75 72 72 65 6e 74 54 68  Thread.CurrentTh
278c0 72 65 61 64 20 43 75 72 72 65 6e 74 43 75 6c 74  read CurrentCult
278d0 75 72 65 20 24 63 75 6c 74 75 72 65 0d 0a 7d 20  ure $culture..} 
278e0 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 75 70  -body {..  setup
278f0 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
27900 20 64 61 74 61 2d 31 2e 38 36 2e 64 62 5d 0d 0a   data-1.86.db]..
27910 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
27920 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
27930 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
27940 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69  nocomplain db fi
27950 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 63 61 74 63  leName....  catc
27960 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
27970 20 54 68 72 65 61 64 2e 43 75 72 72 65 6e 74 54   Thread.CurrentT
27980 68 72 65 61 64 20 43 75 72 72 65 6e 74 43 75 6c  hread CurrentCul
27990 74 75 72 65 20 24 73 61 76 65 64 43 75 6c 74 75  ture $savedCultu
279a0 72 65 7d 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  re}..  unset -no
279b0 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 43 75  complain savedCu
279c0 6c 74 75 72 65 20 63 75 6c 74 75 72 65 0d 0a 0d  lture culture...
279d0 0a 20 20 6f 62 6a 65 63 74 20 75 6e 69 6d 70 6f  .  object unimpo
279e0 72 74 20 2d 69 6d 70 6f 72 74 70 61 74 74 65 72  rt -importpatter
279f0 6e 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69  n System.Threadi
27a00 6e 67 0d 0a 20 20 6f 62 6a 65 63 74 20 75 6e 69  ng..  object uni
27a10 6d 70 6f 72 74 20 2d 69 6d 70 6f 72 74 70 61 74  mport -importpat
27a20 74 65 72 6e 20 53 79 73 74 65 6d 2e 47 6c 6f 62  tern System.Glob
27a30 61 6c 69 7a 61 74 69 6f 6e 0d 0a 7d 20 2d 63 6f  alization..} -co
27a40 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
27a50 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
27a60 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
27a70 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
27a80 54 41 20 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69  TA SQLite\..defi
27a90 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
27aa0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
27ab0 54 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e  TEROP_SHA1_EXTEN
27ac0 53 49 4f 4e 20 53 79 73 74 65 6d 2e 44 61 74 61  SION System.Data
27ad0 2e 53 51 4c 69 74 65 5c 0d 0a 53 51 4c 69 74 65  .SQLite\..SQLite
27ae0 49 6e 74 65 72 6f 70 7d 20 2d 6d 61 74 63 68 20  Interop} -match 
27af0 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c  regexp -result \
27b00 0d 0a 7b 5e 53 79 73 74 65 6d 23 44 61 74 61 23  ..{^System#Data#
27b10 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43 6f 6e  SQLite#SQLiteCon
27b20 6e 65 63 74 69 6f 6e 23 5c 64 2b 24 7d 7d 0d 0a  nection#\d+$}}..
27b30 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
27b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27b80 23 0d 0a 0d 0a 72 65 70 6f 72 74 53 51 4c 69 74  #....reportSQLit
27b90 65 52 65 73 6f 75 72 63 65 73 20 24 74 65 73 74  eResources $test
27ba0 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d  _channel true...
27bb0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
27bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27c00 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
27c10 74 20 64 61 74 61 2d 31 2e 38 37 20 7b 47 65 74  t data-1.87 {Get
27c20 53 65 74 74 69 6e 67 56 61 6c 75 65 20 63 61 63  SettingValue cac
27c30 68 65 64 20 64 69 72 65 63 74 6f 72 79 2f 66 69  hed directory/fi
27c40 6c 65 20 6e 61 6d 65 7d 20 2d 73 65 74 75 70 20  le name} -setup 
27c50 7b 0d 0a 20 20 6d 6f 76 65 53 79 73 74 65 6d 44  {..  moveSystemD
27c60 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66  ataSQLiteDllConf
27c70 69 67 20 66 61 6c 73 65 0d 0a 7d 20 2d 62 6f 64  ig false..} -bod
27c80 79 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e  y {..  object in
27c90 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
27ca0 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61  Public System.Da
27cb0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
27cc0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d  NativeMethods \.
27cd0 0a 20 20 20 20 20 20 47 65 74 53 65 74 74 69 6e  .      GetSettin
27ce0 67 56 61 6c 75 65 20 73 65 74 74 69 6e 67 5f 66  gValue setting_f
27cf0 6f 72 5f 64 61 74 61 2d 31 2e 38 37 20 6e 75 6c  or_data-1.87 nul
27d00 6c 0d 0a 0d 0a 20 20 65 78 70 72 20 7b 5b 67 65  l....  expr {[ge
27d10 74 4f 74 68 65 72 43 6f 75 6e 74 20 4d 65 74 68  tOtherCount Meth
27d20 6f 64 5f 52 65 73 65 74 43 61 63 68 65 64 41 73  od_ResetCachedAs
27d30 73 65 6d 62 6c 79 44 69 72 65 63 74 6f 72 79 5d  semblyDirectory]
27d40 20 3d 3d 20 2d 31 20 26 26 20 5c 0d 0a 20 20 20   == -1 && \..   
27d50 20 20 20 5b 67 65 74 4f 74 68 65 72 43 6f 75 6e     [getOtherCoun
27d60 74 20 4d 65 74 68 6f 64 5f 52 65 73 65 74 43 61  t Method_ResetCa
27d70 63 68 65 64 58 6d 6c 43 6f 6e 66 69 67 46 69 6c  chedXmlConfigFil
27d80 65 4e 61 6d 65 5d 20 3d 3d 20 2d 31 20 26 26 20  eName] == -1 && 
27d90 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74 4f 74 68  \..      [getOth
27da0 65 72 43 6f 75 6e 74 20 4d 65 74 68 6f 64 5f 47  erCount Method_G
27db0 65 74 41 73 73 65 6d 62 6c 79 44 69 72 65 63 74  etAssemblyDirect
27dc0 6f 72 79 5d 20 3d 3d 20 31 20 26 26 20 5c 0d 0a  ory] == 1 && \..
27dd0 20 20 20 20 20 20 5b 67 65 74 4f 74 68 65 72 43        [getOtherC
27de0 6f 75 6e 74 20 4d 65 74 68 6f 64 5f 47 65 74 58  ount Method_GetX
27df0 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  mlConfigFileName
27e00 5d 20 3d 3d 20 31 20 26 26 20 5c 0d 0a 20 20 20  ] == 1 && \..   
27e10 20 20 20 5b 67 65 74 4f 74 68 65 72 43 6f 75 6e     [getOtherCoun
27e20 74 20 4d 65 74 68 6f 64 5f 47 65 74 43 61 63 68  t Method_GetCach
27e30 65 64 41 73 73 65 6d 62 6c 79 44 69 72 65 63 74  edAssemblyDirect
27e40 6f 72 79 5d 20 3e 3d 20 31 20 26 26 20 5c 0d 0a  ory] >= 1 && \..
27e50 20 20 20 20 20 20 5b 67 65 74 4f 74 68 65 72 43        [getOtherC
27e60 6f 75 6e 74 20 4d 65 74 68 6f 64 5f 47 65 74 43  ount Method_GetC
27e70 61 63 68 65 64 58 6d 6c 43 6f 6e 66 69 67 46 69  achedXmlConfigFi
27e80 6c 65 4e 61 6d 65 5d 20 3e 3d 20 31 7d 0d 0a 7d  leName] >= 1}..}
27e90 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 6d   -cleanup {..  m
27ea0 6f 76 65 53 79 73 74 65 6d 44 61 74 61 53 51 4c  oveSystemDataSQL
27eb0 69 74 65 44 6c 6c 43 6f 6e 66 69 67 20 74 72 75  iteDllConfig tru
27ec0 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
27ed0 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
27ee0 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
27ef0 38 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  8 System.Data.SQ
27f00 4c 69 74 65 5c 0d 0a 62 75 69 6c 64 43 6f 6e 66  Lite\..buildConf
27f10 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 7d  iguration.Debug}
27f20 20 2d 72 65 73 75 6c 74 20 7b 54 72 75 65 7d 7d   -result {True}}
27f30 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
27f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27f80 23 23 23 0d 0a 0d 0a 72 65 70 6f 72 74 53 51 4c  ###....reportSQL
27f90 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 74 65  iteResources $te
27fa0 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  st_channel true.
27fb0 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
27fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28000 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
28010 65 73 74 20 64 61 74 61 2d 31 2e 38 38 20 7b 47  est data-1.88 {G
28020 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 20 63  etSettingValue c
28030 61 63 68 65 64 20 64 69 72 65 63 74 6f 72 79 2f  ached directory/
28040 66 69 6c 65 20 6e 61 6d 65 7d 20 2d 73 65 74 75  file name} -setu
28050 70 20 7b 0d 0a 20 20 6d 6f 76 65 53 79 73 74 65  p {..  moveSyste
28060 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f  mDataSQLiteDllCo
28070 6e 66 69 67 20 66 61 6c 73 65 0d 0a 7d 20 2d 62  nfig false..} -b
28080 6f 64 79 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20  ody {..  object 
28090 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
280a0 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e  onPublic System.
280b0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
280c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods 
280d0 5c 0d 0a 20 20 20 20 20 20 47 65 74 53 65 74 74  \..      GetSett
280e0 69 6e 67 56 61 6c 75 65 20 73 65 74 74 69 6e 67  ingValue setting
280f0 5f 66 6f 72 5f 64 61 74 61 2d 31 2e 38 38 20 6e  _for_data-1.88 n
28100 75 6c 6c 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20  ull....  object 
28110 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
28120 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
28130 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
28140 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
28150 65 4d 65 74 68 6f 64 73 20 52 65 73 65 74 43 61  eMethods ResetCa
28160 63 68 65 64 41 73 73 65 6d 62 6c 79 44 69 72 65  chedAssemblyDire
28170 63 74 6f 72 79 0d 0a 0d 0a 20 20 6f 62 6a 65 63  ctory....  objec
28180 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
28190 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
281a0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
281b0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
281c0 69 76 65 4d 65 74 68 6f 64 73 20 52 65 73 65 74  iveMethods Reset
281d0 43 61 63 68 65 64 58 6d 6c 43 6f 6e 66 69 67 46  CachedXmlConfigF
281e0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 6f 62 6a  ileName....  obj
281f0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
28200 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73  s +NonPublic Sys
28210 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
28220 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
28230 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 47 65 74  ods \..      Get
28240 53 65 74 74 69 6e 67 56 61 6c 75 65 20 73 65 74  SettingValue set
28250 74 69 6e 67 5f 66 6f 72 5f 64 61 74 61 2d 31 2e  ting_for_data-1.
28260 38 38 20 6e 75 6c 6c 0d 0a 0d 0a 20 20 65 78 70  88 null....  exp
28270 72 20 7b 5b 67 65 74 4f 74 68 65 72 43 6f 75 6e  r {[getOtherCoun
28280 74 20 4d 65 74 68 6f 64 5f 52 65 73 65 74 43 61  t Method_ResetCa
28290 63 68 65 64 41 73 73 65 6d 62 6c 79 44 69 72 65  chedAssemblyDire
282a0 63 74 6f 72 79 5d 20 3d 3d 20 31 20 26 26 20 5c  ctory] == 1 && \
282b0 0d 0a 20 20 20 20 20 20 5b 67 65 74 4f 74 68 65  ..      [getOthe
282c0 72 43 6f 75 6e 74 20 4d 65 74 68 6f 64 5f 52 65  rCount Method_Re
282d0 73 65 74 43 61 63 68 65 64 58 6d 6c 43 6f 6e 66  setCachedXmlConf
282e0 69 67 46 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 31  igFileName] == 1
282f0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65   && \..      [ge
28300 74 4f 74 68 65 72 43 6f 75 6e 74 20 4d 65 74 68  tOtherCount Meth
28310 6f 64 5f 47 65 74 41 73 73 65 6d 62 6c 79 44 69  od_GetAssemblyDi
28320 72 65 63 74 6f 72 79 5d 20 3d 3d 20 32 20 26 26  rectory] == 2 &&
28330 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74 4f 74   \..      [getOt
28340 68 65 72 43 6f 75 6e 74 20 4d 65 74 68 6f 64 5f  herCount Method_
28350 47 65 74 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65  GetXmlConfigFile
28360 4e 61 6d 65 5d 20 3d 3d 20 32 20 26 26 20 5c 0d  Name] == 2 && \.
28370 0a 20 20 20 20 20 20 5b 67 65 74 4f 74 68 65 72  .      [getOther
28380 43 6f 75 6e 74 20 4d 65 74 68 6f 64 5f 47 65 74  Count Method_Get
28390 43 61 63 68 65 64 41 73 73 65 6d 62 6c 79 44 69  CachedAssemblyDi
283a0 72 65 63 74 6f 72 79 5d 20 3e 3d 20 32 20 26 26  rectory] >= 2 &&
283b0 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74 4f 74   \..      [getOt
283c0 68 65 72 43 6f 75 6e 74 20 4d 65 74 68 6f 64 5f  herCount Method_
283d0 47 65 74 43 61 63 68 65 64 58 6d 6c 43 6f 6e 66  GetCachedXmlConf
283e0 69 67 46 69 6c 65 4e 61 6d 65 5d 20 3e 3d 20 32  igFileName] >= 2
283f0 7d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  }..} -cleanup {.
28400 0a 20 20 6d 6f 76 65 53 79 73 74 65 6d 44 61 74  .  moveSystemDat
28410 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67  aSQLiteDllConfig
28420 20 74 72 75 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72   true..} -constr
28430 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
28440 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
28450 42 75 67 32 38 20 53 79 73 74 65 6d 2e 44 61 74  Bug28 System.Dat
28460 61 2e 53 51 4c 69 74 65 5c 0d 0a 62 75 69 6c 64  a.SQLite\..build
28470 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  Configuration.De
28480 62 75 67 7d 20 2d 72 65 73 75 6c 74 20 7b 54 72  bug} -result {Tr
28490 75 65 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  ue}}....########
284a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
284b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
284c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
284d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
284e0 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
284f0 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
28500 38 39 20 7b 75 73 69 6e 67 20 53 51 4c 69 74 65  89 {using SQLite
28510 42 6c 6f 62 20 77 69 74 68 6f 75 74 20 72 6f 77  Blob without row
28520 69 64 20 50 4b 20 69 6e 64 65 78 7d 20 2d 73 65  id PK index} -se
28530 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
28540 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
28550 61 74 61 2d 31 2e 38 39 2e 64 62 5d 0d 0a 7d 20  ata-1.89.db]..} 
28560 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
28570 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
28580 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
28590 31 20 28 78 20 47 55 49 44 20 55 4e 49 51 55 45  1 (x GUID UNIQUE
285a0 20 4e 4f 54 20 4e 55 4c 4c 2c 20 79 20 42 4c 4f   NOT NULL, y BLO
285b0 42 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0d 0a 20 20  B NOT NULL);..  
285c0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
285d0 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 0d   (x, y) VALUES(.
285e0 0a 20 20 20 20 20 20 27 31 32 33 34 35 36 37 38  .      '12345678
285f0 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d  -0000-0000-0000-
28600 30 30 30 30 30 30 30 30 30 30 30 30 27 2c 0d 0a  000000000000',..
28610 20 20 20 20 20 20 58 27 30 31 30 32 30 33 30 34        X'01020304
28620 30 35 30 36 30 37 30 38 30 39 27 0d 0a 20 20 20  0506070809'..   
28630 20 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20   );..    INSERT 
28640 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
28650 41 4c 55 45 53 28 0d 0a 20 20 20 20 20 20 27 31  ALUES(..      '1
28660 32 33 34 35 36 37 39 2d 30 30 30 30 2d 30 30 30  2345679-0000-000
28670 30 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30  0-0000-000000000
28680 30 30 30 27 2c 0d 0a 20 20 20 20 20 20 58 27 30  000',..      X'0
28690 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 30  1020304050607080
286a0 39 30 41 30 42 30 43 30 44 30 45 30 46 31 30 31  90A0B0C0D0E0F101
286b0 31 31 33 27 0d 0a 20 20 20 20 29 3b 0d 0a 20 20  113'..    );..  
286c0 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31  }....  set sql(1
286d0 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
286e0 54 20 79 20 46 52 4f 4d 20 74 31 20 5c 0d 0a 20  T y FROM t1 \.. 
286f0 20 20 20 57 48 45 52 45 20 78 20 3d 20 27 31 32     WHERE x = '12
28700 33 34 35 36 37 38 2d 30 30 30 30 2d 30 30 30 30  345678-0000-0000
28710 2d 30 30 30 30 2d 30 30 30 30 30 30 30 30 30 30  -0000-0000000000
28720 30 30 27 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  00'; \..  }.... 
28730 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
28740 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52  .    SELECT y FR
28750 4f 4d 20 74 31 20 5c 0d 0a 20 20 20 20 57 48 45  OM t1 \..    WHE
28760 52 45 20 78 20 3d 20 27 31 32 33 34 35 36 37 39  RE x = '12345679
28770 2d 30 30 30 30 2d 30 30 30 30 2d 30 30 30 30 2d  -0000-0000-0000-
28780 30 30 30 30 30 30 30 30 30 30 30 30 27 3b 20 5c  000000000000'; \
28790 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 64  ..  }....  set d
287a0 61 74 61 52 65 61 64 65 72 20 5b 73 71 6c 20 65  ataReader [sql e
287b0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
287c0 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64  reader -format d
287d0 61 74 61 72 65 61 64 65 72 20 5c 0d 0a 20 20 20  atareader \..   
287e0 20 20 20 2d 62 65 68 61 76 69 6f 72 20 2b 4b 65     -behavior +Ke
287f0 79 49 6e 66 6f 20 2d 61 6c 69 61 73 20 24 64 62  yInfo -alias $db
28800 20 24 73 71 6c 28 31 29 5d 0d 0a 0d 0a 20 20 77   $sql(1)]....  w
28810 68 69 6c 65 20 7b 5b 24 64 61 74 61 52 65 61 64  hile {[$dataRead
28820 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a 20 20 20  er Read]} {..   
28830 20 73 65 74 20 62 6c 6f 62 20 5b 6f 62 6a 65 63   set blob [objec
28840 74 20 69 6e 76 6f 6b 65 20 2d 61 6c 69 61 73 20  t invoke -alias 
28850 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65  \..        Syste
28860 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
28870 4c 69 74 65 42 6c 6f 62 20 43 72 65 61 74 65 20  LiteBlob Create 
28880 24 64 61 74 61 52 65 61 64 65 72 20 30 20 74 72  $dataReader 0 tr
28890 75 65 5d 0d 0a 0d 0a 20 20 20 20 6c 61 70 70 65  ue]....    lappe
288a0 6e 64 20 72 65 73 75 6c 74 20 5b 24 62 6c 6f 62  nd result [$blob
288b0 20 47 65 74 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 20   GetCount]....  
288c0 20 20 24 62 6c 6f 62 20 43 6c 6f 73 65 0d 0a 20    $blob Close.. 
288d0 20 7d 0d 0a 0d 0a 20 20 24 64 61 74 61 52 65 61   }....  $dataRea
288e0 64 65 72 20 43 6c 6f 73 65 3b 20 75 6e 73 65 74  der Close; unset
288f0 20 64 61 74 61 52 65 61 64 65 72 0d 0a 0d 0a 20   dataReader.... 
28900 20 73 65 74 20 64 61 74 61 52 65 61 64 65 72 20   set dataReader 
28910 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
28920 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
28930 72 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20  rmat datareader 
28940 5c 0d 0a 20 20 20 20 20 20 2d 62 65 68 61 76 69  \..      -behavi
28950 6f 72 20 2b 4b 65 79 49 6e 66 6f 20 2d 61 6c 69  or +KeyInfo -ali
28960 61 73 20 24 64 62 20 24 73 71 6c 28 32 29 5d 0d  as $db $sql(2)].
28970 0a 0d 0a 20 20 77 68 69 6c 65 20 7b 5b 24 64 61  ...  while {[$da
28980 74 61 52 65 61 64 65 72 20 52 65 61 64 5d 7d 20  taReader Read]} 
28990 7b 0d 0a 20 20 20 20 73 65 74 20 62 6c 6f 62 20  {..    set blob 
289a0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
289b0 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..       
289c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
289d0 69 74 65 2e 53 51 4c 69 74 65 42 6c 6f 62 20 43  ite.SQLiteBlob C
289e0 72 65 61 74 65 20 24 64 61 74 61 52 65 61 64 65  reate $dataReade
289f0 72 20 30 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20  r 0 true]....   
28a00 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
28a10 5b 24 62 6c 6f 62 20 47 65 74 43 6f 75 6e 74 5d  [$blob GetCount]
28a20 0d 0a 0d 0a 20 20 20 20 24 62 6c 6f 62 20 43 6c  ....    $blob Cl
28a30 6f 73 65 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 24 64  ose..  }....  $d
28a40 61 74 61 52 65 61 64 65 72 20 43 6c 6f 73 65 3b  ataReader Close;
28a50 20 75 6e 73 65 74 20 64 61 74 61 52 65 61 64 65   unset dataReade
28a60 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  r....  set resul
28a70 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
28a80 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
28a90 6c 61 69 6e 20 62 6c 6f 62 0d 0a 20 20 75 6e 73  lain blob..  uns
28aa0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64  et -nocomplain d
28ab0 61 74 61 52 65 61 64 65 72 0d 0a 0d 0a 20 20 63  ataReader....  c
28ac0 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
28ad0 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
28ae0 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
28af0 20 73 71 6c 20 64 62 20 66 69 6c 65 4e 61 6d 65   sql db fileName
28b00 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
28b10 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
28b20 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
28b30 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
28b40 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
28b50 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
28b60 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65  QLite SQLiteInte
28b70 72 6f 70 7d 20 2d 72 65 73 75 6c 74 20 7b 39 20  rop} -result {9 
28b80 31 38 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  18}}....########
28b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28bd0 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
28be0 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
28bf0 39 30 20 7b 73 74 6d 74 20 65 78 74 65 6e 73 69  90 {stmt extensi
28c00 6f 6e 20 2f 20 27 73 71 6c 69 74 65 5f 73 74 6d  on / 'sqlite_stm
28c10 74 27 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  t' virtual table
28c20 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
28c30 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
28c40 61 6d 65 20 64 61 74 61 2d 31 2e 39 30 2e 64 62  ame data-1.90.db
28c50 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
28c60 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
28c70 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  {..    CREATE TA
28c80 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20 20 20  BLE t1(x);..    
28c90 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
28ca0 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20  x) VALUES(1);.. 
28cb0 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75   }....  set resu
28cc0 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73  lt [list]....  s
28cd0 65 74 20 72 65 61 64 65 72 28 31 29 20 5b 73 71  et reader(1) [sq
28ce0 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
28cf0 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61  te reader -forma
28d00 74 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c  t datareader -al
28d10 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62  ias \..      $db
28d20 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
28d30 74 31 3b 22 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  t1;"]....  lappe
28d40 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
28d50 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
28d60 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
28d70 69 73 74 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  ist -alias \..  
28d80 20 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20      $db "SELECT 
28d90 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74  * FROM sqlite_st
28da0 6d 74 3b 22 5d 0d 0a 0d 0a 20 20 24 72 65 61 64  mt;"]....  $read
28db0 65 72 28 31 29 20 43 6c 6f 73 65 3b 20 75 6e 73  er(1) Close; uns
28dc0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 24  et -nocomplain $
28dd0 72 65 61 64 65 72 28 31 29 0d 0a 0d 0a 20 20 6c  reader(1)....  l
28de0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
28df0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
28e00 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d  ute reader -form
28e10 61 74 20 6c 69 73 74 20 2d 61 6c 69 61 73 20 5c  at list -alias \
28e20 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53 45 4c  ..      $db "SEL
28e30 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
28e40 65 5f 73 74 6d 74 3b 22 5d 0d 0a 0d 0a 20 20 73  e_stmt;"]....  s
28e50 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  et result..} -cl
28e60 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74  eanup {..  unset
28e70 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 61   -nocomplain rea
28e80 64 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  der....  cleanup
28e90 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
28ea0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
28eb0 61 69 6e 20 72 65 73 75 6c 74 20 64 62 20 66 69  ain result db fi
28ec0 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
28ed0 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
28ee0 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
28ef0 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
28f00 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
28f10 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
28f20 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69  Data.SQLite SQLi
28f30 74 65 49 6e 74 65 72 6f 70 7d 20 2d 6d 61 74 63  teInterop} -matc
28f40 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
28f50 20 7b 5e 5c 7b 5c 7b 53 45 4c 45 43 54 20 5c 2a   {^\{\{SELECT \*
28f60 20 46 52 4f 4d 5c 0d 0a 73 71 6c 69 74 65 5f 73   FROM\..sqlite_s
28f70 74 6d 74 3b 5c 7d 20 31 31 20 31 20 31 20 30 20  tmt;\} 11 1 1 0 
28f80 30 20 30 20 30 20 30 20 31 20 5c 64 2b 20 5c 7b  0 0 0 0 1 \d+ \{
28f90 53 45 4c 45 43 54 20 5c 2a 20 46 52 4f 4d 20 74  SELECT \* FROM t
28fa0 31 3b 5c 7d 20 31 20 31 20 31 20 30 20 30 20 30  1;\} 1 1 1 0 0 0
28fb0 5c 0d 0a 28 3f 3a 37 7c 39 29 20 30 20 31 20 5c  \..(?:7|9) 0 1 \
28fc0 64 2b 5c 7d 20 5c 7b 5c 7b 53 45 4c 45 43 54 20  d+\} \{\{SELECT 
28fd0 5c 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73  \* FROM sqlite_s
28fe0 74 6d 74 3b 5c 7d 20 31 31 20 31 20 31 20 30 20  tmt;\} 11 1 1 0 
28ff0 30 20 30 20 30 20 30 20 31 20 5c 64 2b 5c 7d 24  0 0 0 0 1 \d+\}$
29000 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
29010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29050 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
29060 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 39 31   {test data-1.91
29070 20 7b 50 61 73 73 77 6f 72 64 20 65 72 72 6f 72   {Password error
29080 20 28 6e 6f 20 65 6e 63 72 79 70 74 69 6f 6e 20   (no encryption 
29090 73 75 70 70 6f 72 74 29 7d 20 2d 62 6f 64 79 20  support)} -body 
290a0 7b 0d 0a 20 20 6c 69 73 74 20 5b 63 61 74 63 68  {..  list [catch
290b0 20 7b 0d 0a 20 20 20 20 73 65 74 75 70 44 62 20   {..    setupDb 
290c0 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
290d0 74 61 2d 31 2e 39 31 2e 64 62 5d 20 22 22 20 22  ta-1.91.db] "" "
290e0 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72  " "" "" "Passwor
290f0 64 3d 31 32 33 34 3b 22 0d 0a 20 20 7d 20 6d 73  d=1234;"..  } ms
29100 67 5d 20 5b 65 78 74 72 61 63 74 53 79 73 74 65  g] [extractSyste
29110 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
29120 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 6d 73 67  tionMessage $msg
29130 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
29140 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
29150 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
29160 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6d 73  t -nocomplain ms
29170 67 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  g db fileName..}
29180 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5b 66   -constraints [f
29190 69 78 43 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65  ixConstraints {e
291a0 61 67 6c 65 20 21 53 79 73 74 65 6d 2e 44 61 74  agle !System.Dat
291b0 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74  a.SQLite.Encrypt
291c0 69 6f 6e 20 6d 6f 6e 6f 42 75 67 32 38 5c 0d 0a  ion monoBug28\..
291d0 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
291e0 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
291f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
29200 74 65 7d 5d 20 2d 72 65 73 75 6c 74 20 7b 31 20  te}] -result {1 
29210 7b 53 51 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72  {SQL logic\..err
29220 6f 72 20 2d 2d 20 43 61 6e 6e 6f 74 20 75 73 65  or -- Cannot use
29230 20 22 50 61 73 73 77 6f 72 64 22 20 63 6f 6e 6e   "Password" conn
29240 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72  ection string pr
29250 6f 70 65 72 74 79 3a 20 6c 69 62 72 61 72 79 20  operty: library 
29260 77 61 73 20 6e 6f 74 5c 0d 0a 62 75 69 6c 74 20  was not\..built 
29270 77 69 74 68 20 65 6e 63 72 79 70 74 69 6f 6e 20  with encryption 
29280 73 75 70 70 6f 72 74 2c 20 70 6c 65 61 73 65 20  support, please 
29290 73 65 65 20 22 68 74 74 70 73 3a 2f 2f 77 77 77  see "https://www
292a0 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 65 65 22  .sqlite.org/see"
292b0 20 66 6f 72 20 6d 6f 72 65 5c 0d 0a 69 6e 66 6f   for more\..info
292c0 72 6d 61 74 69 6f 6e 7d 7d 7d 0d 0a 0d 0a 23 23  rmation}}}....##
292d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
292e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
292f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
29310 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
29320 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
29330 61 74 61 2d 31 2e 39 32 20 7b 48 65 78 50 61 73  ata-1.92 {HexPas
29340 73 77 6f 72 64 20 65 72 72 6f 72 20 28 6e 6f 20  sword error (no 
29350 65 6e 63 72 79 70 74 69 6f 6e 20 73 75 70 70 6f  encryption suppo
29360 72 74 29 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  rt)} -body {..  
29370 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0d 0a 20  list [catch {.. 
29380 20 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20     setupDb [set 
29390 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
293a0 39 32 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20  92.db] "" "" "" 
293b0 22 22 20 22 48 65 78 50 61 73 73 77 6f 72 64 3d  "" "HexPassword=
293c0 31 32 33 34 3b 22 0d 0a 20 20 7d 20 6d 73 67 5d  1234;"..  } msg]
293d0 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d 44   [extractSystemD
293e0 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 69  ataSQLiteExcepti
293f0 6f 6e 4d 65 73 73 61 67 65 20 24 6d 73 67 5d 0d  onMessage $msg].
29400 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
29410 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
29420 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
29430 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6d 73 67 20  -nocomplain msg 
29440 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
29450 63 6f 6e 73 74 72 61 69 6e 74 73 20 5b 66 69 78  constraints [fix
29460 43 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  Constraints {eag
29470 6c 65 20 21 53 79 73 74 65 6d 2e 44 61 74 61 2e  le !System.Data.
29480 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f  SQLite.Encryptio
29490 6e 20 6d 6f 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f  n monoBug28\..co
294a0 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
294b0 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
294c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
294d0 7d 5d 20 2d 72 65 73 75 6c 74 20 7b 31 20 7b 53  }] -result {1 {S
294e0 51 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72  QL logic\..error
294f0 20 2d 2d 20 43 61 6e 6e 6f 74 20 75 73 65 20 22   -- Cannot use "
29500 48 65 78 50 61 73 73 77 6f 72 64 22 20 63 6f 6e  HexPassword" con
29510 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
29520 72 6f 70 65 72 74 79 3a 20 6c 69 62 72 61 72 79  roperty: library
29530 20 77 61 73 20 6e 6f 74 5c 0d 0a 62 75 69 6c 74   was not\..built
29540 20 77 69 74 68 20 65 6e 63 72 79 70 74 69 6f 6e   with encryption
29550 20 73 75 70 70 6f 72 74 2c 20 70 6c 65 61 73 65   support, please
29560 20 73 65 65 20 22 68 74 74 70 73 3a 2f 2f 77 77   see "https://ww
29570 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 65 65  w.sqlite.org/see
29580 22 20 66 6f 72 20 6d 6f 72 65 5c 0d 0a 69 6e 66  " for more\..inf
29590 6f 72 6d 61 74 69 6f 6e 7d 7d 7d 0d 0a 0d 0a 23  ormation}}}....#
295a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
295b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
295c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
295d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
295e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
295f0 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
29600 64 61 74 61 2d 31 2e 39 33 20 7b 65 78 74 65 6e  data-1.93 {exten
29610 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 20 6d  ded error code m
29620 65 73 73 61 67 65 73 7d 20 2d 73 65 74 75 70 20  essages} -setup 
29630 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 48 41 43 4b  {..  #..  # HACK
29640 3a 20 54 65 6d 70 6f 72 61 72 69 6c 79 20 64 69  : Temporarily di
29650 73 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  sable automatic 
29660 64 65 74 65 63 74 69 6f 6e 20 28 61 6e 64 20 75  detection (and u
29670 73 65 29 20 6f 66 20 74 68 65 0d 0a 20 20 23 20  se) of the..  # 
29680 20 20 20 20 20 20 6e 61 74 69 76 65 20 73 71 6c        native sql
29690 69 74 65 33 5f 65 72 72 73 74 72 28 29 20 41 50  ite3_errstr() AP
296a0 49 2e 0d 0a 20 20 23 0d 0a 20 20 6f 62 6a 65 63  I...  #..  objec
296b0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
296c0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
296d0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
296e0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 68  SQLite.SQLite3 h
296f0 61 76 65 5f 65 72 72 73 74 72 20 66 61 6c 73 65  ave_errstr false
29700 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73  ....  setupDb [s
29710 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
29720 2d 31 2e 39 33 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  -1.93.db]..} -bo
29730 64 79 20 7b 0d 0a 20 20 73 65 74 20 65 72 72 43  dy {..  set errC
29740 6f 64 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  odes [list].... 
29750 20 6c 61 70 70 65 6e 64 20 65 72 72 43 6f 64 65   lappend errCode
29760 73 20 32 35 36 3b 20 23 20 53 51 4c 49 54 45 5f  s 256; # SQLITE_
29770 4f 4b 5f 4c 4f 41 44 5f 50 45 52 4d 41 4e 45 4e  OK_LOAD_PERMANEN
29780 54 4c 59 0d 0a 20 20 6c 61 70 70 65 6e 64 20 65  TLY..  lappend e
29790 72 72 43 6f 64 65 73 20 35 31 33 3b 20 23 20 53  rrCodes 513; # S
297a0 51 4c 49 54 45 5f 45 52 52 4f 52 5f 52 45 54 52  QLITE_ERROR_RETR
297b0 59 0d 0a 20 20 6c 61 70 70 65 6e 64 20 65 72 72  Y..  lappend err
297c0 43 6f 64 65 73 20 35 32 32 3b 20 23 20 53 51 4c  Codes 522; # SQL
297d0 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f 52 54 5f  ITE_IOERR_SHORT_
297e0 52 45 41 44 0d 0a 20 20 6c 61 70 70 65 6e 64 20  READ..  lappend 
297f0 65 72 72 43 6f 64 65 73 20 32 37 30 3b 20 23 20  errCodes 270; # 
29800 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
29810 4e 4f 54 45 4d 50 44 49 52 0d 0a 20 20 6c 61 70  NOTEMPDIR..  lap
29820 70 65 6e 64 20 65 72 72 43 6f 64 65 73 20 35 33  pend errCodes 53
29830 39 3b 20 23 20 53 51 4c 49 54 45 5f 4e 4f 54 49  9; # SQLITE_NOTI
29840 43 45 5f 52 45 43 4f 56 45 52 5f 52 4f 4c 4c 42  CE_RECOVER_ROLLB
29850 41 43 4b 0d 0a 20 20 6c 61 70 70 65 6e 64 20 65  ACK..  lappend e
29860 72 72 43 6f 64 65 73 20 32 38 34 3b 20 23 20 53  rrCodes 284; # S
29870 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47 5f 41 55  QLITE_WARNING_AU
29880 54 4f 49 4e 44 45 58 0d 0a 20 20 6c 61 70 70 65  TOINDEX..  lappe
29890 6e 64 20 65 72 72 43 6f 64 65 73 20 39 39 39 3b  nd errCodes 999;
298a0 20 23 20 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72   # unknown error
298b0 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63  ....  set connec
298c0 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65  tion [getDbConne
298d0 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 6c 61 70 70  ction]....  lapp
298e0 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
298f0 68 41 6e 64 52 65 74 75 72 6e 20 7b 24 63 6f 6e  hAndReturn {$con
29900 6e 65 63 74 69 6f 6e 20 45 6e 61 62 6c 65 45 78  nection EnableEx
29910 74 65 6e 73 69 6f 6e 73 20 74 72 75 65 7d 5d 0d  tensions true}].
29920 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
29930 75 6c 74 20 5b 63 61 74 63 68 41 6e 64 52 65 74  ult [catchAndRet
29940 75 72 6e 20 7b 24 63 6f 6e 6e 65 63 74 69 6f 6e  urn {$connection
29950 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 5c   LoadExtension \
29960 0d 0a 20 20 20 20 20 20 5b 67 65 74 43 6f 72 65  ..      [getCore
29970 45 78 74 65 6e 73 69 6f 6e 42 69 6e 61 72 79 46  ExtensionBinaryF
29980 69 6c 65 4e 61 6d 65 20 6e 75 6c 6c 5d 20 69 6e  ileName null] in
29990 74 65 72 6f 70 5f 74 65 73 74 5f 65 78 74 65 6e  terop_test_exten
299a0 73 69 6f 6e 5f 69 6e 69 74 7d 5d 0d 0a 0d 0a 20  sion_init}].... 
299b0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
299c0 5b 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20  [catchAndReturn 
299d0 7b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74  {$connection Set
299e0 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43 6f  ExtendedResultCo
299f0 64 65 73 20 66 61 6c 73 65 7d 5d 0d 0a 0d 0a 20  des false}].... 
29a00 20 66 6f 72 65 61 63 68 20 65 72 72 43 6f 64 65   foreach errCode
29a10 20 24 65 72 72 43 6f 64 65 73 20 7b 0d 0a 20 20   $errCodes {..  
29a20 20 20 23 0d 0a 20 20 20 20 23 20 48 41 43 4b 3a    #..    # HACK:
29a30 20 57 69 74 68 6f 75 74 20 65 78 74 65 6e 64 65   Without extende
29a40 64 20 65 72 72 6f 72 20 63 6f 64 65 73 2c 20 53  d error codes, S
29a50 51 4c 49 54 45 5f 4f 4b 5f 2a 20 63 61 6e 6e 6f  QLITE_OK_* canno
29a60 74 20 62 65 20 68 61 6e 64 6c 65 64 20 76 69 61  t be handled via
29a70 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 74 68  ..    #       th
29a80 65 20 73 65 6d 61 6e 74 69 63 73 20 69 6e 20 74  e semantics in t
29a90 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
29aa0 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 2e 50 72  QLite.SQLite3.Pr
29ab0 65 70 61 72 65 20 6d 65 74 68 6f 64 3b 0d 0a 20  epare method;.. 
29ac0 20 20 20 23 20 20 20 20 20 20 20 69 74 20 77 69     #       it wi
29ad0 6c 6c 20 61 6c 77 61 79 73 20 61 73 73 75 6d 65  ll always assume
29ae0 20 74 68 61 74 20 6d 6f 72 65 20 72 65 73 75 6c   that more resul
29af0 74 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ts are available
29b00 20 77 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 23   when the..    #
29b10 20 20 20 20 20 20 20 65 72 72 6f 72 20 63 6f 64         error cod
29b20 65 20 69 73 20 4f 6b 2c 20 74 68 65 72 65 62 79  e is Ok, thereby
29b30 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72   looping forever
29b40 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66  ...    #..    if
29b50 20 7b 28 24 65 72 72 43 6f 64 65 20 26 20 30 78   {($errCode & 0x
29b60 46 46 29 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  FF) == 0} then {
29b70 63 6f 6e 74 69 6e 75 65 7d 0d 0a 0d 0a 20 20 20  continue}....   
29b80 20 72 65 73 65 74 45 78 63 65 70 74 69 6f 6e 3b   resetException;
29b90 20 63 61 74 63 68 41 6e 64 53 65 74 45 78 63 65   catchAndSetExce
29ba0 70 74 69 6f 6e 20 7b 0d 0a 20 20 20 20 20 20 73  ption {..      s
29bb0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
29bc0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
29bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 45 4c  ..          "SEL
29be0 45 43 54 20 69 6e 74 65 72 6f 70 45 72 72 6f 72  ECT interopError
29bf0 28 3f 29 3b 22 20 5b 6c 69 73 74 20 70 61 72 61  (?);" [list para
29c00 6d 31 20 49 6e 74 33 32 20 24 65 72 72 43 6f 64  m1 Int32 $errCod
29c10 65 5d 0d 0a 20 20 20 20 7d 20 65 78 63 65 70 74  e]..    } except
29c20 69 6f 6e 0d 0a 0d 0a 20 20 20 20 6c 61 70 70 65  ion....    lappe
29c30 6e 64 20 72 65 73 75 6c 74 20 5b 24 65 78 63 65  nd result [$exce
29c40 70 74 69 6f 6e 20 52 65 73 75 6c 74 43 6f 64 65  ption ResultCode
29c50 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6e 6f  ] \..        [no
29c60 72 6d 61 6c 69 7a 65 45 78 63 65 70 74 69 6f 6e  rmalizeException
29c70 4d 65 73 73 61 67 65 20 5b 24 65 78 63 65 70 74  Message [$except
29c80 69 6f 6e 20 4d 65 73 73 61 67 65 5d 5d 0d 0a 20  ion Message]].. 
29c90 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20   }....  lappend 
29ca0 72 65 73 75 6c 74 20 5b 63 61 74 63 68 41 6e 64  result [catchAnd
29cb0 52 65 74 75 72 6e 20 7b 24 63 6f 6e 6e 65 63 74  Return {$connect
29cc0 69 6f 6e 20 53 65 74 45 78 74 65 6e 64 65 64 52  ion SetExtendedR
29cd0 65 73 75 6c 74 43 6f 64 65 73 20 74 72 75 65 7d  esultCodes true}
29ce0 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 65  ]....  foreach e
29cf0 72 72 43 6f 64 65 20 24 65 72 72 43 6f 64 65 73  rrCode $errCodes
29d00 20 7b 0d 0a 20 20 20 20 72 65 73 65 74 45 78 63   {..    resetExc
29d10 65 70 74 69 6f 6e 3b 20 63 61 74 63 68 41 6e 64  eption; catchAnd
29d20 53 65 74 45 78 63 65 70 74 69 6f 6e 20 7b 0d 0a  SetException {..
29d30 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
29d40 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
29d50 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20  r $db \..       
29d60 20 20 20 22 53 45 4c 45 43 54 20 69 6e 74 65 72     "SELECT inter
29d70 6f 70 45 72 72 6f 72 28 3f 29 3b 22 20 5b 6c 69  opError(?);" [li
29d80 73 74 20 70 61 72 61 6d 31 20 49 6e 74 33 32 20  st param1 Int32 
29d90 24 65 72 72 43 6f 64 65 5d 0d 0a 20 20 20 20 7d  $errCode]..    }
29da0 20 65 78 63 65 70 74 69 6f 6e 0d 0a 0d 0a 20 20   exception....  
29db0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
29dc0 20 5b 24 65 78 63 65 70 74 69 6f 6e 20 52 65 73   [$exception Res
29dd0 75 6c 74 43 6f 64 65 5d 20 5c 0d 0a 20 20 20 20  ultCode] \..    
29de0 20 20 20 20 5b 6e 6f 72 6d 61 6c 69 7a 65 45 78      [normalizeEx
29df0 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 5b  ceptionMessage [
29e00 24 65 78 63 65 70 74 69 6f 6e 20 4d 65 73 73 61  $exception Messa
29e10 67 65 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  ge]]..  }....  s
29e20 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  et result..} -cl
29e30 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
29e40 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
29e50 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  ..  freeDbConnec
29e60 74 69 6f 6e 0d 0a 0d 0a 20 20 63 61 74 63 68 20  tion....  catch 
29e70 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
29e80 48 41 43 4b 3a 20 52 65 73 74 6f 72 65 20 61 75  HACK: Restore au
29e90 74 6f 6d 61 74 69 63 20 64 65 74 65 63 74 69 6f  tomatic detectio
29ea0 6e 20 28 61 6e 64 20 75 73 65 29 20 6f 66 20 74  n (and use) of t
29eb0 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 23  he native..    #
29ec0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
29ed0 72 72 73 74 72 28 29 20 41 50 49 2e 0d 0a 20 20  rrstr() API...  
29ee0 20 20 23 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20    #..    object 
29ef0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
29f00 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
29f10 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
29f20 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 68  SQLite.SQLite3 h
29f30 61 76 65 5f 65 72 72 73 74 72 20 6e 75 6c 6c 0d  ave_errstr null.
29f40 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
29f50 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
29f60 6c 74 20 65 78 63 65 70 74 69 6f 6e 20 65 72 72  lt exception err
29f70 43 6f 64 65 20 65 72 72 43 6f 64 65 73 0d 0a 20  Code errCodes.. 
29f80 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
29f90 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62  in connection db
29fa0 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
29fb0 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
29fc0 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
29fd0 6d 6f 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 70  monoBug28\..comp
29fe0 69 6c 65 2e 44 41 54 41 20 64 65 66 69 6e 65 43  ile.DATA defineC
29ff0 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
2a000 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
2a010 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f  OP_TEST_EXTENSIO
2a020 4e 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  N\..command.sql 
2a030 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
2a040 74 61 2e 53 51 4c 69 74 65 7d 20 2d 63 6f 6e 73  ta.SQLite} -cons
2a050 74 72 61 69 6e 74 45 78 70 72 65 73 73 69 6f 6e  traintExpression
2a060 20 5c 0d 0a 7b 5b 69 6e 66 6f 20 65 78 69 73 74   \..{[info exist
2a070 73 20 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f 76  s core_library_v
2a080 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 5b 70  ersion] && \..[p
2a090 61 63 6b 61 67 65 20 76 63 6f 6d 70 61 72 65 20  ackage vcompare 
2a0a0 24 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f 76 65  $core_library_ve
2a0b0 72 73 69 6f 6e 20 33 2e 32 33 5d 20 3e 3d 20 30  rsion 3.23] >= 0
2a0c0 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 30 20 7b 7d  } -result {{0 {}
2a0d0 7d 20 7b 30 20 7b 7d 7d 20 7b 30 5c 0d 0a 7b 7d  } {0 {}} {0\..{}
2a0e0 7d 20 45 72 72 6f 72 20 7b 53 51 4c 20 6c 6f 67  } Error {SQL log
2a0f0 69 63 20 65 72 72 6f 72 20 3d 3d 3e 20 53 51 4c  ic error ==> SQL
2a100 20 6c 6f 67 69 63 20 65 72 72 6f 72 7d 20 49 6f   logic error} Io
2a110 45 72 72 20 7b 64 69 73 6b 20 49 2f 4f 20 65 72  Err {disk I/O er
2a120 72 6f 72 20 3d 3d 3e 20 64 69 73 6b 5c 0d 0a 49  ror ==> disk\..I
2a130 2f 4f 20 65 72 72 6f 72 7d 20 43 61 6e 74 4f 70  /O error} CantOp
2a140 65 6e 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70  en {unable to op
2a150 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
2a160 20 3d 3d 3e 20 75 6e 61 62 6c 65 20 74 6f 20 6f   ==> unable to o
2a170 70 65 6e 20 64 61 74 61 62 61 73 65 5c 0d 0a 66  pen database\..f
2a180 69 6c 65 7d 20 4e 6f 74 69 63 65 20 7b 6e 6f 74  ile} Notice {not
2a190 69 66 69 63 61 74 69 6f 6e 20 6d 65 73 73 61 67  ification messag
2a1a0 65 20 3d 3d 3e 20 6e 6f 74 69 66 69 63 61 74 69  e ==> notificati
2a1b0 6f 6e 20 6d 65 73 73 61 67 65 7d 20 57 61 72 6e  on message} Warn
2a1c0 69 6e 67 20 7b 77 61 72 6e 69 6e 67 5c 0d 0a 6d  ing {warning\..m
2a1d0 65 73 73 61 67 65 20 3d 3d 3e 20 77 61 72 6e 69  essage ==> warni
2a1e0 6e 67 20 6d 65 73 73 61 67 65 7d 20 32 33 31 20  ng message} 231 
2a1f0 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72  {SQL logic error
2a200 20 3d 3d 3e 20 75 6e 6b 6e 6f 77 6e 20 65 72 72   ==> unknown err
2a210 6f 72 7d 20 7b 30 20 7b 7d 7d 5c 0d 0a 4f 6b 5f  or} {0 {}}\..Ok_
2a220 4c 6f 61 64 5f 50 65 72 6d 61 6e 65 6e 74 6c 79  Load_Permanently
2a230 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 3d   {not an error =
2a240 3d 3e 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d  => not an error}
2a250 20 45 72 72 6f 72 5f 52 65 74 72 79 20 7b 53 51   Error_Retry {SQ
2a260 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 20  L logic\..error 
2a270 3d 3d 3e 20 53 51 4c 20 6c 6f 67 69 63 20 65 72  ==> SQL logic er
2a280 72 6f 72 7d 20 49 6f 45 72 72 5f 53 68 6f 72 74  ror} IoErr_Short
2a290 5f 52 65 61 64 20 7b 64 69 73 6b 20 49 2f 4f 20  _Read {disk I/O 
2a2a0 65 72 72 6f 72 20 3d 3d 3e 20 64 69 73 6b 20 49  error ==> disk I
2a2b0 2f 4f 20 65 72 72 6f 72 7d 5c 0d 0a 43 61 6e 74  /O error}\..Cant
2a2c0 4f 70 65 6e 5f 4e 6f 54 65 6d 70 44 69 72 20 7b  Open_NoTempDir {
2a2d0 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
2a2e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 3d 3d 3e  atabase file ==>
2a2f0 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20   unable to open 
2a300 64 61 74 61 62 61 73 65 5c 0d 0a 66 69 6c 65 7d  database\..file}
2a310 20 4e 6f 74 69 63 65 5f 52 65 63 6f 76 65 72 5f   Notice_Recover_
2a320 52 6f 6c 6c 62 61 63 6b 20 7b 6e 6f 74 69 66 69  Rollback {notifi
2a330 63 61 74 69 6f 6e 20 6d 65 73 73 61 67 65 20 3d  cation message =
2a340 3d 3e 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20  => notification 
2a350 6d 65 73 73 61 67 65 7d 5c 0d 0a 57 61 72 6e 69  message}\..Warni
2a360 6e 67 5f 41 75 74 6f 49 6e 64 65 78 20 7b 77 61  ng_AutoIndex {wa
2a370 72 6e 69 6e 67 20 6d 65 73 73 61 67 65 20 3d 3d  rning message ==
2a380 3e 20 77 61 72 6e 69 6e 67 20 6d 65 73 73 61 67  > warning messag
2a390 65 7d 20 39 39 39 20 7b 53 51 4c 20 6c 6f 67 69  e} 999 {SQL logi
2a3a0 63 20 65 72 72 6f 72 5c 0d 0a 3d 3d 3e 20 75 6e  c error\..==> un
2a3b0 6b 6e 6f 77 6e 20 65 72 72 6f 72 7d 7d 7d 0d 0a  known error}}}..
2a3c0 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
2a3d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a3e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a3f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a410 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
2a420 73 74 20 64 61 74 61 2d 31 2e 39 34 20 7b 65 78  st data-1.94 {ex
2a430 74 65 6e 64 65 64 20 65 72 72 6f 72 20 63 6f 64  tended error cod
2a440 65 20 6d 65 73 73 61 67 65 73 7d 20 2d 73 65 74  e messages} -set
2a450 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
2a460 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
2a470 74 61 2d 31 2e 39 34 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.94.db]..} -
2a480 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 65 72  body {..  set er
2a490 72 43 6f 64 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d  rCodes [list]...
2a4a0 0a 20 20 6c 61 70 70 65 6e 64 20 65 72 72 43 6f  .  lappend errCo
2a4b0 64 65 73 20 32 35 36 3b 20 23 20 53 51 4c 49 54  des 256; # SQLIT
2a4c0 45 5f 4f 4b 5f 4c 4f 41 44 5f 50 45 52 4d 41 4e  E_OK_LOAD_PERMAN
2a4d0 45 4e 54 4c 59 0d 0a 20 20 6c 61 70 70 65 6e 64  ENTLY..  lappend
2a4e0 20 65 72 72 43 6f 64 65 73 20 35 31 33 3b 20 23   errCodes 513; #
2a4f0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 5f 52 45   SQLITE_ERROR_RE
2a500 54 52 59 0d 0a 20 20 6c 61 70 70 65 6e 64 20 65  TRY..  lappend e
2a510 72 72 43 6f 64 65 73 20 35 32 32 3b 20 23 20 53  rrCodes 522; # S
2a520 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f 52  QLITE_IOERR_SHOR
2a530 54 5f 52 45 41 44 0d 0a 20 20 6c 61 70 70 65 6e  T_READ..  lappen
2a540 64 20 65 72 72 43 6f 64 65 73 20 32 37 30 3b 20  d errCodes 270; 
2a550 23 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  # SQLITE_CANTOPE
2a560 4e 5f 4e 4f 54 45 4d 50 44 49 52 0d 0a 20 20 6c  N_NOTEMPDIR..  l
2a570 61 70 70 65 6e 64 20 65 72 72 43 6f 64 65 73 20  append errCodes 
2a580 35 33 39 3b 20 23 20 53 51 4c 49 54 45 5f 4e 4f  539; # SQLITE_NO
2a590 54 49 43 45 5f 52 45 43 4f 56 45 52 5f 52 4f 4c  TICE_RECOVER_ROL
2a5a0 4c 42 41 43 4b 0d 0a 20 20 6c 61 70 70 65 6e 64  LBACK..  lappend
2a5b0 20 65 72 72 43 6f 64 65 73 20 32 38 34 3b 20 23   errCodes 284; #
2a5c0 20 53 51 4c 49 54 45 5f 57 41 52 4e 49 4e 47 5f   SQLITE_WARNING_
2a5d0 41 55 54 4f 49 4e 44 45 58 0d 0a 20 20 6c 61 70  AUTOINDEX..  lap
2a5e0 70 65 6e 64 20 65 72 72 43 6f 64 65 73 20 39 39  pend errCodes 99
2a5f0 39 3b 20 23 20 75 6e 6b 6e 6f 77 6e 20 65 72 72  9; # unknown err
2a600 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e  or....  set conn
2a610 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e  ection [getDbCon
2a620 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 6c 61  nection]....  la
2a630 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
2a640 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 24 63  tchAndReturn {$c
2a650 6f 6e 6e 65 63 74 69 6f 6e 20 45 6e 61 62 6c 65  onnection Enable
2a660 45 78 74 65 6e 73 69 6f 6e 73 20 74 72 75 65 7d  Extensions true}
2a670 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
2a680 65 73 75 6c 74 20 5b 63 61 74 63 68 41 6e 64 52  esult [catchAndR
2a690 65 74 75 72 6e 20 7b 24 63 6f 6e 6e 65 63 74 69  eturn {$connecti
2a6a0 6f 6e 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  on LoadExtension
2a6b0 20 5c 0d 0a 20 20 20 20 20 20 5b 67 65 74 43 6f   \..      [getCo
2a6c0 72 65 45 78 74 65 6e 73 69 6f 6e 42 69 6e 61 72  reExtensionBinar
2a6d0 79 46 69 6c 65 4e 61 6d 65 20 6e 75 6c 6c 5d 20  yFileName null] 
2a6e0 69 6e 74 65 72 6f 70 5f 74 65 73 74 5f 65 78 74  interop_test_ext
2a6f0 65 6e 73 69 6f 6e 5f 69 6e 69 74 7d 5d 0d 0a 0d  ension_init}]...
2a700 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
2a710 74 20 5b 63 61 74 63 68 41 6e 64 52 65 74 75 72  t [catchAndRetur
2a720 6e 20 7b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 53  n {$connection S
2a730 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  etExtendedResult
2a740 43 6f 64 65 73 20 66 61 6c 73 65 7d 5d 0d 0a 0d  Codes false}]...
2a750 0a 20 20 66 6f 72 65 61 63 68 20 65 72 72 43 6f  .  foreach errCo
2a760 64 65 20 24 65 72 72 43 6f 64 65 73 20 7b 0d 0a  de $errCodes {..
2a770 20 20 20 20 23 0d 0a 20 20 20 20 23 20 48 41 43      #..    # HAC
2a780 4b 3a 20 57 69 74 68 6f 75 74 20 65 78 74 65 6e  K: Without exten
2a790 64 65 64 20 65 72 72 6f 72 20 63 6f 64 65 73 2c  ded error codes,
2a7a0 20 53 51 4c 49 54 45 5f 4f 4b 5f 2a 20 63 61 6e   SQLITE_OK_* can
2a7b0 6e 6f 74 20 62 65 20 68 61 6e 64 6c 65 64 20 76  not be handled v
2a7c0 69 61 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  ia..    #       
2a7d0 74 68 65 20 73 65 6d 61 6e 74 69 63 73 20 69 6e  the semantics in
2a7e0 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
2a7f0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 2e  .SQLite.SQLite3.
2a800 50 72 65 70 61 72 65 20 6d 65 74 68 6f 64 3b 0d  Prepare method;.
2a810 0a 20 20 20 20 23 20 20 20 20 20 20 20 69 74 20  .    #       it 
2a820 77 69 6c 6c 20 61 6c 77 61 79 73 20 61 73 73 75  will always assu
2a830 6d 65 20 74 68 61 74 20 6d 6f 72 65 20 72 65 73  me that more res
2a840 75 6c 74 73 20 61 72 65 20 61 76 61 69 6c 61 62  ults are availab
2a850 6c 65 20 77 68 65 6e 20 74 68 65 0d 0a 20 20 20  le when the..   
2a860 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 63   #       error c
2a870 6f 64 65 20 69 73 20 4f 6b 2c 20 74 68 65 72 65  ode is Ok, there
2a880 62 79 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76  by looping forev
2a890 65 72 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  er...    #..    
2a8a0 69 66 20 7b 28 24 65 72 72 43 6f 64 65 20 26 20  if {($errCode & 
2a8b0 30 78 46 46 29 20 3d 3d 20 30 7d 20 74 68 65 6e  0xFF) == 0} then
2a8c0 20 7b 63 6f 6e 74 69 6e 75 65 7d 0d 0a 0d 0a 20   {continue}.... 
2a8d0 20 20 20 72 65 73 65 74 45 78 63 65 70 74 69 6f     resetExceptio
2a8e0 6e 3b 20 63 61 74 63 68 41 6e 64 53 65 74 45 78  n; catchAndSetEx
2a8f0 63 65 70 74 69 6f 6e 20 7b 0d 0a 20 20 20 20 20  ception {..     
2a900 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78   sql execute -ex
2a910 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
2a920 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53   \..          "S
2a930 45 4c 45 43 54 20 69 6e 74 65 72 6f 70 45 72 72  ELECT interopErr
2a940 6f 72 28 3f 29 3b 22 20 5b 6c 69 73 74 20 70 61  or(?);" [list pa
2a950 72 61 6d 31 20 49 6e 74 33 32 20 24 65 72 72 43  ram1 Int32 $errC
2a960 6f 64 65 5d 0d 0a 20 20 20 20 7d 20 65 78 63 65  ode]..    } exce
2a970 70 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 6c 61 70  ption....    lap
2a980 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 65 78  pend result [$ex
2a990 63 65 70 74 69 6f 6e 20 52 65 73 75 6c 74 43 6f  ception ResultCo
2a9a0 64 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  de] \..        [
2a9b0 6e 6f 72 6d 61 6c 69 7a 65 45 78 63 65 70 74 69  normalizeExcepti
2a9c0 6f 6e 4d 65 73 73 61 67 65 20 5b 24 65 78 63 65  onMessage [$exce
2a9d0 70 74 69 6f 6e 20 4d 65 73 73 61 67 65 5d 5d 0d  ption Message]].
2a9e0 0a 20 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  .  }....  lappen
2a9f0 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 41  d result [catchA
2aa00 6e 64 52 65 74 75 72 6e 20 7b 24 63 6f 6e 6e 65  ndReturn {$conne
2aa10 63 74 69 6f 6e 20 53 65 74 45 78 74 65 6e 64 65  ction SetExtende
2aa20 64 52 65 73 75 6c 74 43 6f 64 65 73 20 74 72 75  dResultCodes tru
2aa30 65 7d 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68  e}]....  foreach
2aa40 20 65 72 72 43 6f 64 65 20 24 65 72 72 43 6f 64   errCode $errCod
2aa50 65 73 20 7b 0d 0a 20 20 20 20 72 65 73 65 74 45  es {..    resetE
2aa60 78 63 65 70 74 69 6f 6e 3b 20 63 61 74 63 68 41  xception; catchA
2aa70 6e 64 53 65 74 45 78 63 65 70 74 69 6f 6e 20 7b  ndSetException {
2aa80 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65 63  ..      sql exec
2aa90 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
2aaa0 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
2aab0 20 20 20 20 20 22 53 45 4c 45 43 54 20 69 6e 74       "SELECT int
2aac0 65 72 6f 70 45 72 72 6f 72 28 3f 29 3b 22 20 5b  eropError(?);" [
2aad0 6c 69 73 74 20 70 61 72 61 6d 31 20 49 6e 74 33  list param1 Int3
2aae0 32 20 24 65 72 72 43 6f 64 65 5d 0d 0a 20 20 20  2 $errCode]..   
2aaf0 20 7d 20 65 78 63 65 70 74 69 6f 6e 0d 0a 0d 0a   } exception....
2ab00 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
2ab10 6c 74 20 5b 24 65 78 63 65 70 74 69 6f 6e 20 52  lt [$exception R
2ab20 65 73 75 6c 74 43 6f 64 65 5d 20 5c 0d 0a 20 20  esultCode] \..  
2ab30 20 20 20 20 20 20 5b 6e 6f 72 6d 61 6c 69 7a 65        [normalize
2ab40 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
2ab50 20 5b 24 65 78 63 65 70 74 69 6f 6e 20 4d 65 73   [$exception Mes
2ab60 73 61 67 65 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  sage]]..  }.... 
2ab70 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
2ab80 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
2ab90 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
2aba0 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e  ....  freeDbConn
2abb0 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65  ection....  unse
2abc0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
2abd0 73 75 6c 74 20 65 78 63 65 70 74 69 6f 6e 20 65  sult exception e
2abe0 72 72 43 6f 64 65 20 65 72 72 43 6f 64 65 73 0d  rrCode errCodes.
2abf0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
2ac00 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  lain connection 
2ac10 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
2ac20 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
2ac30 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
2ac40 74 20 6d 6f 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f  t monoBug28\..co
2ac50 6d 70 69 6c 65 2e 44 41 54 41 20 64 65 66 69 6e  mpile.DATA defin
2ac60 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
2ac70 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
2ac80 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
2ac90 49 4f 4e 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e 73 71  ION\..command.sq
2aca0 6c 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  l SQLite System.
2acb0 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 63 6f  Data.SQLite} -co
2acc0 6e 73 74 72 61 69 6e 74 45 78 70 72 65 73 73 69  nstraintExpressi
2acd0 6f 6e 20 5c 0d 0a 7b 5b 69 6e 66 6f 20 65 78 69  on \..{[info exi
2ace0 73 74 73 20 63 6f 72 65 5f 6c 69 62 72 61 72 79  sts core_library
2acf0 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a  _version] && \..
2ad00 5b 70 61 63 6b 61 67 65 20 76 63 6f 6d 70 61 72  [package vcompar
2ad10 65 20 24 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f  e $core_library_
2ad20 76 65 72 73 69 6f 6e 20 33 2e 32 33 5d 20 3e 3d  version 3.23] >=
2ad30 20 30 7d 20 2d 72 65 73 75 6c 74 20 7b 7b 30 20   0} -result {{0 
2ad40 7b 7d 7d 20 7b 30 20 7b 7d 7d 20 7b 30 5c 0d 0a  {}} {0 {}} {0\..
2ad50 7b 7d 7d 20 45 72 72 6f 72 20 7b 53 51 4c 20 6c  {}} Error {SQL l
2ad60 6f 67 69 63 20 65 72 72 6f 72 20 3d 3d 3e 20 53  ogic error ==> S
2ad70 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 7d 20  QL logic error} 
2ad80 49 6f 45 72 72 20 7b 64 69 73 6b 20 49 2f 4f 20  IoErr {disk I/O 
2ad90 65 72 72 6f 72 20 3d 3d 3e 20 64 69 73 6b 5c 0d  error ==> disk\.
2ada0 0a 49 2f 4f 20 65 72 72 6f 72 7d 20 43 61 6e 74  .I/O error} Cant
2adb0 4f 70 65 6e 20 7b 75 6e 61 62 6c 65 20 74 6f 20  Open {unable to 
2adc0 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69  open database fi
2add0 6c 65 20 3d 3d 3e 20 75 6e 61 62 6c 65 20 74 6f  le ==> unable to
2ade0 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 5c 0d   open database\.
2adf0 0a 66 69 6c 65 7d 20 4e 6f 74 69 63 65 20 7b 6e  .file} Notice {n
2ae00 6f 74 69 66 69 63 61 74 69 6f 6e 20 6d 65 73 73  otification mess
2ae10 61 67 65 20 3d 3d 3e 20 6e 6f 74 69 66 69 63 61  age ==> notifica
2ae20 74 69 6f 6e 20 6d 65 73 73 61 67 65 7d 20 57 61  tion message} Wa
2ae30 72 6e 69 6e 67 20 7b 77 61 72 6e 69 6e 67 5c 0d  rning {warning\.
2ae40 0a 6d 65 73 73 61 67 65 20 3d 3d 3e 20 77 61 72  .message ==> war
2ae50 6e 69 6e 67 20 6d 65 73 73 61 67 65 7d 20 32 33  ning message} 23
2ae60 31 20 7b 75 6e 6b 6e 6f 77 6e 20 65 72 72 6f 72  1 {unknown error
2ae70 20 3d 3d 3e 20 75 6e 6b 6e 6f 77 6e 20 65 72 72   ==> unknown err
2ae80 6f 72 7d 20 7b 30 20 7b 7d 7d 5c 0d 0a 4f 6b 5f  or} {0 {}}\..Ok_
2ae90 4c 6f 61 64 5f 50 65 72 6d 61 6e 65 6e 74 6c 79  Load_Permanently
2aea0 20 7b 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 3d   {not an error =
2aeb0 3d 3e 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 7d  => not an error}
2aec0 20 45 72 72 6f 72 5f 52 65 74 72 79 20 7b 53 51   Error_Retry {SQ
2aed0 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 20  L logic\..error 
2aee0 3d 3d 3e 20 53 51 4c 20 6c 6f 67 69 63 20 65 72  ==> SQL logic er
2aef0 72 6f 72 7d 20 49 6f 45 72 72 5f 53 68 6f 72 74  ror} IoErr_Short
2af00 5f 52 65 61 64 20 7b 64 69 73 6b 20 49 2f 4f 20  _Read {disk I/O 
2af10 65 72 72 6f 72 20 3d 3d 3e 20 64 69 73 6b 20 49  error ==> disk I
2af20 2f 4f 20 65 72 72 6f 72 7d 5c 0d 0a 43 61 6e 74  /O error}\..Cant
2af30 4f 70 65 6e 5f 4e 6f 54 65 6d 70 44 69 72 20 7b  Open_NoTempDir {
2af40 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64  unable to open d
2af50 61 74 61 62 61 73 65 20 66 69 6c 65 20 3d 3d 3e  atabase file ==>
2af60 20 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20   unable to open 
2af70 64 61 74 61 62 61 73 65 5c 0d 0a 66 69 6c 65 7d  database\..file}
2af80 20 4e 6f 74 69 63 65 5f 52 65 63 6f 76 65 72 5f   Notice_Recover_
2af90 52 6f 6c 6c 62 61 63 6b 20 7b 6e 6f 74 69 66 69  Rollback {notifi
2afa0 63 61 74 69 6f 6e 20 6d 65 73 73 61 67 65 20 3d  cation message =
2afb0 3d 3e 20 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20  => notification 
2afc0 6d 65 73 73 61 67 65 7d 5c 0d 0a 57 61 72 6e 69  message}\..Warni
2afd0 6e 67 5f 41 75 74 6f 49 6e 64 65 78 20 7b 77 61  ng_AutoIndex {wa
2afe0 72 6e 69 6e 67 20 6d 65 73 73 61 67 65 20 3d 3d  rning message ==
2aff0 3e 20 77 61 72 6e 69 6e 67 20 6d 65 73 73 61 67  > warning messag
2b000 65 7d 20 39 39 39 20 7b 75 6e 6b 6e 6f 77 6e 20  e} 999 {unknown 
2b010 65 72 72 6f 72 20 3d 3d 3e 5c 0d 0a 75 6e 6b 6e  error ==>\..unkn
2b020 6f 77 6e 20 65 72 72 6f 72 7d 7d 7d 0d 0a 0d 0a  own error}}}....
2b030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2b070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
2b080 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
2b090 20 64 61 74 61 2d 31 2e 39 35 20 7b 53 65 74 43   data-1.95 {SetC
2b0a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70 74 69  onfigurationOpti
2b0b0 6f 6e 20 6d 65 74 68 6f 64 7d 20 2d 73 65 74 75  on method} -setu
2b0c0 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
2b0d0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
2b0e0 61 2d 31 2e 39 35 2e 64 62 5d 20 22 22 20 22 22  a-1.95.db] "" ""
2b0f0 20 22 22 20 5c 0d 0a 20 20 20 20 20 20 22 4e 6f   "" \..      "No
2b100 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f  ExtensionFunctio
2b110 6e 73 20 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f  ns NoBindFunctio
2b120 6e 73 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  ns"..} -body {..
2b130 20 20 73 65 74 20 64 62 43 6f 6e 66 69 67 73 20    set dbConfigs 
2b140 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70  [list]....  lapp
2b150 65 6e 64 20 64 62 43 6f 6e 66 69 67 73 20 53 51  end dbConfigs SQ
2b160 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f  LITE_DBCONFIG_NO
2b170 4e 45 3b 20 23 20 6e 69 6c 0d 0a 20 20 6c 61 70  NE; # nil..  lap
2b180 70 65 6e 64 20 64 62 43 6f 6e 66 69 67 73 20 53  pend dbConfigs S
2b190 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4d  QLITE_DBCONFIG_M
2b1a0 41 49 4e 44 42 4e 41 4d 45 3b 20 23 20 63 68 61  AINDBNAME; # cha
2b1b0 72 2a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 64 62  r*..  lappend db
2b1c0 43 6f 6e 66 69 67 73 20 53 51 4c 49 54 45 5f 44  Configs SQLITE_D
2b1d0 42 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49 44  BCONFIG_LOOKASID
2b1e0 45 3b 20 23 20 76 6f 69 64 2a 20 69 6e 74 20 69  E; # void* int i
2b1f0 6e 74 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  nt....  lappend 
2b200 64 62 43 6f 6e 66 69 67 73 20 53 51 4c 49 54 45  dbConfigs SQLITE
2b210 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
2b220 5f 46 4b 45 59 3b 20 23 20 69 6e 74 20 69 6e 74  _FKEY; # int int
2b230 2a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 64 62 43  *..  lappend dbC
2b240 6f 6e 66 69 67 73 20 53 51 4c 49 54 45 5f 44 42  onfigs SQLITE_DB
2b250 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 54 52  CONFIG_ENABLE_TR
2b260 49 47 47 45 52 3b 20 23 20 69 6e 74 20 69 6e 74  IGGER; # int int
2b270 2a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 64 62 43  *..  lappend dbC
2b280 6f 6e 66 69 67 73 20 53 51 4c 49 54 45 5f 44 42  onfigs SQLITE_DB
2b290 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54  CONFIG_ENABLE_FT
2b2a0 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3b 20 23 20  S3_TOKENIZER; # 
2b2b0 69 6e 74 20 69 6e 74 2a 0d 0a 20 20 6c 61 70 70  int int*..  lapp
2b2c0 65 6e 64 20 64 62 43 6f 6e 66 69 67 73 20 53 51  end dbConfigs SQ
2b2d0 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e  LITE_DBCONFIG_EN
2b2e0 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  ABLE_LOAD_EXTENS
2b2f0 49 4f 4e 3b 20 23 20 69 6e 74 20 69 6e 74 2a 0d  ION; # int int*.
2b300 0a 20 20 6c 61 70 70 65 6e 64 20 64 62 43 6f 6e  .  lappend dbCon
2b310 66 69 67 73 20 53 51 4c 49 54 45 5f 44 42 43 4f  figs SQLITE_DBCO
2b320 4e 46 49 47 5f 4e 4f 5f 43 4b 50 54 5f 4f 4e 5f  NFIG_NO_CKPT_ON_
2b330 43 4c 4f 53 45 3b 20 23 20 69 6e 74 20 69 6e 74  CLOSE; # int int
2b340 2a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 64 62 43  *..  lappend dbC
2b350 6f 6e 66 69 67 73 20 53 51 4c 49 54 45 5f 44 42  onfigs SQLITE_DB
2b360 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 51 50  CONFIG_ENABLE_QP
2b370 53 47 3b 20 23 20 69 6e 74 20 69 6e 74 2a 0d 0a  SG; # int int*..
2b380 20 20 6c 61 70 70 65 6e 64 20 64 62 43 6f 6e 66    lappend dbConf
2b390 69 67 73 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e  igs SQLITE_DBCON
2b3a0 46 49 47 5f 54 52 49 47 47 45 52 5f 45 51 50 3b  FIG_TRIGGER_EQP;
2b3b0 20 23 20 69 6e 74 20 69 6e 74 2a 0d 0a 0d 0a 20   # int int*.... 
2b3c0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
2b3d0 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
2b3e0 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 64  ]....  foreach d
2b3f0 62 43 6f 6e 66 69 67 20 24 64 62 43 6f 6e 66 69  bConfig $dbConfi
2b400 67 73 20 7b 0d 0a 20 20 20 20 73 77 69 74 63 68  gs {..    switch
2b410 20 2d 65 78 61 63 74 20 2d 2d 20 24 64 62 43 6f   -exact -- $dbCo
2b420 6e 66 69 67 20 7b 0d 0a 20 20 20 20 20 20 53 51  nfig {..      SQ
2b430 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e 4f  LITE_DBCONFIG_NO
2b440 4e 45 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  NE {..        se
2b450 74 20 76 61 6c 75 65 20 6e 75 6c 6c 0d 0a 20 20  t value null..  
2b460 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 53 51 4c      }..      SQL
2b470 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4d 41 49  ITE_DBCONFIG_MAI
2b480 4e 44 42 4e 41 4d 45 20 7b 0d 0a 20 20 20 20 20  NDBNAME {..     
2b490 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f 62     set value [ob
2b4a0 6a 65 63 74 20 63 72 65 61 74 65 20 53 74 72 69  ject create Stri
2b4b0 6e 67 20 74 65 73 74 5d 0d 0a 20 20 20 20 20 20  ng test]..      
2b4c0 7d 0d 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  }..      SQLITE_
2b4d0 44 42 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49  DBCONFIG_LOOKASI
2b4e0 44 45 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  DE {..        if
2b4f0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70   {[info exists p
2b500 74 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  tr]} then {..   
2b510 20 20 20 20 20 20 20 65 72 72 6f 72 20 22 70 6f         error "po
2b520 69 6e 74 65 72 20 76 61 6c 75 65 20 73 68 6f 75  inter value shou
2b530 6c 64 20 6e 6f 74 20 65 78 69 73 74 20 79 65 74  ld not exist yet
2b540 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
2b550 20 20 20 20 20 20 20 20 73 65 74 20 73 69 7a 65          set size
2b560 20 31 30 30 3b 20 73 65 74 20 63 6f 75 6e 74 20   100; set count 
2b570 31 30 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  100....        s
2b580 65 74 20 70 74 72 20 5b 6f 62 6a 65 63 74 20 69  et ptr [object i
2b590 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 5c 0d  nvoke -create \.
2b5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
2b5b0 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65  tem.Runtime.Inte
2b5c0 72 6f 70 53 65 72 76 69 63 65 73 2e 4d 61 72 73  ropServices.Mars
2b5d0 68 61 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  hal \..         
2b5e0 20 20 20 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65     AllocCoTaskMe
2b5f0 6d 20 5b 65 78 70 72 20 7b 24 73 69 7a 65 20 2a  m [expr {$size *
2b600 20 24 63 6f 75 6e 74 7d 5d 5d 0d 0a 0d 0a 20 20   $count}]]....  
2b610 20 20 20 20 20 20 73 65 74 20 69 6e 74 73 28 30        set ints(0
2b620 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ) [object invoke
2b630 20 2d 63 72 65 61 74 65 20 49 6e 74 33 32 20 50   -create Int32 P
2b640 61 72 73 65 20 24 73 69 7a 65 5d 0d 0a 20 20 20  arse $size]..   
2b650 20 20 20 20 20 73 65 74 20 69 6e 74 73 28 31 29       set ints(1)
2b660 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
2b670 2d 63 72 65 61 74 65 20 49 6e 74 33 32 20 50 61  -create Int32 Pa
2b680 72 73 65 20 24 63 6f 75 6e 74 5d 0d 0a 0d 0a 20  rse $count].... 
2b690 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65         set value
2b6a0 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20   [object create 
2b6b0 2d 61 6c 69 61 73 20 4f 62 6a 65 63 74 5c 5b 5c  -alias Object\[\
2b6c0 5d 20 33 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ] 3]....        
2b6d0 24 76 61 6c 75 65 20 53 65 74 56 61 6c 75 65 20  $value SetValue 
2b6e0 24 70 74 72 20 30 0d 0a 20 20 20 20 20 20 20 20  $ptr 0..        
2b6f0 24 76 61 6c 75 65 20 53 65 74 56 61 6c 75 65 20  $value SetValue 
2b700 24 69 6e 74 73 28 30 29 20 31 0d 0a 20 20 20 20  $ints(0) 1..    
2b710 20 20 20 20 24 76 61 6c 75 65 20 53 65 74 56 61      $value SetVa
2b720 6c 75 65 20 24 69 6e 74 73 28 31 29 20 32 0d 0a  lue $ints(1) 2..
2b730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 64        }..      d
2b740 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20  efault {..      
2b750 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6f 62 6a    set value [obj
2b760 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61  ect invoke -crea
2b770 74 65 20 53 79 73 74 65 6d 2e 42 6f 6f 6c 65 61  te System.Boolea
2b780 6e 20 50 61 72 73 65 20 74 72 75 65 5d 0d 0a 20  n Parse true].. 
2b790 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
2b7a0 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
2b7b0 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e  ult [$connection
2b7c0 20 53 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f   SetConfiguratio
2b7d0 6e 4f 70 74 69 6f 6e 20 24 64 62 43 6f 6e 66 69  nOption $dbConfi
2b7e0 67 20 24 76 61 6c 75 65 5d 0d 0a 20 20 7d 0d 0a  g $value]..  }..
2b7f0 0d 0a 20 20 73 65 74 20 63 75 72 72 65 6e 74 28  ..  set current(
2b800 30 29 20 30 3b 20 73 65 74 20 68 69 67 68 77 61  0) 0; set highwa
2b810 74 65 72 28 30 29 20 30 0d 0a 0d 0a 20 20 6c 61  ter(0) 0....  la
2b820 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63  ppend result [$c
2b830 6f 6e 6e 65 63 74 69 6f 6e 20 2d 66 6c 61 67 73  onnection -flags
2b840 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \.. 
2b850 20 20 20 20 20 5f 73 71 6c 2e 47 65 74 53 74 61       _sql.GetSta
2b860 74 75 73 50 61 72 61 6d 65 74 65 72 20 53 51 4c  tusParameter SQL
2b870 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f  ITE_DBSTATUS_LOO
2b880 4b 41 53 49 44 45 5f 55 53 45 44 20 5c 0d 0a 20  KASIDE_USED \.. 
2b890 20 20 20 20 20 66 61 6c 73 65 20 63 75 72 72 65       false curre
2b8a0 6e 74 28 30 29 20 68 69 67 68 77 61 74 65 72 28  nt(0) highwater(
2b8b0 30 29 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  0)]....  lappend
2b8c0 20 72 65 73 75 6c 74 20 24 63 75 72 72 65 6e 74   result $current
2b8d0 28 30 29 20 24 68 69 67 68 77 61 74 65 72 28 30  (0) $highwater(0
2b8e0 29 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  )....  sql execu
2b8f0 74 65 20 24 64 62 20 7b 43 52 45 41 54 45 20 54  te $db {CREATE T
2b900 41 42 4c 45 20 74 65 73 74 2e 74 31 28 78 29 3b  ABLE test.t1(x);
2b910 7d 3b 20 23 20 75 73 65 20 73 6f 6d 65 20 6c 6f  }; # use some lo
2b920 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 3f 0d  okaside memory?.
2b930 0a 0d 0a 20 20 73 65 74 20 63 75 72 72 65 6e 74  ...  set current
2b940 28 31 29 20 30 3b 20 73 65 74 20 68 69 67 68 77  (1) 0; set highw
2b950 61 74 65 72 28 31 29 20 30 0d 0a 0d 0a 20 20 6c  ater(1) 0....  l
2b960 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24  append result [$
2b970 63 6f 6e 6e 65 63 74 69 6f 6e 20 2d 66 6c 61 67  connection -flag
2b980 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
2b990 20 20 20 20 20 20 5f 73 71 6c 2e 47 65 74 53 74        _sql.GetSt
2b9a0 61 74 75 73 50 61 72 61 6d 65 74 65 72 20 53 51  atusParameter SQ
2b9b0 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f  LITE_DBSTATUS_LO
2b9c0 4f 4b 41 53 49 44 45 5f 55 53 45 44 20 5c 0d 0a  OKASIDE_USED \..
2b9d0 20 20 20 20 20 20 66 61 6c 73 65 20 63 75 72 72        false curr
2b9e0 65 6e 74 28 31 29 20 68 69 67 68 77 61 74 65 72  ent(1) highwater
2b9f0 28 31 29 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  (1)]....  lappen
2ba00 64 20 72 65 73 75 6c 74 20 24 63 75 72 72 65 6e  d result $curren
2ba10 74 28 31 29 20 24 68 69 67 68 77 61 74 65 72 28  t(1) $highwater(
2ba20 31 29 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  1)....  lappend 
2ba30 72 65 73 75 6c 74 20 5b 65 78 70 72 20 7b 24 68  result [expr {$h
2ba40 69 67 68 77 61 74 65 72 28 31 29 20 3e 20 30 7d  ighwater(1) > 0}
2ba50 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ]..  lappend res
2ba60 75 6c 74 20 5b 65 78 70 72 20 7b 24 68 69 67 68  ult [expr {$high
2ba70 77 61 74 65 72 28 31 29 20 3e 3d 20 24 63 75 72  water(1) >= $cur
2ba80 72 65 6e 74 28 31 29 7d 5d 0d 0a 7d 20 2d 63 6c  rent(1)}]..} -cl
2ba90 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
2baa0 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
2bab0 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  ..  freeDbConnec
2bac0 74 69 6f 6e 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69  tion....  if {[i
2bad0 6e 66 6f 20 65 78 69 73 74 73 20 70 74 72 5d 7d  nfo exists ptr]}
2bae0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 6f 62 6a   then {..    obj
2baf0 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
2bb00 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
2bb10 70 53 65 72 76 69 63 65 73 2e 4d 61 72 73 68 61  pServices.Marsha
2bb20 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 46 72 65  l \..        Fre
2bb30 65 43 6f 54 61 73 6b 4d 65 6d 20 24 70 74 72 0d  eCoTaskMem $ptr.
2bb40 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
2bb50 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 75 72 72  -nocomplain curr
2bb60 65 6e 74 20 68 69 67 68 77 61 74 65 72 20 69 6e  ent highwater in
2bb70 74 73 20 63 6f 75 6e 74 20 73 69 7a 65 20 70 74  ts count size pt
2bb80 72 20 76 61 6c 75 65 0d 0a 20 20 75 6e 73 65 74  r value..  unset
2bb90 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
2bba0 75 6c 74 20 64 62 43 6f 6e 66 69 67 20 64 62 43  ult dbConfig dbC
2bbb0 6f 6e 66 69 67 73 0d 0a 20 20 75 6e 73 65 74 20  onfigs..  unset 
2bbc0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 6e  -nocomplain conn
2bbd0 65 63 74 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61  ection db fileNa
2bbe0 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
2bbf0 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  ts {eagle monoBu
2bc00 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
2bc10 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
2bc20 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
2bc30 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68  a.SQLite} -match
2bc40 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20   regexp -result 
2bc50 7b 5e 5c 7b 5c 7d 20 5c 7b 5c 7d 20 5c 7b 5c 7d  {^\{\} \{\} \{\}
2bc60 20 5c 7b 5c 7d 20 5c 7b 5c 7d 20 5c 7b 5c 7d 20   \{\} \{\} \{\} 
2bc70 5c 7b 5c 7d 5c 0d 0a 5c 7b 5c 7d 20 5c 7b 5c 7d  \{\}\..\{\} \{\}
2bc80 20 5c 7b 5c 7d 20 4f 6b 20 30 20 30 20 4f 6b 20   \{\} Ok 0 0 Ok 
2bc90 5c 64 2b 20 5c 64 2b 20 54 72 75 65 20 54 72 75  \d+ \d+ True Tru
2bca0 65 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  e$}}....########
2bcb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2bcf0 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
2bd00 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
2bd10 39 36 20 7b 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  96 {connection p
2bd20 6f 6f 6c 20 69 6e 74 65 72 61 63 74 69 6f 6e 20  ool interaction 
2bd30 77 69 74 68 20 72 65 61 64 2d 6f 6e 6c 79 7d 20  with read-only} 
2bd40 2d 73 65 74 75 70 20 7b 0d 0a 20 20 63 61 74 63  -setup {..  catc
2bd50 68 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20  h {..    object 
2bd60 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
2bd70 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
2bd80 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
2bd90 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
2bda0 6e 65 63 74 69 6f 6e 50 6f 6f 6c 20 5f 70 6f 6f  nectionPool _poo
2bdb0 6c 4f 70 65 6e 65 64 20 30 0d 0a 0d 0a 20 20 20  lOpened 0....   
2bdc0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
2bdd0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
2bde0 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74   \..        Syst
2bdf0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
2be00 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
2be10 6f 6f 6c 20 5f 70 6f 6f 6c 43 6c 6f 73 65 64 20  ool _poolClosed 
2be20 30 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 70 72 6f 63  0..  }....  proc
2be30 20 67 65 74 50 6f 6f 6c 43 6f 75 6e 74 73 20 7b   getPoolCounts {
2be40 7d 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 63 61  } {..    if {[ca
2be50 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 6f 62 6a  tch {..      obj
2be60 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
2be70 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
2be80 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
2be90 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
2bea0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
2beb0 6c 20 5f 70 6f 6f 6c 4f 70 65 6e 65 64 0d 0a 20  l _poolOpened.. 
2bec0 20 20 20 7d 20 6f 70 65 6e 65 64 5d 20 3d 3d 20     } opened] == 
2bed0 30 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20  0 && [catch {.. 
2bee0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
2bef0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
2bf00 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..        
2bf10 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
2bf20 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
2bf30 63 74 69 6f 6e 50 6f 6f 6c 20 5f 70 6f 6f 6c 43  ctionPool _poolC
2bf40 6c 6f 73 65 64 0d 0a 20 20 20 20 7d 20 63 6c 6f  losed..    } clo
2bf50 73 65 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  sed] == 0} then 
2bf60 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
2bf70 5b 6c 69 73 74 20 24 6f 70 65 6e 65 64 20 24 63  [list $opened $c
2bf80 6c 6f 73 65 64 5d 0d 0a 20 20 20 20 7d 20 65 6c  losed]..    } el
2bf90 73 65 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74  se {..      tput
2bfa0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe
2bfb0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  l \..          "
2bfc0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 6f  ==== WARNING: co
2bfd0 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 20 63 6f  nnection pool co
2bfe0 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61  unts are not ava
2bff0 69 6c 61 62 6c 65 5c 6e 22 0d 0a 0d 0a 20 20 20  ilable\n"....   
2c000 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20     return [list 
2c010 30 20 30 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  0 0]..    }..  }
2c020 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73  ....  setupDb [s
2c030 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
2c040 2d 31 2e 39 36 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  -1.96.db]..} -bo
2c050 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63  dy {..  sql exec
2c060 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20  ute $db "CREATE 
2c070 54 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20  TABLE t1(x);".. 
2c080 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
2c090 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
2c0a0 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
2c0b0 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
2c0c0 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75  $fileName db tru
2c0d0 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false.. 
2c0e0 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
2c0f0 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
2c100 52 65 61 64 20 4f 6e 6c 79 3d 54 72 75 65 3b 50  Read Only=True;P
2c110 6f 6f 6c 69 6e 67 3d 54 72 75 65 3b 22 20 74 72  ooling=True;" tr
2c120 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65  ue false....  se
2c130 74 20 63 6f 64 65 28 31 29 20 5b 63 61 74 63 68  t code(1) [catch
2c140 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63   {..    sql exec
2c150 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
2c160 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
2c170 45 53 28 32 29 3b 22 0d 0a 20 20 7d 20 65 72 72  ES(2);"..  } err
2c180 6f 72 28 31 29 5d 0d 0a 0d 0a 20 20 63 6c 65 61  or(1)]....  clea
2c190 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
2c1a0 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61  db true false fa
2c1b0 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24  lse..  setupDb $
2c1c0 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
2c1d0 22 20 22 22 20 22 52 65 61 64 20 4f 6e 6c 79 3d  " "" "Read Only=
2c1e0 54 72 75 65 3b 50 6f 6f 6c 69 6e 67 3d 54 72 75  True;Pooling=Tru
2c1f0 65 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a  e;" true false..
2c200 0d 0a 20 20 73 65 74 20 63 6f 64 65 28 32 29 20  ..  set code(2) 
2c210 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71  [catch {..    sq
2c220 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
2c230 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
2c240 29 20 56 41 4c 55 45 53 28 33 29 3b 22 0d 0a 20  ) VALUES(3);".. 
2c250 20 7d 20 65 72 72 6f 72 28 32 29 5d 0d 0a 0d 0a   } error(2)]....
2c260 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
2c270 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61  eName db true fa
2c280 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74  lse false..  set
2c290 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
2c2a0 22 20 22 22 20 22 22 20 22 22 20 22 22 20 74 72  " "" "" "" "" tr
2c2b0 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 6c 69  ue false....  li
2c2c0 73 74 20 5b 67 65 74 50 6f 6f 6c 43 6f 75 6e 74  st [getPoolCount
2c2d0 73 5d 20 5c 0d 0a 20 20 20 20 20 20 24 63 6f 64  s] \..      $cod
2c2e0 65 28 31 29 20 5b 65 78 74 72 61 63 74 53 79 73  e(1) [extractSys
2c2f0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
2c300 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65  eptionMessage $e
2c310 72 72 6f 72 28 31 29 5d 20 5c 0d 0a 20 20 20 20  rror(1)] \..    
2c320 20 20 24 63 6f 64 65 28 32 29 20 5b 65 78 74 72    $code(2) [extr
2c330 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
2c340 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
2c350 61 67 65 20 24 65 72 72 6f 72 28 32 29 5d 20 5c  age $error(2)] \
2c360 0d 0a 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65  ..      [sql exe
2c370 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
2c380 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54  alar $db "SELECT
2c390 20 53 55 4d 28 78 29 20 46 52 4f 4d 20 74 31 3b   SUM(x) FROM t1;
2c3a0 22 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  "]..} -cleanup {
2c3b0 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
2c3c0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
2c3d0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65  et -nocomplain e
2c3e0 72 72 6f 72 20 63 6f 64 65 20 64 62 20 66 69 6c  rror code db fil
2c3f0 65 4e 61 6d 65 0d 0a 0d 0a 20 20 72 65 6e 61 6d  eName....  renam
2c400 65 20 67 65 74 50 6f 6f 6c 43 6f 75 6e 74 73 20  e getPoolCounts 
2c410 22 22 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  ""..} -constrain
2c420 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
2c430 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
2c440 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
2c450 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
2c460 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
2c470 6c 74 20 5c 0d 0a 7b 7b 30 20 30 7d 20 31 20 7b  lt \..{{0 0} 1 {
2c480 61 74 74 65 6d 70 74 20 74 6f 20 77 72 69 74 65  attempt to write
2c490 20 61 20 72 65 61 64 6f 6e 6c 79 20 64 61 74 61   a readonly data
2c4a0 62 61 73 65 7d 20 31 20 7b 61 74 74 65 6d 70 74  base} 1 {attempt
2c4b0 20 74 6f 20 77 72 69 74 65 20 61 20 72 65 61 64   to write a read
2c4c0 6f 6e 6c 79 5c 0d 0a 64 61 74 61 62 61 73 65 7d  only\..database}
2c4d0 20 31 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23   1}}....########
2c4e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c4f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c520 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
2c530 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
2c540 39 37 20 7b 63 6f 6e 6e 65 63 74 69 6f 6e 20 70  97 {connection p
2c550 6f 6f 6c 20 69 6e 74 65 72 61 63 74 69 6f 6e 20  ool interaction 
2c560 77 69 74 68 20 72 65 61 64 2d 6f 6e 6c 79 7d 20  with read-only} 
2c570 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
2c580 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
2c590 65 20 64 61 74 61 2d 31 2e 39 37 2e 64 62 5d 0d  e data-1.97.db].
2c5a0 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
2c5b0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
2c5c0 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
2c5d0 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  );"..  sql execu
2c5e0 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
2c5f0 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
2c600 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61  S(1);"....  clea
2c610 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
2c620 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61  db true false fa
2c630 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24  lse..  setupDb $
2c640 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
2c650 22 20 22 22 20 22 52 65 61 64 20 4f 6e 6c 79 3d  " "" "Read Only=
2c660 54 72 75 65 3b 50 6f 6f 6c 69 6e 67 3d 54 72 75  True;Pooling=Tru
2c670 65 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a  e;" true false..
2c680 0d 0a 20 20 73 65 74 20 63 6f 64 65 28 31 29 20  ..  set code(1) 
2c690 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71  [catch {..    sq
2c6a0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
2c6b0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
2c6c0 29 20 56 41 4c 55 45 53 28 32 29 3b 22 0d 0a 20  ) VALUES(2);".. 
2c6d0 20 7d 20 65 72 72 6f 72 28 31 29 5d 0d 0a 0d 0a   } error(1)]....
2c6e0 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
2c6f0 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61  eName db true fa
2c700 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74  lse false..  set
2c710 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
2c720 22 20 22 22 20 22 22 20 22 22 20 22 50 6f 6f 6c  " "" "" "" "Pool
2c730 69 6e 67 3d 54 72 75 65 3b 22 20 74 72 75 65 20  ing=True;" true 
2c740 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65 74 20 63  false....  set c
2c750 6f 64 65 28 32 29 20 5b 63 61 74 63 68 20 7b 0d  ode(2) [catch {.
2c760 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65  .    sql execute
2c770 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
2c780 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
2c790 33 29 3b 22 0d 0a 20 20 7d 20 65 72 72 6f 72 28  3);"..  } error(
2c7a0 32 29 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  2)]....  cleanup
2c7b0 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
2c7c0 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65  true false false
2c7d0 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c  ..  setupDb $fil
2c7e0 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
2c7f0 22 20 22 22 20 74 72 75 65 20 66 61 6c 73 65 0d  " "" true false.
2c800 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 28  ...  list $code(
2c810 31 29 20 5b 65 78 74 72 61 63 74 53 79 73 74 65  1) [extractSyste
2c820 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70  mDataSQLiteExcep
2c830 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 65 72 72  tionMessage $err
2c840 6f 72 28 31 29 5d 20 5c 0d 0a 20 20 20 20 20 20  or(1)] \..      
2c850 24 63 6f 64 65 28 32 29 20 5b 65 78 74 72 61 63  $code(2) [extrac
2c860 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  tSystemDataSQLit
2c870 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67  eExceptionMessag
2c880 65 20 24 65 72 72 6f 72 28 32 29 5d 20 5c 0d 0a  e $error(2)] \..
2c890 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75        [sql execu
2c8a0 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
2c8b0 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 53  ar $db "SELECT S
2c8c0 55 4d 28 78 29 20 46 52 4f 4d 20 74 31 3b 22 5d  UM(x) FROM t1;"]
2c8d0 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
2c8e0 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
2c8f0 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
2c900 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72   -nocomplain err
2c910 6f 72 20 63 6f 64 65 20 64 62 20 66 69 6c 65 4e  or code db fileN
2c920 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
2c930 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
2c940 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
2c950 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
2c960 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
2c970 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
2c980 75 6c 74 20 5c 0d 0a 7b 31 20 7b 61 74 74 65 6d  ult \..{1 {attem
2c990 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72 65  pt to write a re
2c9a0 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65 7d  adonly database}
2c9b0 20 30 20 31 20 34 7d 7d 0d 0a 0d 0a 23 23 23 23   0 1 4}}....####
2c9c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c9d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c9e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2c9f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca00 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
2ca10 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75  eportSQLiteResou
2ca20 72 63 65 73 20 24 74 65 73 74 5f 63 68 61 6e 6e  rces $test_chann
2ca30 65 6c 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  el....##########
2ca40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ca80 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69  #####....runSQLi
2ca90 74 65 54 65 73 74 46 69 6c 65 73 45 70 69 6c 6f  teTestFilesEpilo
2caa0 67 75 65 0d 0a 72 75 6e 53 51 4c 69 74 65 54 65  gue..runSQLiteTe
2cab0 73 74 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 54  stEpilogue..runT
2cac0 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a           estEpilogue..