System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 620b3cd97f8e865f14dd5111d8d14a57600607a1:


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 30 5d 20  put -success 0] 
0470: 2d 61 75 74 6f 52 75 6e 20 5c 0d 0a 20 20 20 20  -autoRun \..    
0480: 20 20 20 20 2d 66 69 6c 65 4e 61 6d 65 20 5b 61      -fileName [a
0490: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 5b 66 69  ppendArgs \" [fi
04a0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 66  le nativename $f
04b0: 69 6c 65 4e 61 6d 65 5d 20 5c 22 5d 0d 0a 20 20  ileName] \"]..  
04c0: 7d 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 73 65  } error]....  se
04d0: 74 20 73 75 63 63 65 73 73 43 6f 75 6e 74 20 5b  t successCount [
04e0: 72 65 67 65 78 70 20 2d 61 6c 6c 20 2d 2d 20 7b  regexp -all -- {
04f0: 5c 74 53 75 63 63 65 65 64 65 64 5c 74 7d 20 24  \tSucceeded\t} $
0500: 6f 75 74 70 75 74 5d 0d 0a 20 20 73 65 74 20 66  output]..  set f
0510: 61 69 6c 75 72 65 43 6f 75 6e 74 20 5b 72 65 67  ailureCount [reg
0520: 65 78 70 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 74 46  exp -all -- {\tF
0530: 61 69 6c 65 64 5c 74 7d 20 24 6f 75 74 70 75 74  ailed\t} $output
0540: 5d 0d 0a 20 20 73 65 74 20 74 6f 74 61 6c 43 6f  ]..  set totalCo
0550: 75 6e 74 20 5b 65 78 70 72 20 7b 24 73 75 63 63  unt [expr {$succ
0560: 65 73 73 43 6f 75 6e 74 20 2b 20 24 66 61 69 6c  essCount + $fail
0570: 75 72 65 43 6f 75 6e 74 7d 5d 0d 0a 0d 0a 20 20  ureCount}]....  
0580: 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61 6e  tputs $test_chan
0590: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs 
05a0: 5c 0d 0a 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66  \..      "---- f
05b0: 6f 75 6e 64 20 61 6e 64 20 65 78 65 63 75 74 65  ound and execute
05c0: 64 20 22 20 24 74 6f 74 61 6c 43 6f 75 6e 74 20  d " $totalCount 
05d0: 22 20 75 6e 69 74 20 74 65 73 74 73 20 66 72 6f  " unit tests fro
05e0: 6d 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 24  m \"" \..      $
05f0: 74 65 73 74 45 78 65 46 69 6c 65 20 22 5c 22 2c  testExeFile "\",
0600: 20 22 20 24 73 75 63 63 65 73 73 43 6f 75 6e 74   " $successCount
0610: 20 22 20 70 61 73 73 65 64 2c 20 22 20 24 66 61   " passed, " $fa
0620: 69 6c 75 72 65 43 6f 75 6e 74 20 5c 0d 0a 20 20  ilureCount \..  
0630: 20 20 20 20 22 20 66 61 69 6c 65 64 5c 6e 22 5d      " failed\n"]
0640: 0d 0a 0d 0a 20 20 74 6c 6f 67 20 22 2d 2d 2d 2d  ....  tlog "----
0650: 20 42 45 47 49 4e 20 53 54 44 4f 55 54 20 4f 55   BEGIN STDOUT OU
0660: 54 50 55 54 5c 6e 22 0d 0a 20 20 74 6c 6f 67 20  TPUT\n"..  tlog 
0670: 24 6f 75 74 70 75 74 0d 0a 20 20 74 6c 6f 67 20  $output..  tlog 
0680: 22 5c 6e 2d 2d 2d 2d 20 45 4e 44 20 53 54 44 4f  "\n---- END STDO
0690: 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 0d 0a  UT OUTPUT\n"....
06a0: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 5b 65 78    list $code [ex
06b0: 70 72 20 7b 24 63 6f 64 65 20 3d 3d 20 30 20 3f  pr {$code == 0 ?
06c0: 20 22 22 20 3a 20 24 65 72 72 6f 72 7d 5d 0d 0a   "" : $error}]..
06d0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
06e0: 63 6c 65 61 6e 75 70 46 69 6c 65 20 24 66 69 6c  cleanupFile $fil
06f0: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
0700: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 6f 74   -nocomplain tot
0710: 61 6c 43 6f 75 6e 74 20 66 61 69 6c 75 72 65 43  alCount failureC
0720: 6f 75 6e 74 20 73 75 63 63 65 73 73 43 6f 75 6e  ount successCoun
0730: 74 20 63 6f 64 65 20 6f 75 74 70 75 74 20 5c 0d  t code output \.
0740: 0a 20 20 20 20 20 20 65 72 72 6f 72 20 66 69 6c  .      error fil
0750: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
0760: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53 51 4c  aints {eagle SQL
0770: 69 74 65 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e  ite file_System.
0780: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
0790: 66 69 6c 65 5f 74 65 73 74 2e 65 78 65 5c 0d 0a  file_test.exe\..
07a0: 74 65 73 74 45 78 65 63 7d 20 2d 72 65 73 75 6c  testExec} -resul
07b0: 74 20 7b 30 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23  t {0 {}}}....###
07c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0d 0a 0d 0a  ############....
0810: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
0820: 74 61 2d 31 2e 32 20 7b 75 6e 69 74 20 74 65 73  ta-1.2 {unit tes
0830: 74 73 20 66 72 6f 6d 20 74 68 65 20 27 74 65 73  ts from the 'tes
0840: 74 6c 69 6e 71 27 20 70 72 6f 6a 65 63 74 7d 20  tlinq' project} 
0850: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 23 0d 0a 20  -setup {..  #.. 
0860: 20 23 20 4e 4f 54 45 3a 20 52 65 2d 63 6f 70 79   # NOTE: Re-copy
0870: 20 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 64   the reference d
0880: 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
0890: 64 20 66 6f 72 20 74 68 69 73 20 75 6e 69 74 20  d for this unit 
08a0: 74 65 73 74 20 74 6f 20 74 68 65 0d 0a 20 20 23  test to the..  #
08b0: 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72         build dir
08c0: 65 63 74 6f 72 79 20 69 6e 20 63 61 73 65 20 69  ectory in case i
08d0: 74 20 68 61 73 20 62 65 65 6e 20 63 68 61 6e 67  t has been chang
08e0: 65 64 20 62 79 20 61 20 70 72 65 76 69 6f 75 73  ed by a previous
08f0: 20 74 65 73 74 20 72 75 6e 2e 0d 0a 20 20 23 0d   test run...  #.
0900: 0a 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f  .  file copy -fo
0910: 72 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 45 66  rce $northwindEf
0920: 44 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  DbFile \..      
0930: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
0940: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 5b  uildDirectory] [
0950: 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68  file tail $north
0960: 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a  windEfDbFile]]..
0970: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
0980: 20 57 65 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65   We need to make
0990: 20 31 30 30 25 20 73 75 72 65 20 74 68 61 74 20   100% sure that 
09a0: 74 68 65 20 63 6f 6e 73 6f 6c 65 20 6f 75 74 70  the console outp
09b0: 75 74 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 74  ut encoding is t
09c0: 68 65 0d 0a 20 20 23 20 20 20 20 20 20 20 73 61  he..  #       sa
09d0: 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 27  me as when the '
09e0: 74 65 73 74 6c 69 6e 71 2e 6f 75 74 27 20 66 69  testlinq.out' fi
09f0: 6c 65 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d  le was created..
0a00: 0a 20 20 23 0d 0a 20 20 73 65 74 20 73 61 76 65  .  #..  set save
0a10: 64 45 6e 63 6f 64 69 6e 67 20 5b 6f 62 6a 65 63  dEncoding [objec
0a20: 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65  t invoke Console
0a30: 20 4f 75 74 70 75 74 45 6e 63 6f 64 69 6e 67 5d   OutputEncoding]
0a40: 0d 0a 20 20 73 65 74 20 65 6e 63 6f 64 69 6e 67  ..  set encoding
0a50: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
0a60: 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
0a70: 64 69 6e 67 20 47 65 74 45 6e 63 6f 64 69 6e 67  ding GetEncoding
0a80: 20 57 69 6e 64 6f 77 73 2d 31 32 35 32 5d 0d 0a   Windows-1252]..
0a90: 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ..  object invok
0aa0: 65 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75 74  e Console Output
0ab0: 45 6e 63 6f 64 69 6e 67 20 24 65 6e 63 6f 64 69  Encoding $encodi
0ac0: 6e 67 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  ng..} -body {.. 
0ad0: 20 73 65 74 20 6f 75 74 70 75 74 20 22 22 0d 0a   set output ""..
0ae0: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61  ..  set code [ca
0af0: 74 63 68 20 7b 0d 0a 20 20 20 20 74 65 73 74 43  tch {..    testC
0b00: 6c 72 45 78 65 63 20 24 74 65 73 74 4c 69 6e 71  lrExec $testLinq
0b10: 45 78 65 46 69 6c 65 20 5b 6c 69 73 74 20 2d 65  ExeFile [list -e
0b20: 76 65 6e 74 66 6c 61 67 73 20 57 61 69 74 20 2d  ventflags Wait -
0b30: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20  directory \..   
0b40: 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61       [file dirna
0b50: 6d 65 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46  me $testLinqExeF
0b60: 69 6c 65 5d 20 2d 73 74 64 6f 75 74 20 6f 75 74  ile] -stdout out
0b70: 70 75 74 20 2d 73 75 63 63 65 73 73 20 30 5d 0d  put -success 0].
0b80: 0a 20 20 7d 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20  .  } error].... 
0b90: 20 74 6c 6f 67 20 22 2d 2d 2d 2d 20 42 45 47 49   tlog "---- BEGI
0ba0: 4e 20 53 54 44 4f 55 54 20 4f 55 54 50 55 54 5c  N STDOUT OUTPUT\
0bb0: 6e 22 0d 0a 20 20 74 6c 6f 67 20 24 6f 75 74 70  n"..  tlog $outp
0bc0: 75 74 0d 0a 20 20 74 6c 6f 67 20 22 5c 6e 2d 2d  ut..  tlog "\n--
0bd0: 2d 2d 20 45 4e 44 20 53 54 44 4f 55 54 20 4f 55  -- END STDOUT OU
0be0: 54 50 55 54 5c 6e 22 0d 0a 0d 0a 20 20 6c 69 73  TPUT\n"....  lis
0bf0: 74 20 24 63 6f 64 65 20 5b 73 74 72 69 6e 67 20  t $code [string 
0c00: 65 71 75 61 6c 20 24 6f 75 74 70 75 74 20 5b 72  equal $output [r
0c10: 65 61 64 46 69 6c 65 20 24 74 65 73 74 4c 69 6e  eadFile $testLin
0c20: 71 4f 75 74 46 69 6c 65 5d 5d 20 5c 0d 0a 20 20  qOutFile]] \..  
0c30: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
0c40: 20 3d 3d 20 30 20 3f 20 22 22 20 3a 20 24 65 72   == 0 ? "" : $er
0c50: 72 6f 72 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  ror}]..} -cleanu
0c60: 70 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62  p {..  catch {ob
0c70: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 73  ject invoke Cons
0c80: 6f 6c 65 20 4f 75 74 70 75 74 45 6e 63 6f 64 69  ole OutputEncodi
0c90: 6e 67 20 24 73 61 76 65 64 45 6e 63 6f 64 69 6e  ng $savedEncodin
0ca0: 67 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  g}....  unset -n
0cb0: 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 64 65 20 6f  ocomplain code o
0cc0: 75 74 70 75 74 20 65 72 72 6f 72 20 73 61 76 65  utput error save
0cd0: 64 45 6e 63 6f 64 69 6e 67 20 65 6e 63 6f 64 69  dEncoding encodi
0ce0: 6e 67 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  ng..} -constrain
0cf0: 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
0d00: 6f 54 6f 44 6f 20 53 51 4c 69 74 65 20 66 69 6c  oToDo SQLite fil
0d10: 65 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e_System.Data.SQ
0d20: 4c 69 74 65 2e 64 6c 6c 5c 0d 0a 66 69 6c 65 5f  Lite.dll\..file_
0d30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0d40: 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 66 69 6c 65  te.Linq.dll file
0d50: 5f 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 66 69  _testlinq.exe fi
0d60: 6c 65 5f 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64  le_northwindEF.d
0d70: 62 5c 0d 0a 66 69 6c 65 5f 74 65 73 74 6c 69 6e  b\..file_testlin
0d80: 71 2e 6f 75 74 20 74 65 73 74 45 78 65 63 7d 20  q.out testExec} 
0d90: 2d 72 65 73 75 6c 74 20 7b 30 20 54 72 75 65 20  -result {0 True 
0da0: 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  {}}}....########
0db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0df0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
0e00: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
0e10: 33 20 7b 75 6e 69 74 20 74 65 73 74 73 20 66 72  3 {unit tests fr
0e20: 6f 6d 20 74 68 65 20 27 74 65 73 74 65 66 36 27  om the 'testef6'
0e30: 20 70 72 6f 6a 65 63 74 7d 20 2d 73 65 74 75 70   project} -setup
0e40: 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54   {..  #..  # NOT
0e50: 45 3a 20 52 65 2d 63 6f 70 79 20 74 68 65 20 72  E: Re-copy the r
0e60: 65 66 65 72 65 6e 63 65 20 64 61 74 61 62 61 73  eference databas
0e70: 65 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  e file used for 
0e80: 74 68 69 73 20 75 6e 69 74 20 74 65 73 74 20 74  this unit test t
0e90: 6f 20 74 68 65 0d 0a 20 20 23 20 20 20 20 20 20  o the..  #      
0ea0: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
0eb0: 20 69 6e 20 63 61 73 65 20 69 74 20 68 61 73 20   in case it has 
0ec0: 62 65 65 6e 20 63 68 61 6e 67 65 64 20 62 79 20  been changed by 
0ed0: 61 20 70 72 65 76 69 6f 75 73 20 74 65 73 74 20  a previous test 
0ee0: 72 75 6e 2e 0d 0a 20 20 23 0d 0a 20 20 66 69 6c  run...  #..  fil
0ef0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 6e  e copy -force $n
0f00: 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65  orthwindEfDbFile
0f10: 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69 6c 65 20   \..      [file 
0f20: 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69  join [getBuildDi
0f30: 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74  rectory] [file t
0f40: 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66  ail $northwindEf
0f50: 44 62 46 69 6c 65 5d 5d 0d 0a 0d 0a 20 20 23 0d  DbFile]]....  #.
0f60: 0a 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 6e 65  .  # NOTE: We ne
0f70: 65 64 20 74 6f 20 6d 61 6b 65 20 31 30 30 25 20  ed to make 100% 
0f80: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63 6f  sure that the co
0f90: 6e 73 6f 6c 65 20 6f 75 74 70 75 74 20 65 6e 63  nsole output enc
0fa0: 6f 64 69 6e 67 20 69 73 20 74 68 65 0d 0a 20 20  oding is the..  
0fb0: 23 20 20 20 20 20 20 20 73 61 6d 65 20 61 73 20  #       same as 
0fc0: 77 68 65 6e 20 74 68 65 20 27 74 65 73 74 6c 69  when the 'testli
0fd0: 6e 71 2e 6f 75 74 27 20 66 69 6c 65 20 77 61 73  nq.out' file was
0fe0: 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 23 0d 0a   created...  #..
0ff0: 20 20 73 65 74 20 73 61 76 65 64 45 6e 63 6f 64    set savedEncod
1000: 69 6e 67 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ing [object invo
1010: 6b 65 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75  ke Console Outpu
1020: 74 45 6e 63 6f 64 69 6e 67 5d 0d 0a 20 20 73 65  tEncoding]..  se
1030: 74 20 65 6e 63 6f 64 69 6e 67 20 5b 6f 62 6a 65  t encoding [obje
1040: 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d  ct invoke System
1050: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 47  .Text.Encoding G
1060: 65 74 45 6e 63 6f 64 69 6e 67 20 57 69 6e 64 6f  etEncoding Windo
1070: 77 73 2d 31 32 35 32 5d 0d 0a 0d 0a 20 20 6f 62  ws-1252]....  ob
1080: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 73  ject invoke Cons
1090: 6f 6c 65 20 4f 75 74 70 75 74 45 6e 63 6f 64 69  ole OutputEncodi
10a0: 6e 67 20 24 65 6e 63 6f 64 69 6e 67 0d 0a 7d 20  ng $encoding..} 
10b0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 6f  -body {..  set o
10c0: 75 74 70 75 74 20 22 22 0d 0a 0d 0a 20 20 73 65  utput ""....  se
10d0: 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 0d  t code [catch {.
10e0: 0a 20 20 20 20 74 65 73 74 43 6c 72 45 78 65 63  .    testClrExec
10f0: 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c 65   $testEf6ExeFile
1100: 20 5b 6c 69 73 74 20 2d 65 76 65 6e 74 66 6c 61   [list -eventfla
1110: 67 73 20 57 61 69 74 20 2d 64 69 72 65 63 74 6f  gs Wait -directo
1120: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 66  ry \..        [f
1130: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 65 73  ile dirname $tes
1140: 74 45 66 36 45 78 65 46 69 6c 65 5d 20 2d 73 74  tEf6ExeFile] -st
1150: 64 6f 75 74 20 6f 75 74 70 75 74 20 2d 73 75 63  dout output -suc
1160: 63 65 73 73 20 30 5d 0d 0a 20 20 7d 20 65 72 72  cess 0]..  } err
1170: 6f 72 5d 0d 0a 0d 0a 20 20 74 6c 6f 67 20 22 2d  or]....  tlog "-
1180: 2d 2d 2d 20 42 45 47 49 4e 20 53 54 44 4f 55 54  --- BEGIN STDOUT
1190: 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 20 20 74 6c   OUTPUT\n"..  tl
11a0: 6f 67 20 24 6f 75 74 70 75 74 0d 0a 20 20 74 6c  og $output..  tl
11b0: 6f 67 20 22 5c 6e 2d 2d 2d 2d 20 45 4e 44 20 53  og "\n---- END S
11c0: 54 44 4f 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d  TDOUT OUTPUT\n".
11d0: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
11e0: 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24 6f  [string equal $o
11f0: 75 74 70 75 74 20 5b 72 65 61 64 46 69 6c 65 20  utput [readFile 
1200: 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65  $testLinqOutFile
1210: 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ]] \..      [exp
1220: 72 20 7b 24 63 6f 64 65 20 3d 3d 20 30 20 3f 20  r {$code == 0 ? 
1230: 22 22 20 3a 20 24 65 72 72 6f 72 7d 5d 0d 0a 7d  "" : $error}]..}
1240: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
1250: 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76  atch {object inv
1260: 6f 6b 65 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70  oke Console Outp
1270: 75 74 45 6e 63 6f 64 69 6e 67 20 24 73 61 76 65  utEncoding $save
1280: 64 45 6e 63 6f 64 69 6e 67 7d 0d 0a 0d 0a 20 20  dEncoding}....  
1290: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
12a0: 6e 20 63 6f 64 65 20 6f 75 74 70 75 74 20 65 72  n code output er
12b0: 72 6f 72 20 73 61 76 65 64 45 6e 63 6f 64 69 6e  ror savedEncodin
12c0: 67 20 65 6e 63 6f 64 69 6e 67 0d 0a 7d 20 2d 63  g encoding..} -c
12d0: 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
12e0: 61 67 6c 65 20 6d 6f 6e 6f 54 6f 44 6f 20 53 51  agle monoToDo SQ
12f0: 4c 69 74 65 20 66 69 6c 65 5f 45 6e 74 69 74 79  Lite file_Entity
1300: 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 20 66 69  Framework.dll fi
1310: 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  le_System.Data.S
1320: 51 4c 69 74 65 2e 64 6c 6c 5c 0d 0a 66 69 6c 65  QLite.dll\..file
1330: 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  _System.Data.SQL
1340: 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 69 6c 65  ite.EF6.dll file
1350: 5f 74 65 73 74 65 66 36 2e 65 78 65 20 66 69 6c  _testef6.exe fil
1360: 65 5f 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62  e_northwindEF.db
1370: 5c 0d 0a 66 69 6c 65 5f 74 65 73 74 6c 69 6e 71  \..file_testlinq
1380: 2e 6f 75 74 20 74 65 73 74 45 78 65 63 7d 20 2d  .out testExec} -
1390: 72 65 73 75 6c 74 20 7b 30 20 54 72 75 65 20 7b  result {0 True {
13a0: 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }}}....#########
13b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13f0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
1400: 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34  t {test data-1.4
1410: 20 7b 53 45 4c 45 43 54 20 73 63 61 6c 61 72 2f   {SELECT scalar/
1420: 72 65 61 64 65 72 2c 20 43 52 45 41 54 45 2c 20  reader, CREATE, 
1430: 49 4e 53 45 52 54 7d 20 2d 73 65 74 75 70 20 7b  INSERT} -setup {
1440: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
1450: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
1460: 2e 34 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  .4.db]..} -body 
1470: 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  {..  set result 
1480: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70  [list]....  lapp
1490: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
14a0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
14b0: 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
14c0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 73 71 6c       "SELECT sql
14d0: 69 74 65 5f 73 6f 75 72 63 65 5f 69 64 28 29 3b  ite_source_id();
14e0: 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  "]....  sql exec
14f0: 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20  ute $db "CREATE 
1500: 54 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47  TABLE t1(x INTEG
1510: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
1520: 53 43 2c 20 79 2c 20 7a 29 3b 22 0d 0a 20 20 73  SC, y, z);"..  s
1530: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
1540: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
1550: 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28  x, y, z) VALUES(
1560: 31 2c 20 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b  1, 'foo', 1234);
1570: 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  "....  sql execu
1580: 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64  te -execute read
1590: 65 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 78  er $db "SELECT x
15a0: 2c 20 79 2c 20 7a 20 46 52 4f 4d 20 74 31 3b 22  , y, z FROM t1;"
15b0: 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 6e 61  ....  foreach na
15c0: 6d 65 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79  me [lsort [array
15d0: 20 6e 61 6d 65 73 20 72 6f 77 73 5d 5d 20 7b 0d   names rows]] {.
15e0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
15f0: 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20  ult [list $name 
1600: 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a 20  $rows($name)].. 
1610: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75   }....  set resu
1620: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
1630: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
1640: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
1650: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6e  et -nocomplain n
1660: 61 6d 65 20 72 6f 77 73 20 72 65 73 75 6c 74 20  ame rows result 
1670: 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
1680: 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b  constraints \..{
1690: 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20  eagle monoBug28 
16a0: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
16b0: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
16c0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16d0: 74 65 7d 20 5c 0d 0a 2d 6d 61 74 63 68 20 72 65  te} \..-match re
16e0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 5c  gexp -result {^\
16f0: 7b 5c 64 7b 34 7d 2d 5c 64 7b 32 7d 2d 5c 64 7b  {\d{4}-\d{2}-\d{
1700: 32 7d 20 5c 64 7b 32 7d 3a 5c 64 7b 32 7d 3a 5c  2} \d{2}:\d{2}:\
1710: 64 7b 32 7d 20 5b 30 2d 39 61 2d 66 5d 7b 34 30  d{2} [0-9a-f]{40
1720: 7d 5c 7d 5c 0d 0a 5c 7b 31 20 5c 7b 5c 7b 78 20  }\}\..\{1 \{\{x 
1730: 31 5c 7d 20 5c 7b 79 20 66 6f 6f 5c 7d 20 5c 7b  1\} \{y foo\} \{
1740: 7a 20 31 32 33 34 5c 7d 5c 7d 5c 7d 20 5c 7b 63  z 1234\}\}\} \{c
1750: 6f 75 6e 74 20 31 5c 7d 20 5c 7b 6e 61 6d 65 73  ount 1\} \{names
1760: 20 5c 7b 78 20 79 20 7a 5c 7d 5c 7d 24 7d 7d 0d   \{x y z\}\}$}}.
1770: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
1780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c0: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
17d0: 65 73 74 20 64 61 74 61 2d 31 2e 35 20 7b 47 65  est data-1.5 {Ge
17e0: 74 53 63 68 65 6d 61 20 77 69 74 68 20 52 65 73  tSchema with Res
17f0: 65 72 76 65 64 57 6f 72 64 73 7d 20 2d 73 65 74  ervedWords} -set
1800: 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
1810: 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
1820: 74 61 2d 31 2e 35 2e 64 62 5d 0d 0a 7d 20 2d 62  ta-1.5.db]..} -b
1830: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
1840: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
1850: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
1860: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
1870: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
1880: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
1890: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
18a0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
18b0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
18c0: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
18d0: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
18e0: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
18f0: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
1900: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
1910: 74 61 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  ta;..    using S
1920: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1930: 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  e;....    namesp
1940: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
1950: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
1960: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
1970: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
1980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1990: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 61  public static Da
19a0: 74 61 54 61 62 6c 65 20 47 65 74 52 65 73 65 72  taTable GetReser
19b0: 76 65 64 57 6f 72 64 73 28 29 0d 0a 20 20 20 20  vedWords()..    
19c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19d0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
19e0: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
19f0: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
1a00: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
1a10: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
1a20: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
1a30: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
1a40: 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20  roperty]"))..   
1a50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a60: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
1a70: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
1a80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
1a90: 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68  onnection.GetSch
1aa0: 65 6d 61 28 22 52 65 73 65 72 76 65 64 57 6f 72  ema("ReservedWor
1ab0: 64 73 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ds");..         
1ac0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1ad0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1b30: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
1b40: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
1b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
1b60: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1b70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
1b80: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
1b90: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
1ba0: 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d  ts errors System
1bb0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
1bc0: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
1bd0: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
1be0: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
1bf0: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
1c00: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
1c10: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
1c20: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
1c30: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
1c40: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1c50: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
1c60: 65 73 74 24 7b 69 64 7d 20 47 65 74 52 65 73 65  est${id} GetRese
1c70: 72 76 65 64 57 6f 72 64 73 0d 0a 20 20 20 20 20  rvedWords..     
1c80: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
1c90: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
1ca0: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
1cb0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
1cc0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
1cd0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1ce0: 69 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74  in result result
1cf0: 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20 64 61  s errors code da
1d00: 74 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66  taSource id db f
1d10: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
1d20: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d  traints {eagle m
1d30: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
1d40: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
1d50: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
1d60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f  m.Data.SQLite co
1d70: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
1d80: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
1d90: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
1da0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
1db0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
1dc0: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 53 79 73  s#\d+ \{\} 0 Sys
1dd0: 74 65 6d 23 44 61 74 61 23 44 61 74 61 54 61 62  tem#Data#DataTab
1de0: 6c 65 23 5c 64 2b 24 7d 7d 0d 0a 0d 0a 23 23 23  le#\d+$}}....###
1df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1e30: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1e40: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
1e50: 74 61 2d 31 2e 36 20 7b 47 65 74 53 63 68 65 6d  ta-1.6 {GetSchem
1e60: 61 20 77 69 74 68 20 46 6f 72 65 69 67 6e 4b 65  a with ForeignKe
1e70: 79 73 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ys} -setup {..  
1e80: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
1e90: 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 2e 64  eName data-1.6.d
1ea0: 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
1eb0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
1ec0: 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   {..    CREATE T
1ed0: 41 42 4c 45 20 74 31 28 0d 0a 20 20 20 20 20 20  ABLE t1(..      
1ee0: 78 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  x INTEGER REFERE
1ef0: 4e 43 45 53 20 74 32 20 4d 41 54 43 48 20 46 55  NCES t2 MATCH FU
1f00: 4c 4c 0d 0a 20 20 20 20 20 20 4f 4e 20 55 50 44  LL..      ON UPD
1f10: 41 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 20  ATE SET DEFAULT 
1f20: 4f 4e 20 44 45 4c 45 54 45 20 43 41 53 43 41 44  ON DELETE CASCAD
1f30: 45 0d 0a 20 20 20 20 20 20 44 45 46 41 55 4c 54  E..      DEFAULT
1f40: 20 31 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 7d 0d   1..    );..  }.
1f50: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
1f60: 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41 42   $db "CREATE TAB
1f70: 4c 45 20 74 32 28 78 20 49 4e 54 45 47 45 52 20  LE t2(x INTEGER 
1f80: 52 45 46 45 52 45 4e 43 45 53 20 74 33 29 3b 22  REFERENCES t3);"
1f90: 0d 0a 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62  ....  set id [ob
1fa0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
1fb0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
1fc0: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
1fd0: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
1fe0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
1ff0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
2000: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 75 6e  ileName]....  un
2010: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
2020: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
2030: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
2040: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
2050: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
2060: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b  ing System.Data;
2070: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
2080: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
2090: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
20a0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
20b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
20c0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
20d0: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
20e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
20f0: 6c 69 63 20 73 74 61 74 69 63 20 44 61 74 61 52  lic static DataR
2100: 6f 77 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74  owCollection Get
2110: 46 6f 72 65 69 67 6e 4b 65 79 73 28 29 0d 0a 20  ForeignKeys().. 
2120: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2130: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2140: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
2150: 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
2160: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
2180: 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74  ata Source=${dat
2190: 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61  aSource};[getFla
21a0: 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a  gsProperty]"))..
21b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21c0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
21d0: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
21e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21f0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74  n connection.Get
2200: 53 63 68 65 6d 61 28 22 46 6f 72 65 69 67 6e 4b  Schema("ForeignK
2210: 65 79 73 22 29 2e 52 6f 77 73 3b 0d 0a 20 20 20  eys").Rows;..   
2220: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2230: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2280: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2290: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
22a0: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
22b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22c0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
22d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
22e0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
22f0: 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65  ] true true true
2300: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
2310: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2320: 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73  te.dll]....  lis
2330: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
2340: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
2350: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
2360: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
2370: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
2380: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
2390: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
23a0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 6f 77  .        set row
23b0: 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20  s [list]..      
23c0: 20 20 73 65 74 20 66 6f 72 65 69 67 6e 4b 65 79    set foreignKey
23d0: 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  s [object invoke
23e0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
23f0: 65 73 74 24 7b 69 64 7d 20 47 65 74 46 6f 72 65  est${id} GetFore
2400: 69 67 6e 4b 65 79 73 5d 0d 0a 0d 0a 20 20 20 20  ignKeys]....    
2410: 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
2420: 63 68 20 2d 61 6c 69 61 73 20 66 6f 72 65 69 67  ch -alias foreig
2430: 6e 4b 65 79 20 24 66 6f 72 65 69 67 6e 4b 65 79  nKey $foreignKey
2440: 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  s {..          l
2450: 61 70 70 65 6e 64 20 72 6f 77 73 20 5b 6c 69 73  append rows [lis
2460: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..           
2470: 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20     [$foreignKey 
2480: 49 74 65 6d 20 43 4f 4e 53 54 52 41 49 4e 54 5f  Item CONSTRAINT_
2490: 43 41 54 41 4c 4f 47 5d 20 5c 0d 0a 20 20 20 20  CATALOG] \..    
24a0: 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65            [$fore
24b0: 69 67 6e 4b 65 79 20 49 74 65 6d 20 43 4f 4e 53  ignKey Item CONS
24c0: 54 52 41 49 4e 54 5f 4e 41 4d 45 5d 20 5c 0d 0a  TRAINT_NAME] \..
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$
24e0: 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20  foreignKey Item 
24f0: 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 5d 20 5c  TABLE_CATALOG] \
2500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2510: 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65  [$foreignKey Ite
2520: 6d 20 54 41 42 4c 45 5f 4e 41 4d 45 5d 20 5c 0d  m TABLE_NAME] \.
2530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2540: 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d  $foreignKey Item
2550: 20 43 4f 4e 53 54 52 41 49 4e 54 5f 54 59 50 45   CONSTRAINT_TYPE
2560: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..           
2570: 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20     [$foreignKey 
2580: 49 74 65 6d 20 49 53 5f 44 45 46 45 52 52 41 42  Item IS_DEFERRAB
2590: 4c 45 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  LE] \..         
25a0: 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65       [$foreignKe
25b0: 79 20 49 74 65 6d 20 49 4e 49 54 49 41 4c 4c 59  y Item INITIALLY
25c0: 5f 44 45 46 45 52 52 45 44 5d 20 5c 0d 0a 20 20  _DEFERRED] \..  
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f              [$fo
25e0: 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b  reignKey Item FK
25f0: 45 59 5f 49 44 5d 20 5c 0d 0a 20 20 20 20 20 20  EY_ID] \..      
2600: 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67          [$foreig
2610: 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 46  nKey Item FKEY_F
2620: 52 4f 4d 5f 43 4f 4c 55 4d 4e 5d 20 5c 0d 0a 20  ROM_COLUMN] \.. 
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66               [$f
2640: 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46  oreignKey Item F
2650: 4b 45 59 5f 54 4f 5f 43 41 54 41 4c 4f 47 5d 20  KEY_TO_CATALOG] 
2660: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
2670: 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74   [$foreignKey It
2680: 65 6d 20 46 4b 45 59 5f 54 4f 5f 54 41 42 4c 45  em FKEY_TO_TABLE
2690: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..           
26a0: 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20     [$foreignKey 
26b0: 49 74 65 6d 20 46 4b 45 59 5f 54 4f 5f 43 4f 4c  Item FKEY_TO_COL
26c0: 55 4d 4e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  UMN] \..        
26d0: 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b        [$foreignK
26e0: 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 46 52 4f  ey Item FKEY_FRO
26f0: 4d 5f 4f 52 44 49 4e 41 4c 5f 50 4f 53 49 54 49  M_ORDINAL_POSITI
2700: 4f 4e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ON] \..         
2710: 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65       [$foreignKe
2720: 79 20 49 74 65 6d 20 46 4b 45 59 5f 4f 4e 5f 55  y Item FKEY_ON_U
2730: 50 44 41 54 45 5d 20 5c 0d 0a 20 20 20 20 20 20  PDATE] \..      
2740: 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67          [$foreig
2750: 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 4f  nKey Item FKEY_O
2760: 4e 5f 44 45 4c 45 54 45 5d 20 5c 0d 0a 20 20 20  N_DELETE] \..   
2770: 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72             [$for
2780: 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45  eignKey Item FKE
2790: 59 5f 4d 41 54 43 48 5d 5d 0d 0a 20 20 20 20 20  Y_MATCH]]..     
27a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27b0: 73 65 74 20 72 6f 77 73 0d 0a 20 20 20 20 20 20  set rows..      
27c0: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
27d0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
27e0: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
27f0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
2800: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
2810: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
2820: 6e 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f  n result rows fo
2830: 72 65 69 67 6e 4b 65 79 20 66 6f 72 65 69 67 6e  reignKey foreign
2840: 4b 65 79 73 20 72 65 73 75 6c 74 73 20 65 72 72  Keys results err
2850: 6f 72 73 20 63 6f 64 65 20 5c 0d 0a 20 20 20 20  ors code \..    
2860: 20 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20    dataSource id 
2870: 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
2880: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
2890: 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
28a0: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
28b0: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
28c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
28d0: 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  e compileCSharp}
28e0: 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
28f0: 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  result {^Ok\..Sy
2900: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
2910: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
2920: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
2930: 20 5c 7b 5c 7b 6d 61 69 6e 20 46 4b 5f 74 31 5f   \{\{main FK_t1_
2940: 30 5f 30 20 6d 61 69 6e 20 74 31 5c 0d 0a 5c 7b  0_0 main t1\..\{
2950: 46 4f 52 45 49 47 4e 20 4b 45 59 5c 7d 20 46 61  FOREIGN KEY\} Fa
2960: 6c 73 65 20 46 61 6c 73 65 20 30 20 78 20 6d 61  lse False 0 x ma
2970: 69 6e 20 74 32 20 5c 7b 5c 7d 20 30 20 5c 7b 53  in t2 \{\} 0 \{S
2980: 45 54 20 44 45 46 41 55 4c 54 5c 7d 20 43 41 53  ET DEFAULT\} CAS
2990: 43 41 44 45 20 4e 4f 4e 45 5c 7d 5c 0d 0a 5c 7b  CADE NONE\}\..\{
29a0: 6d 61 69 6e 20 46 4b 5f 74 32 5f 30 5f 30 20 6d  main FK_t2_0_0 m
29b0: 61 69 6e 20 74 32 20 5c 7b 46 4f 52 45 49 47 4e  ain t2 \{FOREIGN
29c0: 20 4b 45 59 5c 7d 20 46 61 6c 73 65 20 46 61 6c   KEY\} False Fal
29d0: 73 65 20 30 20 78 20 6d 61 69 6e 20 74 33 20 5c  se 0 x main t3 \
29e0: 7b 5c 7d 20 30 20 5c 7b 4e 4f 5c 0d 0a 41 43 54  {\} 0 \{NO\..ACT
29f0: 49 4f 4e 5c 7d 20 5c 7b 4e 4f 20 41 43 54 49 4f  ION\} \{NO ACTIO
2a00: 4e 5c 7d 20 4e 4f 4e 45 5c 7d 5c 7d 24 7d 7d 0d  N\} NONE\}\}$}}.
2a10: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
2a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2a60: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
2a70: 65 73 74 20 64 61 74 61 2d 31 2e 37 20 7b 53 51  est data-1.7 {SQ
2a80: 4c 49 54 45 5f 46 43 4e 54 4c 5f 57 49 4e 33 32  LITE_FCNTL_WIN32
2a90: 5f 41 56 5f 52 45 54 52 59 7d 20 2d 73 65 74 75  _AV_RETRY} -setu
2aa0: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
2ab0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
2ac0: 61 2d 31 2e 37 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  a-1.7.db]..} -bo
2ad0: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
2ae0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
2af0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
2b00: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
2b10: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
2b20: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
2b30: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
2b40: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
2b50: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
2b60: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
2b70: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
2b80: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
2b90: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
2ba0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
2bb0: 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20  a.SQLite;....   
2bc0: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
2bd0: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
2be0: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
2bf0: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
2c00: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
2c10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2c20: 61 74 69 63 20 62 6f 6f 6c 20 54 65 73 74 53 65  atic bool TestSe
2c30: 74 41 76 52 65 74 72 79 28 0d 0a 20 20 20 20 20  tAvRetry(..     
2c40: 20 20 20 20 20 72 65 66 20 69 6e 74 20 63 6f 75       ref int cou
2c50: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  nt,..          r
2c60: 65 66 20 69 6e 74 20 69 6e 74 65 72 76 61 6c 0d  ef int interval.
2c70: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
2c80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c90: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
2ca0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
2cb0: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
2cc0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
2ce0: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
2cf0: 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67  Source};[getFlag
2d00: 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20  sProperty]")).. 
2d10: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d20: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
2d30: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
2d40: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2d50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2d60: 45 3a 20 53 65 74 20 74 68 65 20 72 65 71 75 65  E: Set the reque
2d70: 73 74 65 64 20 72 65 74 72 79 20 70 61 72 61 6d  sted retry param
2d80: 65 74 65 72 20 76 61 6c 75 65 73 2e 0d 0a 20 20  eter values...  
2d90: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2da0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
2db0: 6e 6e 65 63 74 69 6f 6e 2e 53 65 74 41 76 52 65  nnection.SetAvRe
2dc0: 74 72 79 28 72 65 66 20 63 6f 75 6e 74 2c 20 72  try(ref count, r
2dd0: 65 66 20 69 6e 74 65 72 76 61 6c 29 20 21 3d 20  ef interval) != 
2de0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2df0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2e20: 2f 20 4e 4f 54 45 3a 20 51 75 65 72 79 20 74 68  / NOTE: Query th
2e30: 65 20 72 65 74 72 79 20 70 61 72 61 6d 65 74 65  e retry paramete
2e40: 72 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20  r values...     
2e50: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2e60: 20 20 20 20 20 20 20 69 6e 74 20 6e 65 77 43 6f         int newCo
2e70: 75 6e 74 20 3d 20 2d 31 3b 20 69 6e 74 20 6e 65  unt = -1; int ne
2e80: 77 49 6e 74 65 72 76 61 6c 20 3d 20 2d 31 3b 0d  wInterval = -1;.
2e90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2ea0: 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 53 65  f (connection.Se
2eb0: 74 41 76 52 65 74 72 79 28 72 65 66 20 6e 65 77  tAvRetry(ref new
2ec0: 43 6f 75 6e 74 2c 20 72 65 66 20 6e 65 77 49 6e  Count, ref newIn
2ed0: 74 65 72 76 61 6c 29 20 21 3d 20 30 29 0d 0a 20  terval) != 0).. 
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ef0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2f00: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2f10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2f20: 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  E: Make sure the
2f30: 20 72 65 74 72 79 20 70 61 72 61 6d 65 74 65 72   retry parameter
2f40: 20 76 61 6c 75 65 73 20 77 65 72 65 20 73 65 74   values were set
2f50: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
2f70: 65 74 75 72 6e 20 28 6e 65 77 43 6f 75 6e 74 20  eturn (newCount 
2f80: 3d 3d 20 63 6f 75 6e 74 20 26 26 20 6e 65 77 49  == count && newI
2f90: 6e 74 65 72 76 61 6c 20 3d 3d 20 69 6e 74 65 72  nterval == inter
2fa0: 76 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  val);..         
2fb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
2fc0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
3020: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
3030: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
3040: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
3050: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
3060: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
3070: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
3080: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
3090: 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d  ts errors System
30a0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
30b0: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
30c0: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
30d0: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
30e0: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
30f0: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
3100: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
3110: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
3120: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
3130: 20 20 20 73 65 74 20 73 61 76 65 64 43 6f 75 6e     set savedCoun
3140: 74 20 2d 31 3b 20 73 65 74 20 73 61 76 65 64 49  t -1; set savedI
3150: 6e 74 65 72 76 61 6c 20 2d 31 0d 0a 0d 0a 20 20  nterval -1....  
3160: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
3170: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
3180: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 54 65 73 74  }.Test${id} Test
3190: 53 65 74 41 76 52 65 74 72 79 20 5c 0d 0a 20 20  SetAvRetry \..  
31a0: 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 43            savedC
31b0: 6f 75 6e 74 20 73 61 76 65 64 49 6e 74 65 72 76  ount savedInterv
31c0: 61 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  al....        se
31d0: 74 20 63 6f 75 6e 74 20 35 3b 20 73 65 74 20 69  t count 5; set i
31e0: 6e 74 65 72 76 61 6c 20 35 30 0d 0a 0d 0a 20 20  nterval 50....  
31f0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
3200: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
3210: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 54 65 73 74  }.Test${id} Test
3220: 53 65 74 41 76 52 65 74 72 79 20 5c 0d 0a 20 20  SetAvRetry \..  
3230: 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74 20            count 
3240: 69 6e 74 65 72 76 61 6c 0d 0a 20 20 20 20 20 20  interval..      
3250: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
3260: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
3270: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
3280: 70 20 7b 0d 0a 20 20 69 66 20 7b 5b 69 6e 66 6f  p {..  if {[info
3290: 20 65 78 69 73 74 73 20 73 61 76 65 64 43 6f 75   exists savedCou
32a0: 6e 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nt]} then {..   
32b0: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
32c0: 52 65 73 74 6f 72 65 20 74 68 65 20 73 61 76 65  Restore the save
32d0: 64 20 72 65 74 72 79 20 63 6f 75 6e 74 2c 20 69  d retry count, i
32e0: 66 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20  f possible...   
32f0: 20 23 0d 0a 20 20 20 20 63 61 74 63 68 20 7b 0d   #..    catch {.
3300: 0a 20 20 20 20 20 20 73 65 74 20 69 6e 74 65 72  .      set inter
3310: 76 61 6c 20 2d 31 0d 0a 20 20 20 20 20 20 6f 62  val -1..      ob
3320: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
3330: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
3340: 69 64 7d 20 54 65 73 74 53 65 74 41 76 52 65 74  id} TestSetAvRet
3350: 72 79 20 73 61 76 65 64 43 6f 75 6e 74 20 69 6e  ry savedCount in
3360: 74 65 72 76 61 6c 0d 0a 20 20 20 20 7d 0d 0a 20  terval..    }.. 
3370: 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69 6e 66   }....  if {[inf
3380: 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 49 6e  o exists savedIn
3390: 74 65 72 76 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d  terval]} then {.
33a0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
33b0: 54 45 3a 20 52 65 73 74 6f 72 65 20 74 68 65 20  TE: Restore the 
33c0: 73 61 76 65 64 20 72 65 74 72 79 20 69 6e 74 65  saved retry inte
33d0: 72 76 61 6c 2c 20 69 66 20 70 6f 73 73 69 62 6c  rval, if possibl
33e0: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 63  e...    #..    c
33f0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 73 65  atch {..      se
3400: 74 20 63 6f 75 6e 74 20 2d 31 0d 0a 20 20 20 20  t count -1..    
3410: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
3420: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
3430: 73 74 24 7b 69 64 7d 20 54 65 73 74 53 65 74 41  st${id} TestSetA
3440: 76 52 65 74 72 79 20 63 6f 75 6e 74 20 73 61 76  vRetry count sav
3450: 65 64 49 6e 74 65 72 76 61 6c 0d 0a 20 20 20 20  edInterval..    
3460: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 63 6c 65 61  }..  }....  clea
3470: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
3480: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
3490: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
34a0: 75 6e 74 20 69 6e 74 65 72 76 61 6c 20 73 61 76  unt interval sav
34b0: 65 64 43 6f 75 6e 74 20 73 61 76 65 64 49 6e 74  edCount savedInt
34c0: 65 72 76 61 6c 20 72 65 73 75 6c 74 73 20 5c 0d  erval results \.
34d0: 0a 20 20 20 20 20 20 65 72 72 6f 72 73 20 63 6f  .      errors co
34e0: 64 65 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  de dataSource id
34f0: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
3500: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
3510: 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
3520: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
3530: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
3540: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
3550: 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  te compileCSharp
3560: 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
3570: 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53  -result {^Ok\..S
3580: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
3590: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
35a0: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
35b0: 30 20 54 72 75 65 24 7d 7d 0d 0a 0d 0a 23 23 23  0 True$}}....###
35c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3600: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
3610: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
3620: 74 61 2d 31 2e 38 20 7b 70 72 6f 70 65 72 6c 79  ta-1.8 {properly
3630: 20 63 6c 6f 73 65 64 20 64 61 74 61 62 61 73 65   closed database
3640: 20 66 69 6c 65 20 28 6e 6f 6e 2d 71 75 65 72 79   file (non-query
3650: 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  )} -setup {..  s
3660: 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
3670: 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.8.db..} -body
3680: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
3690: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
36a0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
36b0: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
36c0: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
36d0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
36e0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
36f0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
3700: 74 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42  t sql { \..    B
3710: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 20 54  EGIN EXCLUSIVE T
3720: 52 41 4e 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20  RANSACTION; \.. 
3730: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3740: 74 31 28 78 20 49 4e 54 45 47 45 52 29 3b 20 5c  t1(x INTEGER); \
3750: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
3760: 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
3770: 31 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  1); \..    SELEC
3780: 54 20 78 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a  T x FROM t1; \..
3790: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
37a0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
37b0: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
37c0: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
37d0: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
37e0: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
37f0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
3800: 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  e;....    namesp
3810: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
3820: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
3830: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
3840: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
3850: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3860: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
3870: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
3880: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3890: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
38a0: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
38b0: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
38c0: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
38d0: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
38e0: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
38f0: 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72  rce};[getFlagsPr
3900: 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20  operty]"))..    
3910: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3920: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
3930: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
3940: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3950: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
3960: 61 6e 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  and = new SQLite
3970: 43 6f 6d 6d 61 6e 64 28 22 24 7b 73 71 6c 7d 22  Command("${sql}"
3980: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3990: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d     connection)).
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
39c0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
39d0: 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
39e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
39f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
3a00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3a10: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
3a20: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
3a30: 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ors System.Data.
3a40: 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20  SQLite.dll].... 
3a50: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
3a60: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
3a70: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
3a80: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
3a90: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
3aa0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
3ab0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
3ac0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
3ad0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
3ae0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
3af0: 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d  d} Main..      }
3b00: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
3b10: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
3b20: 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b 63  sult \..      [c
3b30: 6c 6f 73 65 20 5b 6f 70 65 6e 20 24 64 61 74 61  lose [open $data
3b40: 53 6f 75 72 63 65 20 52 44 4f 4e 4c 59 20 30 20  Source RDONLY 0 
3b50: 22 22 20 2d 73 68 61 72 65 20 4e 6f 6e 65 5d 5d  "" -share None]]
3b60: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
3b70: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
3b80: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
3b90: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
3ba0: 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ult results erro
3bb0: 72 73 20 63 6f 64 65 20 73 71 6c 20 64 61 74 61  rs code sql data
3bc0: 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61  Source id fileNa
3bd0: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
3be0: 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  ts {eagle monoBu
3bf0: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
3c00: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
3c10: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
3c20: 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65  a.SQLite compile
3c30: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72  CSharp} -match r
3c40: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e  egexp -result {^
3c50: 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65  Ok\..System#Code
3c60: 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d  Dom#Compiler#Com
3c70: 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b  pilerResults#\d+
3c80: 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 5c 7b 5c   \{\} 0 \{\} \{\
3c90: 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
3ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3ce0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
3cf0: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
3d00: 39 20 7b 70 72 6f 70 65 72 6c 79 20 63 6c 6f 73  9 {properly clos
3d10: 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
3d20: 20 28 72 65 61 64 65 72 20 23 31 29 7d 20 2d 73   (reader #1)} -s
3d30: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
3d40: 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 39 2e  leName data-1.9.
3d50: 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  db..} -body {.. 
3d60: 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20   set id [object 
3d70: 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74  invoke Interpret
3d80: 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78  er.GetActive Nex
3d90: 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61  tId]..  set data
3da0: 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  Source [file joi
3db0: 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69  n [getDatabaseDi
3dc0: 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61  rectory] $fileNa
3dd0: 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c  me]....  set sql
3de0: 20 7b 20 5c 0d 0a 20 20 20 20 42 45 47 49 4e 20   { \..    BEGIN 
3df0: 45 58 43 4c 55 53 49 56 45 20 54 52 41 4e 53 41  EXCLUSIVE TRANSA
3e00: 43 54 49 4f 4e 3b 20 5c 0d 0a 20 20 20 20 43 52  CTION; \..    CR
3e10: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
3e20: 49 4e 54 45 47 45 52 29 3b 20 5c 0d 0a 20 20 20  INTEGER); \..   
3e30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3e40: 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 20 5c  (x) VALUES(1); \
3e50: 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20 46  ..    SELECT x F
3e60: 52 4f 4d 20 74 31 3b 20 5c 0d 0a 20 20 7d 0d 0a  ROM t1; \..  }..
3e70: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
3e80: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
3e90: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
3ea0: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
3eb0: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
3ec0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
3ed0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d  .Data.SQLite;...
3ee0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
3ef0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
3f00: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
3f10: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
3f20: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
3f30: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
3f40: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
3f50: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
3f60: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
3f70: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
3f80: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
3f90: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
3fa0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
3fb0: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
3fc0: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
3fd0: 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74  [getFlagsPropert
3fe0: 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  y]"))..         
3ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4000: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
4010: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4020: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
4030: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
4040: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61   new SQLiteComma
4050: 6e 64 28 22 24 7b 73 71 6c 7d 22 2c 0d 0a 20 20  nd("${sql}",..  
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
4070: 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20  nnection))..    
4080: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4090: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
40a0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
40b0: 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f   dataReader = co
40c0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61  mmand.ExecuteRea
40d0: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
40e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
40f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
4100: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
4110: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4120: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
4140: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4150: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
4160: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
4170: 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ors System.Data.
4180: 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20  SQLite.dll].... 
4190: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
41a0: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
41b0: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
41c0: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
41d0: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
41e0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
41f0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
4200: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
4210: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
4220: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
4230: 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d  d} Main..      }
4240: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
4250: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
4260: 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b 63  sult \..      [c
4270: 6c 6f 73 65 20 5b 6f 70 65 6e 20 24 64 61 74 61  lose [open $data
4280: 53 6f 75 72 63 65 20 52 44 4f 4e 4c 59 20 30 20  Source RDONLY 0 
4290: 22 22 20 2d 73 68 61 72 65 20 4e 6f 6e 65 5d 5d  "" -share None]]
42a0: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
42b0: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
42c0: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
42d0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
42e0: 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ult results erro
42f0: 72 73 20 63 6f 64 65 20 73 71 6c 20 64 61 74 61  rs code sql data
4300: 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61  Source id fileNa
4310: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
4320: 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  ts {eagle monoBu
4330: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
4340: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
4350: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
4360: 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65  a.SQLite compile
4370: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72  CSharp} -match r
4380: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e  egexp -result {^
4390: 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65  Ok\..System#Code
43a0: 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d  Dom#Compiler#Com
43b0: 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b  pilerResults#\d+
43c0: 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 5c 7b 5c   \{\} 0 \{\} \{\
43d0: 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
43e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4420: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
4430: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
4440: 31 30 20 7b 70 72 6f 70 65 72 6c 79 20 63 6c 6f  10 {properly clo
4450: 73 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c  sed database fil
4460: 65 20 28 72 65 61 64 65 72 20 23 32 29 7d 20 2d  e (reader #2)} -
4470: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
4480: 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 31  ileName data-1.1
4490: 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  0.db..} -body {.
44a0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
44b0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
44c0: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
44d0: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
44e0: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
44f0: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
4500: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
4510: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
4520: 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42 45 47 49  ql { \..    BEGI
4530: 4e 20 45 58 43 4c 55 53 49 56 45 20 54 52 41 4e  N EXCLUSIVE TRAN
4540: 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20 20 20 20  SACTION; \..    
4550: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4560: 78 20 49 4e 54 45 47 45 52 29 3b 20 5c 0d 0a 20  x INTEGER); \.. 
4570: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
4580: 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
4590: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 78   \..    SELECT x
45a0: 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a 20 20 7d   FROM t1; \..  }
45b0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
45c0: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
45d0: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
45e0: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
45f0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
4600: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
4610: 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75 73  em.Data;..    us
4620: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
4630: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
4640: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
4650: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
4660: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4670: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
4680: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
4690: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
46a0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
46b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
46c0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
46d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
46e0: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
46f0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
4700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
4710: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
4720: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c  taSource};[getFl
4730: 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d  agsProperty]")).
4740: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
4750: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
4760: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
4770: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4780: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
4790: 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53   command = new S
47a0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 22 24 7b  QLiteCommand("${
47b0: 73 71 6c 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  sql}",..        
47c0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
47d0: 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
47e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
47f0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
4800: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
4810: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
4820: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 0d 0a  ExecuteReader(..
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4840: 20 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f    CommandBehavio
4850: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
4860: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
4870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4880: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
4890: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
48a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
48b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
48c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
48d0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
48e0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
48f0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
4900: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
4910: 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69  ite.dll]....  li
4920: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code $result
4930: 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  s \..      [expr
4940: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65   {[info exists e
4950: 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73  rrors] ? $errors
4960: 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20   : ""}] \..     
4970: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
4980: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
4990: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
49a0: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
49b0: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
49c0: 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65  Main..      } re
49d0: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
49e0: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
49f0: 74 20 5c 0d 0a 20 20 20 20 20 20 5b 63 6c 6f 73  t \..      [clos
4a00: 65 20 5b 6f 70 65 6e 20 24 64 61 74 61 53 6f 75  e [open $dataSou
4a10: 72 63 65 20 52 44 4f 4e 4c 59 20 30 20 22 22 20  rce RDONLY 0 "" 
4a20: 2d 73 68 61 72 65 20 4e 6f 6e 65 5d 5d 0d 0a 7d  -share None]]..}
4a30: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
4a40: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
4a50: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
4a60: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
4a70: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
4a80: 63 6f 64 65 20 73 71 6c 20 64 61 74 61 53 6f 75  code sql dataSou
4a90: 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d  rce id fileName.
4aa0: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
4ab0: 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
4ac0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
4ad0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
4ae0: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
4af0: 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68  QLite compileCSh
4b00: 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65  arp} -match rege
4b10: 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c  xp -result {^Ok\
4b20: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
4b30: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
4b40: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
4b50: 5c 7d 20 30 20 5c 7b 5c 7d 20 5c 7b 5c 7d 24 7d  \} 0 \{\} \{\}$}
4b60: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
4b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4bb0: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
4bc0: 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 31 31 20  {test data-1.11 
4bd0: 7b 43 68 61 6e 67 65 73 20 70 72 6f 70 65 72 74  {Changes propert
4be0: 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  y} -setup {..  s
4bf0: 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
4c00: 4e 61 6d 65 20 64 61 74 61 2d 31 2e 31 31 2e 64  Name data-1.11.d
4c10: 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
4c20: 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
4c30: 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
4c40: 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
4c50: 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71  t [list]....  sq
4c60: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
4c70: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
4c80: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
4c90: 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b   KEY ASC, y, z);
4ca0: 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  "....  sql execu
4cb0: 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
4cc0: 4e 54 4f 20 74 31 20 28 78 2c 20 79 2c 20 7a 29  NTO t1 (x, y, z)
4cd0: 20 56 41 4c 55 45 53 28 31 2c 20 27 66 6f 6f 27   VALUES(1, 'foo'
4ce0: 2c 20 31 32 33 34 29 3b 22 0d 0a 20 20 73 71 6c  , 1234);"..  sql
4cf0: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
4d00: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
4d10: 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 32 2c   y, z) VALUES(2,
4d20: 20 27 62 61 72 27 2c 20 35 36 37 38 29 3b 22 0d   'bar', 5678);".
4d30: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
4d40: 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  t [object invoke
4d50: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 43 68 61   $connection Cha
4d60: 6e 67 65 73 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  nges]....  sql e
4d70: 78 65 63 75 74 65 20 24 64 62 20 22 55 50 44 41  xecute $db "UPDA
4d80: 54 45 20 74 31 20 53 45 54 20 79 20 3d 20 27 66  TE t1 SET y = 'f
4d90: 6f 6f 62 61 72 27 3b 22 0d 0a 20 20 6c 61 70 70  oobar';"..  lapp
4da0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65  end result [obje
4db0: 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65  ct invoke $conne
4dc0: 63 74 69 6f 6e 20 43 68 61 6e 67 65 73 5d 0d 0a  ction Changes]..
4dd0: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
4de0: 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
4df0: 24 64 62 20 22 53 45 4c 45 43 54 20 78 2c 20 79  $db "SELECT x, y
4e00: 2c 20 7a 20 46 52 4f 4d 20 74 31 3b 22 0d 0a 20  , z FROM t1;".. 
4e10: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
4e20: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $
4e30: 63 6f 6e 6e 65 63 74 69 6f 6e 20 43 68 61 6e 67  connection Chang
4e40: 65 73 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68  es]....  foreach
4e50: 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e   name [lsort -in
4e60: 74 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61 6d  teger [array nam
4e70: 65 73 20 72 6f 77 73 20 2d 72 65 67 65 78 70 20  es rows -regexp 
4e80: 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20  {^\d+$}]] {..   
4e90: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
4ea0: 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 72 6f 77  [list $name $row
4eb0: 73 28 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a  s($name)]..  }..
4ec0: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
4ed0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
4ee0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
4ef0: 61 6d 65 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43  ame....  freeDbC
4f00: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
4f10: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
4f20: 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73 75 6c   name rows resul
4f30: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20  t connection db 
4f40: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
4f50: 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67  straints \..{eag
4f60: 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
4f70: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
4f80: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
4f90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
4fa0: 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 31 20 32   \..-result {1 2
4fb0: 20 32 20 7b 31 20 7b 7b 78 20 31 7d 20 7b 79 20   2 {1 {{x 1} {y 
4fc0: 66 6f 6f 62 61 72 7d 20 7b 7a 20 31 32 33 34 7d  foobar} {z 1234}
4fd0: 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b 79 20  }} {2 {{x 2} {y 
4fe0: 66 6f 6f 62 61 72 7d 20 7b 7a 20 35 36 37 38 7d  foobar} {z 5678}
4ff0: 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }}}}....########
5000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5040: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
5050: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
5060: 31 32 20 7b 4c 61 73 74 49 6e 73 65 72 74 52 6f  12 {LastInsertRo
5070: 77 49 64 20 70 72 6f 70 65 72 74 79 7d 20 2d 73  wId property} -s
5080: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
5090: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
50a0: 64 61 74 61 2d 31 2e 31 32 2e 64 62 5d 0d 0a 7d  data-1.12.db]..}
50b0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
50c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44  connection [getD
50d0: 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a  bConnection]....
50e0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
50f0: 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  st]....  sql exe
5100: 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45  cute $db "CREATE
5110: 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45   TABLE t1(x INTE
5120: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
5130: 41 53 43 2c 20 79 2c 20 7a 29 3b 22 0d 0a 0d 0a  ASC, y, z);"....
5140: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
5150: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
5160: 74 32 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t2(x INTEGER PRI
5170: 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43  MARY KEY AUTOINC
5180: 52 45 4d 45 4e 54 2c 20 79 2c 20 7a 29 3b 22 0d  REMENT, y, z);".
5190: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
51a0: 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  t [object invoke
51b0: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73   $connection Las
51c0: 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d  tInsertRowId]...
51d0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
51e0: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
51f0: 74 31 20 28 78 2c 20 79 2c 20 7a 29 20 56 41 4c  t1 (x, y, z) VAL
5200: 55 45 53 28 31 2c 20 27 66 6f 6f 27 2c 20 31 32  UES(1, 'foo', 12
5210: 33 34 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64  34);"..  lappend
5220: 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20   result [object 
5230: 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69  invoke $connecti
5240: 6f 6e 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  on LastInsertRow
5250: 49 64 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  Id]....  sql exe
5260: 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
5270: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 2c 20   INTO t1 (x, y, 
5280: 7a 29 20 56 41 4c 55 45 53 28 32 2c 20 27 62 61  z) VALUES(2, 'ba
5290: 72 27 2c 20 35 36 37 38 29 3b 22 0d 0a 20 20 6c  r', 5678);"..  l
52a0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f  append result [o
52b0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f  bject invoke $co
52c0: 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e 73  nnection LastIns
52d0: 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20 73  ertRowId]....  s
52e0: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
52f0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 20  UPDATE t1 SET y 
5300: 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a 20 20  = 'foobar';"..  
5310: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5320: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
5330: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
5340: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
5350: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
5360: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
5370: 28 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 66  (y, z) VALUES('f
5380: 6f 6f 27 2c 20 31 32 33 34 29 3b 22 0d 0a 20 20  oo', 1234);"..  
5390: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
53a0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
53b0: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
53c0: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
53d0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
53e0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
53f0: 28 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 62  (y, z) VALUES('b
5400: 61 72 27 2c 20 35 36 37 38 29 3b 22 0d 0a 20 20  ar', 5678);"..  
5410: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
5420: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
5430: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
5440: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
5450: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
5460: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 79  "UPDATE t2 SET y
5470: 20 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a 20   = 'foobar';".. 
5480: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
5490: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $
54a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49  connection LastI
54b0: 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20  nsertRowId].... 
54c0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78   sql execute -ex
54d0: 65 63 75 74 65 20 72 65 61 64 65 72 20 24 64 62  ecute reader $db
54e0: 20 22 53 45 4c 45 43 54 20 78 2c 20 79 2c 20 7a   "SELECT x, y, z
54f0: 20 46 52 4f 4d 20 74 31 3b 22 0d 0a 20 20 6c 61   FROM t1;"..  la
5500: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62  ppend result [ob
5510: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e  ject invoke $con
5520: 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e 73 65  nection LastInse
5530: 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20 66 6f  rtRowId]....  fo
5540: 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72  reach name [lsor
5550: 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61  t -integer [arra
5560: 79 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d 72 65  y names rows -re
5570: 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b  gexp {^\d+$}]] {
5580: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
5590: 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65  sult [list $name
55a0: 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a   $rows($name)]..
55b0: 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65    }....  sql exe
55c0: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
55d0: 61 64 65 72 20 24 64 62 20 22 53 45 4c 45 43 54  ader $db "SELECT
55e0: 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20 74 32   x, y, z FROM t2
55f0: 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ;"..  lappend re
5600: 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  sult [object inv
5610: 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  oke $connection 
5620: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d  LastInsertRowId]
5630: 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 6e 61  ....  foreach na
5640: 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67  me [lsort -integ
5650: 65 72 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  er [array names 
5660: 72 6f 77 73 20 2d 72 65 67 65 78 70 20 7b 5e 5c  rows -regexp {^\
5670: 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61  d+$}]] {..    la
5680: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69  ppend result [li
5690: 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73 28 24  st $name $rows($
56a0: 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  name)]..  }.... 
56b0: 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
56c0: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
56d0: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
56e0: 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e  ....  freeDbConn
56f0: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65  ection....  unse
5700: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6e 61  t -nocomplain na
5710: 6d 65 20 72 6f 77 73 20 72 65 73 75 6c 74 20 63  me rows result c
5720: 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66 69 6c  onnection db fil
5730: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
5740: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
5750: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
5760: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
5770: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
5780: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d  .Data.SQLite} \.
5790: 0a 2d 72 65 73 75 6c 74 20 7b 30 20 31 20 32 20  .-result {0 1 2 
57a0: 32 20 31 20 32 20 32 20 32 20 7b 31 20 7b 7b 78  2 1 2 2 2 {1 {{x
57b0: 20 31 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 20 7b   1} {y foobar} {
57c0: 7a 20 31 32 33 34 7d 7d 7d 20 7b 32 20 7b 7b 78  z 1234}}} {2 {{x
57d0: 20 32 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 5c 0d   2} {y foobar}\.
57e0: 0a 7b 7a 20 35 36 37 38 7d 7d 7d 20 32 20 7b 31  .{z 5678}}} 2 {1
57f0: 20 7b 7b 78 20 31 7d 20 7b 79 20 66 6f 6f 62 61   {{x 1} {y fooba
5800: 72 7d 20 7b 7a 20 31 32 33 34 7d 7d 7d 20 7b 32  r} {z 1234}}} {2
5810: 20 7b 7b 78 20 32 7d 20 7b 79 20 66 6f 6f 62 61   {{x 2} {y fooba
5820: 72 7d 20 7b 7a 20 35 36 37 38 7d 7d 7d 7d 7d 0d  r} {z 5678}}}}}.
5830: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
5840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5880: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
5890: 65 73 74 20 64 61 74 61 2d 31 2e 31 33 20 7b 44  est data-1.13 {D
58a0: 61 74 65 54 69 6d 65 20 75 73 69 6e 67 20 55 6e  ateTime using Un
58b0: 69 78 20 65 70 6f 63 68 7d 20 2d 73 65 74 75 70  ix epoch} -setup
58c0: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
58d0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
58e0: 2d 31 2e 31 33 2e 64 62 5d 20 22 22 20 55 6e 69  -1.13.db] "" Uni
58f0: 78 45 70 6f 63 68 20 55 74 63 0d 0a 7d 20 2d 62  xEpoch Utc..} -b
5900: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73  ody {..  set res
5910: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
5920: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
5930: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
5940: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
5950: 52 59 20 4b 45 59 20 41 53 43 2c 20 79 20 44 41  RY KEY ASC, y DA
5960: 54 45 54 49 4d 45 29 3b 22 0d 0a 20 20 73 71 6c  TETIME);"..  sql
5970: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
5980: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
5990: 20 79 29 20 56 41 4c 55 45 53 28 31 2c 20 31 33   y) VALUES(1, 13
59a0: 30 32 38 32 35 36 30 30 29 3b 22 0d 0a 20 20 73  02825600);"..  s
59b0: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
59c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
59d0: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20  x, y) VALUES(2, 
59e0: 31 33 33 34 34 34 38 30 30 30 29 3b 22 0d 0a 20  1334448000);".. 
59f0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
5a00: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
5a10: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 33   (x, y) VALUES(3
5a20: 2c 20 31 33 36 35 39 38 34 30 30 30 29 3b 22 0d  , 1365984000);".
5a30: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5a40: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5a50: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
5a60: 45 53 28 34 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(4, ?);" \..  
5a70: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
5a80: 20 49 6e 74 33 32 20 31 33 30 32 38 32 35 36 30   Int32 130282560
5a90: 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  0]....  sql exec
5aa0: 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
5ab0: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5ac0: 41 4c 55 45 53 28 35 2c 20 3f 29 3b 22 20 5c 0d  ALUES(5, ?);" \.
5ad0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5ae0: 61 6d 31 20 49 6e 74 33 32 20 31 33 33 34 34 34  am1 Int32 133444
5af0: 38 30 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  8000]....  sql e
5b00: 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
5b10: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
5b20: 29 20 56 41 4c 55 45 53 28 36 2c 20 3f 29 3b 22  ) VALUES(6, ?);"
5b30: 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20   \..      [list 
5b40: 70 61 72 61 6d 31 20 49 6e 74 33 32 20 31 33 36  param1 Int32 136
5b50: 35 39 38 34 30 30 30 5d 0d 0a 0d 0a 20 20 73 71  5984000]....  sq
5b60: 6c 20 65 78 65 63 75 74 65 20 2d 76 65 72 62 61  l execute -verba
5b70: 74 69 6d 20 24 64 62 20 22 49 4e 53 45 52 54 20  tim $db "INSERT 
5b80: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5b90: 41 4c 55 45 53 28 37 2c 20 3f 29 3b 22 20 5c 0d  ALUES(7, ?);" \.
5ba0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5bb0: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 33 30  am1 DateTime 130
5bc0: 32 38 32 35 36 30 30 5d 0d 0a 0d 0a 20 20 73 71  2825600]....  sq
5bd0: 6c 20 65 78 65 63 75 74 65 20 2d 76 65 72 62 61  l execute -verba
5be0: 74 69 6d 20 24 64 62 20 22 49 4e 53 45 52 54 20  tim $db "INSERT 
5bf0: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5c00: 41 4c 55 45 53 28 38 2c 20 3f 29 3b 22 20 5c 0d  ALUES(8, ?);" \.
5c10: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5c20: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 33 33  am1 DateTime 133
5c30: 34 34 34 38 30 30 30 5d 0d 0a 0d 0a 20 20 73 71  4448000]....  sq
5c40: 6c 20 65 78 65 63 75 74 65 20 2d 76 65 72 62 61  l execute -verba
5c50: 74 69 6d 20 24 64 62 20 22 49 4e 53 45 52 54 20  tim $db "INSERT 
5c60: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5c70: 41 4c 55 45 53 28 39 2c 20 3f 29 3b 22 20 5c 0d  ALUES(9, ?);" \.
5c80: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5c90: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 33 36  am1 DateTime 136
5ca0: 35 39 38 34 30 30 30 5d 0d 0a 0d 0a 20 20 73 71  5984000]....  sq
5cb0: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
5cc0: 74 65 20 72 65 61 64 65 72 20 2d 64 61 74 65 74  te reader -datet
5cd0: 69 6d 65 66 6f 72 6d 61 74 20 5b 67 65 74 44 61  imeformat [getDa
5ce0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 24 64  teTimeFormat] $d
5cf0: 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45  b \..      "SELE
5d00: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20  CT x, y FROM t1 
5d10: 4f 52 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d 0a  ORDER BY x;"....
5d20: 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b    foreach name [
5d30: 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b  lsort -integer [
5d40: 61 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73  array names rows
5d50: 20 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d   -regexp {^\d+$}
5d60: 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e  ]] {..    lappen
5d70: 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24  d result [list $
5d80: 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65  name $rows($name
5d90: 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  )]..  }....  set
5da0: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
5db0: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
5dc0: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
5dd0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
5de0: 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65  ain name rows re
5df0: 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
5e00: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
5e10: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
5e20: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
5e30: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
5e40: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
5e50: 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73  .SQLite} \..-res
5e60: 75 6c 74 20 7b 7b 31 20 7b 7b 78 20 31 7d 20 7b  ult {{1 {{x 1} {
5e70: 79 20 7b 32 30 31 31 2d 30 34 2d 31 35 20 30 30  y {2011-04-15 00
5e80: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 32 20 7b  :00:00Z}}}} {2 {
5e90: 7b 78 20 32 7d 20 7b 79 20 7b 32 30 31 32 2d 30  {x 2} {y {2012-0
5ea0: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
5eb0: 7d 7d 7d 7d 20 7b 33 20 7b 7b 78 20 33 7d 20 7b  }}}} {3 {{x 3} {
5ec0: 79 20 7b 32 30 31 33 2d 30 34 2d 31 35 20 30 30  y {2013-04-15 00
5ed0: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 34 20 7b  :00:00Z}}}} {4 {
5ee0: 7b 78 20 34 7d 20 7b 79 20 7b 32 30 31 31 2d 30  {x 4} {y {2011-0
5ef0: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
5f00: 7d 7d 7d 7d 20 7b 35 20 7b 7b 78 20 35 7d 20 7b  }}}} {5 {{x 5} {
5f10: 79 20 7b 32 30 31 32 2d 30 34 2d 31 35 20 30 30  y {2012-04-15 00
5f20: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 36 20 7b  :00:00Z}}}} {6 {
5f30: 7b 78 20 36 7d 20 7b 79 20 7b 32 30 31 33 2d 30  {x 6} {y {2013-0
5f40: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
5f50: 7d 7d 7d 7d 20 7b 37 20 7b 7b 78 20 37 7d 20 7b  }}}} {7 {{x 7} {
5f60: 79 20 7b 32 30 31 31 2d 30 34 2d 31 35 20 30 30  y {2011-04-15 00
5f70: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 38 20 7b  :00:00Z}}}} {8 {
5f80: 7b 78 20 38 7d 20 7b 79 20 7b 32 30 31 32 2d 30  {x 8} {y {2012-0
5f90: 34 2d 31 35 5c 0d 0a 30 30 3a 30 30 3a 30 30 5a  4-15\..00:00:00Z
5fa0: 7d 7d 7d 7d 20 7b 39 20 7b 7b 78 20 39 7d 20 7b  }}}} {9 {{x 9} {
5fb0: 79 20 7b 32 30 31 33 2d 30 34 2d 31 35 20 30 30  y {2013-04-15 00
5fc0: 3a 30 30 3a 30 30 5a 7d 7d 7d 7d 7d 7d 0d 0a 0d  :00:00Z}}}}}}...
5fd0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
5fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6020: 0d 0a 0d 0a 73 65 74 20 64 61 74 65 20 5b 63 6c  ....set date [cl
6030: 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63  ock format [cloc
6040: 6b 20 73 65 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d  k seconds] -form
6050: 61 74 20 79 79 79 79 2d 4d 4d 2d 64 64 5d 0d 0a  at yyyy-MM-dd]..
6060: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
6070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60b0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
60c0: 73 74 20 64 61 74 61 2d 31 2e 31 34 20 7b 44 61  st data-1.14 {Da
60d0: 74 65 54 69 6d 65 20 75 73 69 6e 67 20 69 6e 76  teTime using inv
60e0: 61 72 69 61 6e 74 20 63 75 6c 74 75 72 65 7d 20  ariant culture} 
60f0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
6100: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
6110: 65 20 64 61 74 61 2d 31 2e 31 34 2e 64 62 5d 20  e data-1.14.db] 
6120: 22 22 20 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  "" InvariantCult
6130: 75 72 65 20 55 74 63 0d 0a 7d 20 2d 62 6f 64 79  ure Utc..} -body
6140: 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74   {..  set result
6150: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c   [list]....  sql
6160: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52   execute $db "CR
6170: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
6180: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6190: 4b 45 59 20 41 53 43 2c 20 79 20 44 41 54 45 54  KEY ASC, y DATET
61a0: 49 4d 45 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  IME);"....  sql 
61b0: 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
61c0: 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
61d0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
61e0: 45 53 28 31 2c 20 27 57 65 64 6e 65 73 64 61 79  ES(1, 'Wednesday
61f0: 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30  , 16 December 20
6200: 30 39 27 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  09');"....  sql 
6210: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
6220: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6230: 79 29 20 56 41 4c 55 45 53 28 32 2c 20 27 31 32  y) VALUES(2, '12
6240: 3a 30 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20  :00:00');"....  
6250: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
6260: 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54  \..      "INSERT
6270: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
6280: 56 41 4c 55 45 53 28 33 2c 20 27 57 65 64 6e 65  VALUES(3, 'Wedne
6290: 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65  sday, 16 Decembe
62a0: 72 20 32 30 30 39 20 31 32 3a 30 30 3a 30 30 27  r 2009 12:00:00'
62b0: 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  );"....  sql exe
62c0: 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
62d0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
62e0: 56 41 4c 55 45 53 28 34 2c 20 27 31 32 2f 31 36  VALUES(4, '12/16
62f0: 2f 32 30 30 39 27 29 3b 22 0d 0a 20 20 73 71 6c  /2009');"..  sql
6300: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
6310: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
6320: 20 79 29 20 56 41 4c 55 45 53 28 35 2c 20 27 31   y) VALUES(5, '1
6330: 32 3a 30 30 27 29 3b 22 0d 0a 20 20 73 71 6c 20  2:00');"..  sql 
6340: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
6350: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6360: 79 29 20 56 41 4c 55 45 53 28 36 2c 20 27 31 32  y) VALUES(6, '12
6370: 2f 31 36 2f 32 30 30 39 20 31 32 3a 30 30 27 29  /16/2009 12:00')
6380: 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  ;"....  sql exec
6390: 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
63a0: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
63b0: 41 4c 55 45 53 28 37 2c 20 3f 29 3b 22 20 5c 0d  ALUES(7, ?);" \.
63c0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
63d0: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 22 57 65  am1 DateTime "We
63e0: 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65 63 65  dnesday, 16 Dece
63f0: 6d 62 65 72 20 32 30 30 39 22 5d 0d 0a 0d 0a 20  mber 2009"].... 
6400: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6410: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
6420: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 38   (x, y) VALUES(8
6430: 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20  , ?);" \..      
6440: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74  [list param1 Dat
6450: 65 54 69 6d 65 20 31 32 3a 30 30 3a 30 30 5d 0d  eTime 12:00:00].
6460: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6470: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
6480: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
6490: 45 53 28 39 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(9, ?);" \..  
64a0: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
64b0: 20 44 61 74 65 54 69 6d 65 20 22 57 65 64 6e 65   DateTime "Wedne
64c0: 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65  sday, 16 Decembe
64d0: 72 20 32 30 30 39 20 31 32 3a 30 30 3a 30 30 22  r 2009 12:00:00"
64e0: 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  ]....  sql execu
64f0: 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
6500: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
6510: 4c 55 45 53 28 31 30 2c 20 3f 29 3b 22 20 5c 0d  LUES(10, ?);" \.
6520: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
6530: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 32 2f  am1 DateTime 12/
6540: 31 36 2f 32 30 30 39 5d 0d 0a 0d 0a 20 20 73 71  16/2009]....  sq
6550: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
6560: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6570: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 31 2c 20  , y) VALUES(11, 
6580: 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  ?);" \..      [l
6590: 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54  ist param1 DateT
65a0: 69 6d 65 20 31 32 3a 30 30 5d 0d 0a 0d 0a 20 20  ime 12:00]....  
65b0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
65c0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
65d0: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 32  (x, y) VALUES(12
65e0: 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20  , ?);" \..      
65f0: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74  [list param1 Dat
6600: 65 54 69 6d 65 20 22 31 32 2f 31 36 2f 32 30 30  eTime "12/16/200
6610: 39 20 31 32 3a 30 30 22 5d 0d 0a 0d 0a 20 20 73  9 12:00"]....  s
6620: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
6630: 75 74 65 20 72 65 61 64 65 72 20 2d 64 61 74 65  ute reader -date
6640: 74 69 6d 65 66 6f 72 6d 61 74 20 5b 67 65 74 44  timeformat [getD
6650: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 24  ateTimeFormat] $
6660: 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c  db \..      "SEL
6670: 45 43 54 20 78 2c 20 43 41 53 54 28 79 20 41 53  ECT x, CAST(y AS
6680: 20 54 45 58 54 29 20 41 53 20 79 32 20 46 52 4f   TEXT) AS y2 FRO
6690: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b  M t1 ORDER BY x;
66a0: 22 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 6e  "....  foreach n
66b0: 61 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65  ame [lsort -inte
66c0: 67 65 72 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ger [array names
66d0: 20 72 6f 77 73 20 2d 72 65 67 65 78 70 20 7b 5e   rows -regexp {^
66e0: 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c  \d+$}]] {..    l
66f0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c  append result [l
6700: 69 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73 28  ist $name $rows(
6710: 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a  $name)]..  }....
6720: 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20    set result..} 
6730: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
6740: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
6750: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
6760: 63 6f 6d 70 6c 61 69 6e 20 6e 61 6d 65 20 72 6f  complain name ro
6770: 77 73 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c  ws result db fil
6780: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
6790: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
67a0: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
67b0: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
67c0: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
67d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d  .Data.SQLite} \.
67e0: 0a 2d 72 65 73 75 6c 74 20 5b 73 75 62 73 74 20  .-result [subst 
67f0: 7b 7b 31 20 7b 7b 78 20 31 7d 20 7b 79 32 20 7b  {{1 {{x 1} {y2 {
6800: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
6810: 63 65 6d 62 65 72 20 32 30 30 39 7d 7d 7d 7d 20  cember 2009}}}} 
6820: 7b 32 20 7b 7b 78 20 32 7d 20 7b 79 32 5c 0d 0a  {2 {{x 2} {y2\..
6830: 31 32 3a 30 30 3a 30 30 7d 7d 7d 20 7b 33 20 7b  12:00:00}}} {3 {
6840: 7b 78 20 33 7d 20 7b 79 32 20 7b 57 65 64 6e 65  {x 3} {y2 {Wedne
6850: 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65  sday, 16 Decembe
6860: 72 20 32 30 30 39 20 31 32 3a 30 30 3a 30 30 7d  r 2009 12:00:00}
6870: 7d 7d 7d 20 7b 34 20 7b 7b 78 20 34 7d 5c 0d 0a  }}} {4 {{x 4}\..
6880: 7b 79 32 20 31 32 2f 31 36 2f 32 30 30 39 7d 7d  {y2 12/16/2009}}
6890: 7d 20 7b 35 20 7b 7b 78 20 35 7d 20 7b 79 32 20  } {5 {{x 5} {y2 
68a0: 31 32 3a 30 30 7d 7d 7d 20 7b 36 20 7b 7b 78 20  12:00}}} {6 {{x 
68b0: 36 7d 20 7b 79 32 20 7b 31 32 2f 31 36 2f 32 30  6} {y2 {12/16/20
68c0: 30 39 20 31 32 3a 30 30 7d 7d 7d 7d 20 7b 37 5c  09 12:00}}}} {7\
68d0: 0d 0a 7b 7b 78 20 37 7d 20 7b 79 32 20 32 30 30  ..{{x 7} {y2 200
68e0: 39 2d 31 32 2d 31 36 54 30 30 3a 30 30 3a 30 30  9-12-16T00:00:00
68f0: 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b 38 20  .0000000Z}}} {8 
6900: 7b 7b 78 20 38 7d 20 7b 79 32 5c 0d 0a 24 7b 64  {{x 8} {y2\..${d
6910: 61 74 65 7d 54 31 32 3a 30 30 3a 30 30 2e 30 30  ate}T12:00:00.00
6920: 30 30 30 30 30 5a 7d 7d 7d 20 7b 39 20 7b 7b 78  00000Z}}} {9 {{x
6930: 20 39 7d 20 7b 79 32 20 32 30 30 39 2d 31 32 2d   9} {y2 2009-12-
6940: 31 36 54 31 32 3a 30 30 3a 30 30 2e 30 30 30 30  16T12:00:00.0000
6950: 30 30 30 5a 7d 7d 7d 5c 0d 0a 7b 31 30 20 7b 7b  000Z}}}\..{10 {{
6960: 78 20 31 30 7d 20 7b 79 32 20 32 30 30 39 2d 31  x 10} {y2 2009-1
6970: 32 2d 31 36 54 30 30 3a 30 30 3a 30 30 2e 30 30  2-16T00:00:00.00
6980: 30 30 30 30 30 5a 7d 7d 7d 20 7b 31 31 20 7b 7b  00000Z}}} {11 {{
6990: 78 20 31 31 7d 20 7b 79 32 5c 0d 0a 24 7b 64 61  x 11} {y2\..${da
69a0: 74 65 7d 54 31 32 3a 30 30 3a 30 30 2e 30 30 30  te}T12:00:00.000
69b0: 30 30 30 30 5a 7d 7d 7d 20 7b 31 32 20 7b 7b 78  0000Z}}} {12 {{x
69c0: 20 31 32 7d 20 7b 79 32 20 32 30 30 39 2d 31 32   12} {y2 2009-12
69d0: 2d 31 36 54 31 32 3a 30 30 3a 30 30 2e 30 30 30  -16T12:00:00.000
69e0: 30 30 30 30 5a 7d 7d 7d 7d 5d 7d 0d 0a 0d 0a 23  0000Z}}}}]}....#
69f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6a30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
6a40: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
6a50: 64 61 74 61 2d 31 2e 31 35 20 7b 44 61 74 65 54  data-1.15 {DateT
6a60: 69 6d 65 20 75 73 69 6e 67 20 63 75 72 72 65 6e  ime using curren
6a70: 74 20 63 75 6c 74 75 72 65 7d 20 2d 73 65 74 75  t culture} -setu
6a80: 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
6a90: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
6aa0: 61 2d 31 2e 31 35 2e 64 62 5d 20 22 22 20 43 75  a-1.15.db] "" Cu
6ab0: 72 72 65 6e 74 43 75 6c 74 75 72 65 20 55 74 63  rrentCulture Utc
6ac0: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
6ad0: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
6ae0: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
6af0: 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
6b00: 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45 52  BLE t1(x INTEGER
6b10: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
6b20: 2c 20 79 20 44 41 54 45 54 49 4d 45 29 3b 22 0d  , y DATETIME);".
6b30: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6b40: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
6b50: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6b60: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 2c 20 27  , y) VALUES(1, '
6b70: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
6b80: 63 65 6d 62 65 72 20 32 30 30 39 27 29 3b 22 0d  cember 2009');".
6b90: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6ba0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
6bb0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
6bc0: 45 53 28 32 2c 20 27 31 32 3a 30 30 3a 30 30 27  ES(2, '12:00:00'
6bd0: 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  );"....  sql exe
6be0: 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20  cute $db \..    
6bf0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
6c00: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
6c10: 33 2c 20 27 57 65 64 6e 65 73 64 61 79 2c 20 31  3, 'Wednesday, 1
6c20: 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39 20  6 December 2009 
6c30: 31 32 3a 30 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a  12:00:00');"....
6c40: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
6c50: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
6c60: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
6c70: 34 2c 20 27 31 32 2f 31 36 2f 32 30 30 39 27 29  4, '12/16/2009')
6c80: 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ;"..  sql execut
6c90: 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
6ca0: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
6cb0: 55 45 53 28 35 2c 20 27 31 32 3a 30 30 27 29 3b  UES(5, '12:00');
6cc0: 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  "..  sql execute
6cd0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
6ce0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
6cf0: 45 53 28 36 2c 20 27 31 32 2f 31 36 2f 32 30 30  ES(6, '12/16/200
6d00: 39 20 31 32 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20  9 12:00');".... 
6d10: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6d20: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
6d30: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 37   (x, y) VALUES(7
6d40: 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20  , ?);" \..      
6d50: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74  [list param1 Dat
6d60: 65 54 69 6d 65 20 22 57 65 64 6e 65 73 64 61 79  eTime "Wednesday
6d70: 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30  , 16 December 20
6d80: 30 39 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  09"]....  sql ex
6d90: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
6da0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
6db0: 20 56 41 4c 55 45 53 28 38 2c 20 3f 29 3b 22 20   VALUES(8, ?);" 
6dc0: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
6dd0: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31  aram1 DateTime 1
6de0: 32 3a 30 30 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71  2:00:00]....  sq
6df0: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
6e00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6e10: 2c 20 79 29 20 56 41 4c 55 45 53 28 39 2c 20 3f  , y) VALUES(9, ?
6e20: 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69  );" \..      [li
6e30: 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69  st param1 DateTi
6e40: 6d 65 20 22 57 65 64 6e 65 73 64 61 79 2c 20 31  me "Wednesday, 1
6e50: 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39 20  6 December 2009 
6e60: 31 32 3a 30 30 3a 30 30 22 5d 0d 0a 0d 0a 20 20  12:00:00"]....  
6e70: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
6e80: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
6e90: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 30  (x, y) VALUES(10
6ea0: 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20  , ?);" \..      
6eb0: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74  [list param1 Dat
6ec0: 65 54 69 6d 65 20 31 32 2f 31 36 2f 32 30 30 39  eTime 12/16/2009
6ed0: 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  ]....  sql execu
6ee0: 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
6ef0: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
6f00: 4c 55 45 53 28 31 31 2c 20 3f 29 3b 22 20 5c 0d  LUES(11, ?);" \.
6f10: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
6f20: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 32 3a  am1 DateTime 12:
6f30: 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  00]....  sql exe
6f40: 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
6f50: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
6f60: 56 41 4c 55 45 53 28 31 32 2c 20 3f 29 3b 22 20  VALUES(12, ?);" 
6f70: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
6f80: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 22  aram1 DateTime "
6f90: 31 32 2f 31 36 2f 32 30 30 39 20 31 32 3a 30 30  12/16/2009 12:00
6fa0: 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  "]....  sql exec
6fb0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
6fc0: 64 65 72 20 2d 64 61 74 65 74 69 6d 65 66 6f 72  der -datetimefor
6fd0: 6d 61 74 20 5b 67 65 74 44 61 74 65 54 69 6d 65  mat [getDateTime
6fe0: 46 6f 72 6d 61 74 5d 20 24 64 62 20 5c 0d 0a 20  Format] $db \.. 
6ff0: 20 20 20 20 20 22 53 45 4c 45 43 54 20 78 2c 20       "SELECT x, 
7000: 43 41 53 54 28 79 20 41 53 20 54 45 58 54 29 20  CAST(y AS TEXT) 
7010: 41 53 20 79 32 20 46 52 4f 4d 20 74 31 20 4f 52  AS y2 FROM t1 OR
7020: 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d 0a 20 20  DER BY x;"....  
7030: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73  foreach name [ls
7040: 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72  ort -integer [ar
7050: 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d  ray names rows -
7060: 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d  regexp {^\d+$}]]
7070: 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
7080: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61  result [list $na
7090: 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d  me $rows($name)]
70a0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72  ..  }....  set r
70b0: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
70c0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
70d0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
70e0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
70f0: 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73 75  n name rows resu
7100: 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  lt db fileName..
7110: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
7120: 0d 0a 7b 65 61 67 6c 65 20 63 75 6c 74 75 72 65  ..{eagle culture
7130: 2e 69 6e 76 61 72 69 61 6e 74 20 6d 6f 6e 6f 42  .invariant monoB
7140: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
7150: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
7160: 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61  Lite\..System.Da
7170: 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
7180: 6c 74 20 5b 73 75 62 73 74 20 7b 7b 31 20 7b 7b  lt [subst {{1 {{
7190: 78 20 31 7d 20 7b 79 32 20 7b 57 65 64 6e 65 73  x 1} {y2 {Wednes
71a0: 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65 72  day, 16 December
71b0: 5c 0d 0a 32 30 30 39 7d 7d 7d 7d 20 7b 32 20 7b  \..2009}}}} {2 {
71c0: 7b 78 20 32 7d 20 7b 79 32 20 31 32 3a 30 30 3a  {x 2} {y2 12:00:
71d0: 30 30 7d 7d 7d 20 7b 33 20 7b 7b 78 20 33 7d 20  00}}} {3 {{x 3} 
71e0: 7b 79 32 20 7b 57 65 64 6e 65 73 64 61 79 2c 20  {y2 {Wednesday, 
71f0: 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39  16 December 2009
7200: 5c 0d 0a 31 32 3a 30 30 3a 30 30 7d 7d 7d 7d 20  \..12:00:00}}}} 
7210: 7b 34 20 7b 7b 78 20 34 7d 20 7b 79 32 20 31 32  {4 {{x 4} {y2 12
7220: 2f 31 36 2f 32 30 30 39 7d 7d 7d 20 7b 35 20 7b  /16/2009}}} {5 {
7230: 7b 78 20 35 7d 20 7b 79 32 20 31 32 3a 30 30 7d  {x 5} {y2 12:00}
7240: 7d 7d 20 7b 36 20 7b 7b 78 20 36 7d 20 7b 79 32  }} {6 {{x 6} {y2
7250: 5c 0d 0a 7b 31 32 2f 31 36 2f 32 30 30 39 20 31  \..{12/16/2009 1
7260: 32 3a 30 30 7d 7d 7d 7d 20 7b 37 20 7b 7b 78 20  2:00}}}} {7 {{x 
7270: 37 7d 20 7b 79 32 20 32 30 30 39 2d 31 32 2d 31  7} {y2 2009-12-1
7280: 36 54 30 30 3a 30 30 3a 30 30 2e 30 30 30 30 30  6T00:00:00.00000
7290: 30 30 5a 7d 7d 7d 20 7b 38 20 7b 7b 78 20 38 7d  00Z}}} {8 {{x 8}
72a0: 5c 0d 0a 7b 79 32 20 24 7b 64 61 74 65 7d 54 31  \..{y2 ${date}T1
72b0: 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a  2:00:00.0000000Z
72c0: 7d 7d 7d 20 7b 39 20 7b 7b 78 20 39 7d 20 7b 79  }}} {9 {{x 9} {y
72d0: 32 20 32 30 30 39 2d 31 32 2d 31 36 54 31 32 3a  2 2009-12-16T12:
72e0: 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d  00:00.0000000Z}}
72f0: 7d 5c 0d 0a 7b 31 30 20 7b 7b 78 20 31 30 7d 20  }\..{10 {{x 10} 
7300: 7b 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54 30  {y2 2009-12-16T0
7310: 30 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a  0:00:00.0000000Z
7320: 7d 7d 7d 20 7b 31 31 20 7b 7b 78 20 31 31 7d 20  }}} {11 {{x 11} 
7330: 7b 79 32 5c 0d 0a 24 7b 64 61 74 65 7d 54 31 32  {y2\..${date}T12
7340: 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d  :00:00.0000000Z}
7350: 7d 7d 20 7b 31 32 20 7b 7b 78 20 31 32 7d 20 7b  }} {12 {{x 12} {
7360: 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54 31 32  y2 2009-12-16T12
7370: 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d  :00:00.0000000Z}
7380: 7d 7d 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }}}]}....#######
7390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
73d0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 75 6e 73 65  ########....unse
73e0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61  t -nocomplain da
73f0: 74 65 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  te....##########
7400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7440: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
7450: 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 31 36   {test data-1.16
7460: 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   {SQLiteConnecti
7470: 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20  onStringBuilder 
7480: 44 61 74 65 54 69 6d 65 7d 20 2d 62 6f 64 79 20  DateTime} -body 
7490: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
74a0: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
74b0: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
74c0: 20 4e 65 78 74 49 64 5d 0d 0a 0d 0a 20 20 75 6e   NextId]....  un
74d0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
74e0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
74f0: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
7500: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
7510: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
7520: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
7530: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
7540: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
7550: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
7560: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
7570: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
7580: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
7590: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
75a0: 69 63 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e  ic string GetCon
75b0: 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 28 0d 0a  nectionString(..
75c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
75d0: 20 66 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20   format,..      
75e0: 20 20 20 20 73 74 72 69 6e 67 20 6b 69 6e 64 2c      string kind,
75f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
7600: 6e 67 20 66 6f 72 6d 61 74 53 74 72 69 6e 67 0d  ng formatString.
7610: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
7620: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7630: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
7640: 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ionStringBuilder
7650: 20 62 75 69 6c 64 65 72 20 3d 0d 0a 20 20 20 20   builder =..    
7660: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 51            new SQ
7670: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74  LiteConnectionSt
7680: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
7690: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 75 69 6c  ..          buil
76a0: 64 65 72 2e 41 64 64 28 22 44 61 74 61 20 53 6f  der.Add("Data So
76b0: 75 72 63 65 22 2c 20 22 74 65 73 74 2e 64 62 22  urce", "test.db"
76c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 75  );..          bu
76d0: 69 6c 64 65 72 2e 41 64 64 28 22 44 61 74 65 54  ilder.Add("DateT
76e0: 69 6d 65 46 6f 72 6d 61 74 22 2c 20 66 6f 72 6d  imeFormat", form
76f0: 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  at);..          
7700: 62 75 69 6c 64 65 72 2e 41 64 64 28 22 44 61 74  builder.Add("Dat
7710: 65 54 69 6d 65 4b 69 6e 64 22 2c 20 6b 69 6e 64  eTimeKind", kind
7720: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 75  );..          bu
7730: 69 6c 64 65 72 2e 41 64 64 28 22 44 61 74 65 54  ilder.Add("DateT
7740: 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 22  imeFormatString"
7750: 2c 20 66 6f 72 6d 61 74 53 74 72 69 6e 67 29 3b  , formatString);
7760: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
7770: 74 75 72 6e 20 62 75 69 6c 64 65 72 2e 54 6f 53  turn builder.ToS
7780: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
7790: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
77f0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
7800: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
7810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7820: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
7830: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7840: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
7850: 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65  ] true true true
7860: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
7870: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7880: 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73  te.dll]....  lis
7890: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
78a0: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
78b0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
78c0: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
78d0: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
78e0: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
78f0: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
7900: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
7910: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
7920: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
7930: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  etConnectionStri
7940: 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng \..          
7950: 20 20 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c    null null null
7960: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
7970: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
7980: 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d  ""]}] $result \.
7990: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
79a0: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
79b0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
79c0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
79d0: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
79e0: 24 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63 74  ${id} GetConnect
79f0: 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20  ionString \..   
7a00: 20 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74           Default
7a10: 20 6e 75 6c 6c 20 6e 75 6c 6c 0d 0a 20 20 20 20   null null..    
7a20: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
7a30: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
7a40: 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20  $result \..     
7a50: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
7a60: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
7a70: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
7a80: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
7a90: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
7aa0: 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72  GetConnectionStr
7ab0: 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ing \..         
7ac0: 20 20 20 6e 75 6c 6c 20 55 6e 73 70 65 63 69 66     null Unspecif
7ad0: 69 65 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ied null..      
7ae0: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
7af0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
7b00: 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b  esult \..      [
7b10: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
7b20: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
7b30: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
7b40: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
7b50: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
7b60: 74 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  tConnectionStrin
7b70: 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g \..           
7b80: 20 49 53 4f 38 36 30 31 20 55 74 63 20 6e 75 6c   ISO8601 Utc nul
7b90: 6c 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  l..      } resul
7ba0: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
7bb0: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c   ""]}] $result \
7bc0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
7bd0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
7be0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
7bf0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
7c00: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
7c10: 74 24 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63  t${id} GetConnec
7c20: 74 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20  tionString \..  
7c30: 20 20 20 20 20 20 20 20 20 20 54 69 63 6b 73 20            Ticks 
7c40: 4c 6f 63 61 6c 20 79 79 79 79 2d 4d 4d 2d 64 64  Local yyyy-MM-dd
7c50: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
7c60: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
7c70: 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d  ""]}] $result..}
7c80: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75   -cleanup {..  u
7c90: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
7ca0: 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20   result results 
7cb0: 65 72 72 6f 72 73 20 63 6f 64 65 20 69 64 0d 0a  errors code id..
7cc0: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
7cd0: 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20  eagle monoBug28 
7ce0: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
7cf0: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c  ile.DATA SQLite\
7d00: 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  ..System.Data.SQ
7d10: 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61  Lite compileCSha
7d20: 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78  rp} -match regex
7d30: 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  p -result {^Ok\.
7d40: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
7d50: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
7d60: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
7d70: 7d 20 30 20 5c 7b 44 61 74 61 20 53 6f 75 72 63  } 0 \{Data Sourc
7d80: 65 3d 74 65 73 74 5c 2e 64 62 5c 7d 20 30 5c 0d  e=test\.db\} 0\.
7d90: 0a 5c 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 74  .\{Data Source=t
7da0: 65 73 74 5c 2e 64 62 3b 44 61 74 65 54 69 6d 65  est\.db;DateTime
7db0: 46 6f 72 6d 61 74 3d 28 3f 3a 44 65 66 61 75 6c  Format=(?:Defaul
7dc0: 74 7c 49 53 4f 38 36 30 31 29 5c 7d 20 30 20 5c  t|ISO8601)\} 0 \
7dd0: 7b 44 61 74 61 5c 0d 0a 53 6f 75 72 63 65 3d 74  {Data\..Source=t
7de0: 65 73 74 5c 2e 64 62 3b 44 61 74 65 54 69 6d 65  est\.db;DateTime
7df0: 4b 69 6e 64 3d 55 6e 73 70 65 63 69 66 69 65 64  Kind=Unspecified
7e00: 5c 7d 20 30 20 5c 7b 44 61 74 61 5c 0d 0a 53 6f  \} 0 \{Data\..So
7e10: 75 72 63 65 3d 74 65 73 74 5c 2e 64 62 3b 44 61  urce=test\.db;Da
7e20: 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 28 3f 3a  teTimeFormat=(?:
7e30: 44 65 66 61 75 6c 74 7c 49 53 4f 38 36 30 31 29  Default|ISO8601)
7e40: 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 55 74  ;DateTimeKind=Ut
7e50: 63 5c 7d 20 30 20 5c 7b 44 61 74 61 5c 0d 0a 53  c\} 0 \{Data\..S
7e60: 6f 75 72 63 65 3d 74 65 73 74 5c 2e 64 62 3b 44  ource=test\.db;D
7e70: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 54 69  ateTimeFormat=Ti
7e80: 63 6b 73 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64  cks;DateTimeKind
7e90: 3d 4c 6f 63 61 6c 3b 44 61 74 65 54 69 6d 65 46  =Local;DateTimeF
7ea0: 6f 72 6d 61 74 53 74 72 69 6e 67 3d 79 79 79 79  ormatString=yyyy
7eb0: 2d 4d 4d 2d 64 64 5c 7d 24 7d 7d 0d 0a 0d 0a 23  -MM-dd\}$}}....#
7ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7f00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
7f10: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
7f20: 64 61 74 61 2d 31 2e 31 37 20 7b 53 51 4c 69 74  data-1.17 {SQLit
7f30: 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  eConnectionStrin
7f40: 67 42 75 69 6c 64 65 72 20 70 72 6f 70 65 72 74  gBuilder propert
7f50: 69 65 73 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ies} -body {..  
7f60: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
7f70: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
7f80: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
7f90: 49 64 5d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  Id]....  unset -
7fa0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
7fb0: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
7fc0: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
7fd0: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
7fe0: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
7ff0: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
8000: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
8010: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
8020: 20 53 79 73 74 65 6d 2e 52 65 66 6c 65 63 74 69   System.Reflecti
8030: 6f 6e 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  on;..    using S
8040: 79 73 74 65 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 20  ystem.Text;.... 
8050: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
8060: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
8070: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
8080: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73  static class Tes
8090: 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d  t${id}..      {.
80a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
80b0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54   static string T
80c0: 6f 48 65 78 53 74 72 69 6e 67 28 0d 0a 20 20 20  oHexString(..   
80d0: 20 20 20 20 20 20 20 62 79 74 65 5c 5b 5c 5d 20         byte\[\] 
80e0: 61 72 72 61 79 0d 0a 20 20 20 20 20 20 20 20 20  array..         
80f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
8100: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72           if (arr
8110: 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ay == null)..   
8120: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8130: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
8140: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
8150: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
8160: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
8170: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
8180: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
8190: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
81a0: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
81b0: 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
81c0: 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
81d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
81e0: 73 75 6c 74 2e 41 70 70 65 6e 64 46 6f 72 6d 61  sult.AppendForma
81f0: 74 28 22 7b 30 3a 78 32 7d 22 2c 20 61 72 72 61  t("{0:x2}", arra
8200: 79 5c 5b 69 6e 64 65 78 5c 5d 29 3b 0d 0a 0d 0a  y\[index\]);....
8210: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8220: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
8230: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ();..        }..
8240: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8290: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
82a0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
82b0: 67 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53  g GetConnectionS
82c0: 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
82d0: 20 20 73 74 72 69 6e 67 20 6b 65 79 2c 0d 0a 20    string key,.. 
82e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
82f0: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
8300: 20 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74    string propert
8310: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
8320: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
8330: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
8340: 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42  onnectionStringB
8350: 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72 20 3d  uilder builder =
8360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8370: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
8380: 74 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65  tionStringBuilde
8390: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
83a0: 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c    if (key != nul
83b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
83c0: 62 75 69 6c 64 65 72 2e 41 64 64 28 6b 65 79 2c  builder.Add(key,
83d0: 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20   value);....    
83e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 70 72 6f        object pro
83f0: 70 65 72 74 79 56 61 6c 75 65 20 3d 20 6e 75 6c  pertyValue = nul
8400: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
8410: 69 66 20 28 70 72 6f 70 65 72 74 79 4e 61 6d 65  if (propertyName
8420: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8430: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8440: 20 20 20 20 70 72 6f 70 65 72 74 79 56 61 6c 75      propertyValu
8450: 65 20 3d 20 74 79 70 65 6f 66 28 53 51 4c 69 74  e = typeof(SQLit
8460: 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  eConnectionStrin
8470: 67 42 75 69 6c 64 65 72 29 2e 49 6e 76 6f 6b 65  gBuilder).Invoke
8480: 4d 65 6d 62 65 72 28 0d 0a 20 20 20 20 20 20 20  Member(..       
8490: 20 20 20 20 20 20 20 20 20 70 72 6f 70 65 72 74           propert
84a0: 79 4e 61 6d 65 2c 20 42 69 6e 64 69 6e 67 46 6c  yName, BindingFl
84b0: 61 67 73 2e 49 6e 73 74 61 6e 63 65 20 7c 20 42  ags.Instance | B
84c0: 69 6e 64 69 6e 67 46 6c 61 67 73 2e 50 75 62 6c  indingFlags.Publ
84d0: 69 63 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic |..          
84e0: 20 20 20 20 20 20 42 69 6e 64 69 6e 67 46 6c 61        BindingFla
84f0: 67 73 2e 47 65 74 50 72 6f 70 65 72 74 79 2c 20  gs.GetProperty, 
8500: 6e 75 6c 6c 2c 20 62 75 69 6c 64 65 72 2c 20 6e  null, builder, n
8510: 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull);..         
8520: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8530: 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
8540: 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c  rmat("{0}, {1}",
8550: 20 28 70 72 6f 70 65 72 74 79 56 61 6c 75 65 20   (propertyValue 
8560: 69 73 20 62 79 74 65 5c 5b 5c 5d 29 20 3f 0d 0a  is byte\[\]) ?..
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
8580: 48 65 78 53 74 72 69 6e 67 28 28 62 79 74 65 5c  HexString((byte\
8590: 5b 5c 5d 29 70 72 6f 70 65 72 74 79 56 61 6c 75  [\])propertyValu
85a0: 65 29 20 3a 20 70 72 6f 70 65 72 74 79 56 61 6c  e) : propertyVal
85b0: 75 65 2c 20 62 75 69 6c 64 65 72 29 3b 0d 0a 20  ue, builder);.. 
85c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
85d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8620: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
8630: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
8640: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8650: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8660: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
8670: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
8680: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65  ..  }] true true
8690: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
86a0: 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
86b0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
86c0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
86d0: 73 20 24 63 6f 64 65 20 5b 65 78 70 72 20 7b 5b  s $code [expr {[
86e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
86f0: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
8700: 22 22 7d 5d 0d 0a 0d 0a 20 20 69 66 20 7b 24 63  ""}]....  if {$c
8710: 6f 64 65 20 65 71 20 22 4f 6b 22 7d 20 74 68 65  ode eq "Ok"} the
8720: 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 6b 65 79  n {..    set key
8730: 73 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 56 65 72  s [list null Ver
8740: 73 69 6f 6e 20 53 79 6e 63 68 72 6f 6e 6f 75 73  sion Synchronous
8750: 20 55 73 65 55 54 46 31 36 45 6e 63 6f 64 69 6e   UseUTF16Encodin
8760: 67 20 50 6f 6f 6c 69 6e 67 20 5c 0d 0a 20 20 20  g Pooling \..   
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8780: 42 69 6e 61 72 79 47 55 49 44 20 22 44 61 74 61  BinaryGUID "Data
8790: 20 53 6f 75 72 63 65 22 20 55 72 69 20 46 75 6c   Source" Uri Ful
87a0: 6c 55 72 69 20 22 44 65 66 61 75 6c 74 20 54 69  lUri "Default Ti
87b0: 6d 65 6f 75 74 22 20 5c 0d 0a 20 20 20 20 20 20  meout" \..      
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 6c               Enl
87d0: 69 73 74 20 46 61 69 6c 49 66 4d 69 73 73 69 6e  ist FailIfMissin
87e0: 67 20 22 4c 65 67 61 63 79 20 46 6f 72 6d 61 74  g "Legacy Format
87f0: 22 20 22 52 65 61 64 20 4f 6e 6c 79 22 20 5c 0d  " "Read Only" \.
8800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8810: 20 20 20 20 50 61 73 73 77 6f 72 64 20 22 50 61      Password "Pa
8820: 67 65 20 53 69 7a 65 22 20 22 4d 61 78 20 50 61  ge Size" "Max Pa
8830: 67 65 20 43 6f 75 6e 74 22 20 22 43 61 63 68 65  ge Count" "Cache
8840: 20 53 69 7a 65 22 20 5c 0d 0a 20 20 20 20 20 20   Size" \..      
8850: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74               Dat
8860: 65 54 69 6d 65 46 6f 72 6d 61 74 20 44 61 74 65  eTimeFormat Date
8870: 54 69 6d 65 4b 69 6e 64 20 44 61 74 65 54 69 6d  TimeKind DateTim
8880: 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 5c 0d  eFormatString \.
8890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
88a0: 20 20 20 20 42 61 73 65 53 63 68 65 6d 61 4e 61      BaseSchemaNa
88b0: 6d 65 20 22 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65  me "Journal Mode
88c0: 22 20 22 44 65 66 61 75 6c 74 20 49 73 6f 6c 61  " "Default Isola
88d0: 74 69 6f 6e 4c 65 76 65 6c 22 20 5c 0d 0a 20 20  tionLevel" \..  
88e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88f0: 20 22 46 6f 72 65 69 67 6e 20 4b 65 79 73 22 20   "Foreign Keys" 
8900: 46 6c 61 67 73 20 53 65 74 44 65 66 61 75 6c 74  Flags SetDefault
8910: 73 20 54 6f 46 75 6c 6c 50 61 74 68 20 48 65 78  s ToFullPath Hex
8920: 50 61 73 73 77 6f 72 64 20 5c 0d 0a 20 20 20 20  Password \..    
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
8940: 65 66 61 75 6c 74 44 62 54 79 70 65 20 44 65 66  efaultDbType Def
8950: 61 75 6c 74 54 79 70 65 4e 61 6d 65 20 4e 6f 53  aultTypeName NoS
8960: 68 61 72 65 64 46 6c 61 67 73 5d 0d 0a 0d 0a 20  haredFlags].... 
8970: 20 20 20 73 65 74 20 76 61 6c 75 65 73 20 5b 6c     set values [l
8980: 69 73 74 20 6e 75 6c 6c 20 33 20 4e 6f 72 6d 61  ist null 3 Norma
8990: 6c 20 54 72 75 65 20 46 61 6c 73 65 20 5c 0d 0a  l True False \..
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89b0: 20 20 20 20 20 54 72 75 65 20 74 65 73 74 2e 64       True test.d
89c0: 62 20 74 65 73 74 2e 64 62 20 66 69 6c 65 3a 74  b test.db file:t
89d0: 65 73 74 2e 64 62 20 36 30 20 5c 0d 0a 20 20 20  est.db 60 \..   
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89f0: 20 20 46 61 6c 73 65 20 54 72 75 65 20 46 61 6c    False True Fal
8a00: 73 65 20 54 72 75 65 20 5c 0d 0a 20 20 20 20 20  se True \..     
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a20: 73 65 63 72 65 74 20 34 30 39 36 20 31 30 32 34  secret 4096 1024
8a30: 20 38 31 39 32 20 5c 0d 0a 20 20 20 20 20 20 20   8192 \..       
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
8a50: 69 78 45 70 6f 63 68 20 55 74 63 20 79 79 79 79  ixEpoch Utc yyyy
8a60: 2d 4d 4d 2d 64 64 20 73 71 6c 69 74 65 5f 73 63  -MM-dd sqlite_sc
8a70: 68 65 6d 61 20 5c 0d 0a 20 20 20 20 20 20 20 20  hema \..        
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 6d               Mem
8a90: 6f 72 79 20 53 65 72 69 61 6c 69 7a 61 62 6c 65  ory Serializable
8aa0: 20 46 61 6c 73 65 20 5c 0d 0a 20 20 20 20 20 20   False \..      
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
8ac0: 65 66 61 75 6c 74 20 46 61 6c 73 65 20 46 61 6c  efault False Fal
8ad0: 73 65 20 37 33 36 35 36 33 37 32 36 35 37 34 20  se 736563726574 
8ae0: 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20  String \..      
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
8b00: 45 58 54 20 54 72 75 65 5d 0d 0a 0d 0a 20 20 20  EXT True]....   
8b10: 20 73 65 74 20 70 72 6f 70 65 72 74 79 4e 61 6d   set propertyNam
8b20: 65 73 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 56 65  es [list null Ve
8b30: 72 73 69 6f 6e 20 53 79 6e 63 4d 6f 64 65 20 55  rsion SyncMode U
8b40: 73 65 55 54 46 31 36 45 6e 63 6f 64 69 6e 67 20  seUTF16Encoding 
8b50: 50 6f 6f 6c 69 6e 67 20 5c 0d 0a 20 20 20 20 20  Pooling \..     
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b70: 20 20 20 20 20 20 20 42 69 6e 61 72 79 47 55 49         BinaryGUI
8b80: 44 20 44 61 74 61 53 6f 75 72 63 65 20 55 72 69  D DataSource Uri
8b90: 20 46 75 6c 6c 55 72 69 20 44 65 66 61 75 6c 74   FullUri Default
8ba0: 54 69 6d 65 6f 75 74 20 5c 0d 0a 20 20 20 20 20  Timeout \..     
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bc0: 20 20 20 20 20 20 20 45 6e 6c 69 73 74 20 46 61         Enlist Fa
8bd0: 69 6c 49 66 4d 69 73 73 69 6e 67 20 4c 65 67 61  ilIfMissing Lega
8be0: 63 79 46 6f 72 6d 61 74 20 52 65 61 64 4f 6e 6c  cyFormat ReadOnl
8bf0: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..           
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c10: 20 50 61 73 73 77 6f 72 64 20 50 61 67 65 53 69   Password PageSi
8c20: 7a 65 20 4d 61 78 50 61 67 65 43 6f 75 6e 74 20  ze MaxPageCount 
8c30: 43 61 63 68 65 53 69 7a 65 20 5c 0d 0a 20 20 20  CacheSize \..   
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c50: 20 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d           DateTim
8c60: 65 46 6f 72 6d 61 74 20 44 61 74 65 54 69 6d 65  eFormat DateTime
8c70: 4b 69 6e 64 20 44 61 74 65 54 69 6d 65 46 6f 72  Kind DateTimeFor
8c80: 6d 61 74 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20  matString \..   
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ca0: 20 20 20 20 20 20 20 20 20 42 61 73 65 53 63 68           BaseSch
8cb0: 65 6d 61 4e 61 6d 65 20 4a 6f 75 72 6e 61 6c 4d  emaName JournalM
8cc0: 6f 64 65 20 44 65 66 61 75 6c 74 49 73 6f 6c 61  ode DefaultIsola
8cd0: 74 69 6f 6e 4c 65 76 65 6c 20 5c 0d 0a 20 20 20  tionLevel \..   
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cf0: 20 20 20 20 20 20 20 20 20 46 6f 72 65 69 67 6e           Foreign
8d00: 4b 65 79 73 20 46 6c 61 67 73 20 53 65 74 44 65  Keys Flags SetDe
8d10: 66 61 75 6c 74 73 20 54 6f 46 75 6c 6c 50 61 74  faults ToFullPat
8d20: 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h \..           
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d40: 20 48 65 78 50 61 73 73 77 6f 72 64 20 44 65 66   HexPassword Def
8d50: 61 75 6c 74 44 62 54 79 70 65 20 44 65 66 61 75  aultDbType Defau
8d60: 6c 74 54 79 70 65 4e 61 6d 65 20 5c 0d 0a 20 20  ltTypeName \..  
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d80: 20 20 20 20 20 20 20 20 20 20 4e 6f 53 68 61 72            NoShar
8d90: 65 64 46 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20  edFlags]....    
8da0: 66 6f 72 65 61 63 68 20 6b 65 79 20 24 6b 65 79  foreach key $key
8db0: 73 20 76 61 6c 75 65 20 24 76 61 6c 75 65 73 20  s value $values 
8dc0: 70 72 6f 70 65 72 74 79 4e 61 6d 65 20 24 70 72  propertyName $pr
8dd0: 6f 70 65 72 74 79 4e 61 6d 65 73 20 7b 0d 0a 20  opertyNames {.. 
8de0: 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63       set code [c
8df0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
8e00: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
8e10: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
8e20: 24 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63 74  ${id} GetConnect
8e30: 69 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20  ionString \..   
8e40: 20 20 20 20 20 20 20 20 20 24 6b 65 79 20 24 76           $key $v
8e50: 61 6c 75 65 20 24 70 72 6f 70 65 72 74 79 4e 61  alue $propertyNa
8e60: 6d 65 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  me..      } resu
8e70: 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 6c 61 70  lt]....      lap
8e80: 70 65 6e 64 20 72 65 73 75 6c 74 73 20 24 63 6f  pend results $co
8e90: 64 65 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  de $result..    
8ea0: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  }..  }....  set 
8eb0: 72 65 73 75 6c 74 73 0d 0a 7d 20 2d 63 6c 65 61  results..} -clea
8ec0: 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d  nup {..  unset -
8ed0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65  nocomplain prope
8ee0: 72 74 79 4e 61 6d 65 20 70 72 6f 70 65 72 74 79  rtyName property
8ef0: 4e 61 6d 65 73 20 76 61 6c 75 65 20 6b 65 79 20  Names value key 
8f00: 76 61 6c 75 65 73 20 6b 65 79 73 20 72 65 73 75  values keys resu
8f10: 6c 74 20 5c 0d 0a 20 20 20 20 20 20 72 65 73 75  lt \..      resu
8f20: 6c 74 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20  lts errors code 
8f30: 69 64 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  id..} -constrain
8f40: 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  ts {eagle monoBu
8f50: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
8f60: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
8f70: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
8f80: 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65  a.SQLite compile
8f90: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72  CSharp} -match r
8fa0: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d  egexp -result \.
8fb0: 0a 7b 5e 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  .{^System#CodeDo
8fc0: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
8fd0: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 4f  lerResults#\d+ O
8fe0: 6b 20 5c 7b 5c 7d 20 30 20 5c 7b 2c 20 5c 7d 20  k \{\} 0 \{, \} 
8ff0: 30 20 5c 7b 33 2c 5c 0d 0a 56 65 72 73 69 6f 6e  0 \{3,\..Version
9000: 3d 33 5c 7d 20 30 20 5c 7b 4e 6f 72 6d 61 6c 2c  =3\} 0 \{Normal,
9010: 20 53 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 6f 72   Synchronous=Nor
9020: 6d 61 6c 5c 7d 20 30 20 5c 7b 54 72 75 65 2c 20  mal\} 0 \{True, 
9030: 55 73 65 55 54 46 31 36 45 6e 63 6f 64 69 6e 67  UseUTF16Encoding
9040: 3d 54 72 75 65 5c 7d 5c 0d 0a 30 20 5c 7b 46 61  =True\}\..0 \{Fa
9050: 6c 73 65 2c 20 50 6f 6f 6c 69 6e 67 3d 46 61 6c  lse, Pooling=Fal
9060: 73 65 5c 7d 20 30 20 5c 7b 54 72 75 65 2c 20 42  se\} 0 \{True, B
9070: 69 6e 61 72 79 47 55 49 44 3d 54 72 75 65 5c 7d  inaryGUID=True\}
9080: 20 30 20 5c 7b 74 65 73 74 5c 2e 64 62 2c 20 44   0 \{test\.db, D
9090: 61 74 61 5c 0d 0a 53 6f 75 72 63 65 3d 74 65 73  ata\..Source=tes
90a0: 74 5c 2e 64 62 5c 7d 20 30 20 5c 7b 74 65 73 74  t\.db\} 0 \{test
90b0: 5c 2e 64 62 2c 20 55 72 69 3d 74 65 73 74 5c 2e  \.db, Uri=test\.
90c0: 64 62 5c 7d 20 30 20 5c 7b 66 69 6c 65 3a 74 65  db\} 0 \{file:te
90d0: 73 74 2e 64 62 2c 5c 0d 0a 46 75 6c 6c 55 72 69  st.db,\..FullUri
90e0: 3d 66 69 6c 65 3a 74 65 73 74 5c 2e 64 62 5c 7d  =file:test\.db\}
90f0: 20 30 20 5c 7b 36 30 2c 20 44 65 66 61 75 6c 74   0 \{60, Default
9100: 20 54 69 6d 65 6f 75 74 3d 36 30 5c 7d 20 30 20   Timeout=60\} 0 
9110: 5c 7b 46 61 6c 73 65 2c 20 45 6e 6c 69 73 74 3d  \{False, Enlist=
9120: 46 61 6c 73 65 5c 7d 5c 0d 0a 30 20 5c 7b 54 72  False\}\..0 \{Tr
9130: 75 65 2c 20 46 61 69 6c 49 66 4d 69 73 73 69 6e  ue, FailIfMissin
9140: 67 3d 54 72 75 65 5c 7d 20 30 20 5c 7b 46 61 6c  g=True\} 0 \{Fal
9150: 73 65 2c 20 4c 65 67 61 63 79 20 46 6f 72 6d 61  se, Legacy Forma
9160: 74 3d 46 61 6c 73 65 5c 7d 20 30 20 5c 7b 54 72  t=False\} 0 \{Tr
9170: 75 65 2c 20 52 65 61 64 5c 0d 0a 4f 6e 6c 79 3d  ue, Read\..Only=
9180: 54 72 75 65 5c 7d 20 30 20 5c 7b 73 65 63 72 65  True\} 0 \{secre
9190: 74 2c 20 50 61 73 73 77 6f 72 64 3d 73 65 63 72  t, Password=secr
91a0: 65 74 5c 7d 20 30 20 5c 7b 34 30 39 36 2c 20 50  et\} 0 \{4096, P
91b0: 61 67 65 20 53 69 7a 65 3d 34 30 39 36 5c 7d 20  age Size=4096\} 
91c0: 30 20 5c 7b 31 30 32 34 2c 5c 0d 0a 4d 61 78 20  0 \{1024,\..Max 
91d0: 50 61 67 65 20 43 6f 75 6e 74 3d 31 30 32 34 5c  Page Count=1024\
91e0: 7d 20 30 20 5c 7b 38 31 39 32 2c 20 43 61 63 68  } 0 \{8192, Cach
91f0: 65 20 53 69 7a 65 3d 38 31 39 32 5c 7d 20 30 20  e Size=8192\} 0 
9200: 5c 7b 55 6e 69 78 45 70 6f 63 68 2c 5c 0d 0a 44  \{UnixEpoch,\..D
9210: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 55 6e  ateTimeFormat=Un
9220: 69 78 45 70 6f 63 68 5c 7d 20 30 20 5c 7b 55 74  ixEpoch\} 0 \{Ut
9230: 63 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d  c, DateTimeKind=
9240: 55 74 63 5c 7d 20 30 20 5c 7b 79 79 79 79 2d 4d  Utc\} 0 \{yyyy-M
9250: 4d 2d 64 64 2c 5c 0d 0a 44 61 74 65 54 69 6d 65  M-dd,\..DateTime
9260: 46 6f 72 6d 61 74 53 74 72 69 6e 67 3d 79 79 79  FormatString=yyy
9270: 79 2d 4d 4d 2d 64 64 5c 7d 20 30 20 5c 7b 73 71  y-MM-dd\} 0 \{sq
9280: 6c 69 74 65 5f 73 63 68 65 6d 61 2c 5c 0d 0a 42  lite_schema,\..B
9290: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 3d 73 71  aseSchemaName=sq
92a0: 6c 69 74 65 5f 73 63 68 65 6d 61 5c 7d 20 30 20  lite_schema\} 0 
92b0: 5c 7b 4d 65 6d 6f 72 79 2c 20 4a 6f 75 72 6e 61  \{Memory, Journa
92c0: 6c 20 4d 6f 64 65 3d 4d 65 6d 6f 72 79 5c 7d 20  l Mode=Memory\} 
92d0: 30 5c 0d 0a 5c 7b 53 65 72 69 61 6c 69 7a 61 62  0\..\{Serializab
92e0: 6c 65 2c 20 44 65 66 61 75 6c 74 20 49 73 6f 6c  le, Default Isol
92f0: 61 74 69 6f 6e 4c 65 76 65 6c 3d 53 65 72 69 61  ationLevel=Seria
9300: 6c 69 7a 61 62 6c 65 5c 7d 20 30 20 5c 7b 46 61  lizable\} 0 \{Fa
9310: 6c 73 65 2c 20 46 6f 72 65 69 67 6e 5c 0d 0a 4b  lse, Foreign\..K
9320: 65 79 73 3d 46 61 6c 73 65 5c 7d 20 30 20 5c 7b  eys=False\} 0 \{
9330: 28 3f 3a 44 65 66 61 75 6c 74 7c 4c 6f 67 43 61  (?:Default|LogCa
9340: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29  llbackException)
9350: 2c 5c 0d 0a 46 6c 61 67 73 3d 28 3f 3a 44 65 66  ,\..Flags=(?:Def
9360: 61 75 6c 74 7c 4c 6f 67 43 61 6c 6c 62 61 63 6b  ault|LogCallback
9370: 45 78 63 65 70 74 69 6f 6e 29 5c 7d 20 30 20 5c  Exception)\} 0 \
9380: 7b 46 61 6c 73 65 2c 20 53 65 74 44 65 66 61 75  {False, SetDefau
9390: 6c 74 73 3d 46 61 6c 73 65 5c 7d 20 30 5c 0d 0a  lts=False\} 0\..
93a0: 5c 7b 46 61 6c 73 65 2c 20 54 6f 46 75 6c 6c 50  \{False, ToFullP
93b0: 61 74 68 3d 46 61 6c 73 65 5c 7d 20 30 20 7b 37  ath=False\} 0 {7
93c0: 33 36 35 36 33 37 32 36 35 37 34 2c 20 48 65 78  36563726574, Hex
93d0: 50 61 73 73 77 6f 72 64 3d 37 33 36 35 36 33 37  Password=7365637
93e0: 32 36 35 37 34 7d 20 30 5c 0d 0a 5c 7b 53 74 72  26574} 0\..\{Str
93f0: 69 6e 67 2c 20 44 65 66 61 75 6c 74 44 62 54 79  ing, DefaultDbTy
9400: 70 65 3d 53 74 72 69 6e 67 5c 7d 20 30 20 5c 7b  pe=String\} 0 \{
9410: 54 45 58 54 2c 20 44 65 66 61 75 6c 74 54 79 70  TEXT, DefaultTyp
9420: 65 4e 61 6d 65 3d 54 45 58 54 5c 7d 20 30 20 5c  eName=TEXT\} 0 \
9430: 7b 54 72 75 65 2c 5c 0d 0a 4e 6f 53 68 61 72 65  {True,\..NoShare
9440: 64 46 6c 61 67 73 3d 54 72 75 65 5c 7d 24 7d 7d  dFlags=True\}$}}
9450: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
9460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
94a0: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
94b0: 74 65 73 74 20 64 61 74 61 2d 31 2e 31 38 20 7b  test data-1.18 {
94c0: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 54 6f  SQLiteConvert To
94d0: 44 61 74 65 54 69 6d 65 20 28 4a 75 6c 69 61 6e  DateTime (Julian
94e0: 20 44 61 79 29 7d 20 2d 62 6f 64 79 20 7b 0d 0a   Day)} -body {..
94f0: 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b    set dateTime [
9500: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63  object invoke -c
9510: 72 65 61 74 65 20 53 79 73 74 65 6d 2e 44 61 74  reate System.Dat
9520: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
9530: 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20 20 20 20  onvert \..      
9540: 54 6f 44 61 74 65 54 69 6d 65 20 32 34 35 35 39  ToDateTime 24559
9550: 32 38 2e 30 20 55 74 63 5d 0d 0a 0d 0a 20 20 6f  28.0 Utc]....  o
9560: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 61  bject invoke $da
9570: 74 65 54 69 6d 65 20 54 6f 53 74 72 69 6e 67 20  teTime ToString 
9580: 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d  [getDateTimeForm
9590: 61 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  at]..} -cleanup 
95a0: 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  {..  unset -noco
95b0: 6d 70 6c 61 69 6e 20 64 61 74 65 54 69 6d 65 0d  mplain dateTime.
95c0: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
95d0: 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61  {eagle System.Da
95e0: 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
95f0: 6c 74 20 7b 32 30 31 32 2d 30 31 2d 30 31 20 31  lt {2012-01-01 1
9600: 32 3a 30 30 3a 30 30 5a 7d 7d 0d 0a 0d 0a 23 23  2:00:00Z}}....##
9610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9650: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
9660: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
9670: 61 74 61 2d 31 2e 31 39 20 7b 53 51 4c 69 74 65  ata-1.19 {SQLite
9680: 43 6f 6e 76 65 72 74 20 54 6f 4a 75 6c 69 61 6e  Convert ToJulian
9690: 44 61 79 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  Day} -body {..  
96a0: 65 78 70 72 20 7b 72 6f 75 6e 64 28 5b 6f 62 6a  expr {round([obj
96b0: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
96c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
96d0: 4c 69 74 65 43 6f 6e 76 65 72 74 20 54 6f 4a 75  LiteConvert ToJu
96e0: 6c 69 61 6e 44 61 79 20 5c 0d 0a 20 20 20 20 20  lianDay \..     
96f0: 20 22 32 30 31 32 2d 30 31 2d 30 31 20 31 32 3a   "2012-01-01 12:
9700: 30 30 3a 30 30 5a 22 5d 29 7d 0d 0a 7d 20 2d 63  00:00Z"])}..} -c
9710: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
9720: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
9730: 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 32  Lite} -result {2
9740: 34 35 35 39 32 38 7d 7d 0d 0a 0d 0a 23 23 23 23  455928}}....####
9750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9790: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
97a0: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
97b0: 61 2d 31 2e 32 30 20 7b 53 51 4c 69 74 65 43 6f  a-1.20 {SQLiteCo
97c0: 6e 76 65 72 74 20 54 6f 55 6e 69 78 45 70 6f 63  nvert ToUnixEpoc
97d0: 68 20 28 55 74 63 29 7d 20 2d 62 6f 64 79 20 7b  h (Utc)} -body {
97e0: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
97f0: 20 41 74 20 66 69 72 73 74 2c 20 74 68 65 20 74   At first, the t
9800: 65 73 74 20 72 65 73 75 6c 74 20 68 65 72 65 20  est result here 
9810: 6d 61 79 20 6e 6f 74 20 73 65 65 6d 20 63 6f 72  may not seem cor
9820: 72 65 63 74 3b 20 68 6f 77 65 76 65 72 2c 20 74  rect; however, t
9830: 68 65 0d 0a 20 20 23 20 20 20 20 20 20 20 73 61  he..  #       sa
9840: 6d 65 20 72 65 73 75 6c 74 20 63 61 6e 20 62 65  me result can be
9850: 20 73 65 65 6e 20 62 79 20 63 6f 6d 70 69 6c 69   seen by compili
9860: 6e 67 20 61 6e 64 20 72 75 6e 6e 69 6e 67 20 74  ng and running t
9870: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 43 23 0d  he following C#.
9880: 0a 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20  .  #       code 
9890: 66 72 61 67 6d 65 6e 74 20 74 6f 67 65 74 68 65  fragment togethe
98a0: 72 20 77 69 74 68 20 74 68 65 20 54 6f 55 6e 69  r with the ToUni
98b0: 78 45 70 6f 63 68 20 6d 65 74 68 6f 64 3a 0d 0a  xEpoch method:..
98c0: 20 20 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20    #..  #        
98d0: 20 20 20 44 61 74 65 54 69 6d 65 20 64 61 74 65     DateTime date
98e0: 54 69 6d 65 3b 0d 0a 20 20 23 20 20 20 20 20 20  Time;..  #      
98f0: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
9900: 74 65 4c 69 6e 65 28 22 64 61 74 65 54 69 6d 65  teLine("dateTime
9910: 20 3d 20 7b 30 7d 2c 20 75 6e 69 78 54 69 6d 65   = {0}, unixTime
9920: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 23 20 20 20   = {1}",..  #   
9930: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 65              date
9940: 54 69 6d 65 20 3d 20 44 61 74 65 54 69 6d 65 2e  Time = DateTime.
9950: 50 61 72 73 65 28 22 32 30 31 32 2d 30 31 2d 30  Parse("2012-01-0
9960: 31 20 31 32 3a 30 30 3a 30 30 5a 22 29 2c 0d 0a  1 12:00:00Z"),..
9970: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
9980: 20 20 54 6f 55 6e 69 78 45 70 6f 63 68 28 64 61    ToUnixEpoch(da
9990: 74 65 54 69 6d 65 29 29 3b 0d 0a 20 20 23 0d 0a  teTime));..  #..
99a0: 20 20 23 20 20 20 20 20 20 20 54 68 65 20 62 61    #       The ba
99b0: 73 69 63 20 70 72 6f 62 6c 65 6d 20 68 65 72 65  sic problem here
99c0: 20 69 73 20 74 68 61 74 20 74 68 65 20 50 61 72   is that the Par
99d0: 73 65 20 5b 61 6e 64 20 54 72 79 50 61 72 73 65  se [and TryParse
99e0: 5d 20 6d 65 74 68 6f 64 73 20 6f 66 0d 0a 20 20  ] methods of..  
99f0: 23 20 20 20 20 20 20 20 74 68 65 20 44 61 74 65  #       the Date
9a00: 54 69 6d 65 20 73 74 72 75 63 74 75 72 65 20 73  Time structure s
9a10: 65 65 6d 20 74 6f 20 61 6c 77 61 79 73 20 72 65  eem to always re
9a20: 74 75 72 6e 20 6c 6f 63 61 6c 20 74 69 6d 65 2c  turn local time,
9a30: 20 65 76 65 6e 20 77 68 65 6e 0d 0a 20 20 23 20   even when..  # 
9a40: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
9a50: 75 65 20 63 6c 65 61 72 6c 79 20 69 6e 64 69 63  ue clearly indic
9a60: 61 74 65 73 20 6f 74 68 65 72 77 69 73 65 20 28  ates otherwise (
9a70: 69 2e 65 2e 20 74 68 65 20 74 72 61 69 6c 69 6e  i.e. the trailin
9a80: 67 20 22 5a 22 2c 0d 0a 20 20 23 20 20 20 20 20  g "Z",..  #     
9a90: 20 20 69 6e 64 69 63 61 74 69 6e 67 20 55 54 43    indicating UTC
9aa0: 29 2e 0d 0a 20 20 23 0d 0a 20 20 65 78 70 72 20  )...  #..  expr 
9ab0: 7b 72 6f 75 6e 64 28 5b 6f 62 6a 65 63 74 20 69  {round([object i
9ac0: 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74  nvoke System.Dat
9ad0: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
9ae0: 6f 6e 76 65 72 74 20 54 6f 55 6e 69 78 45 70 6f  onvert ToUnixEpo
9af0: 63 68 20 5c 0d 0a 20 20 20 20 20 20 22 32 30 31  ch \..      "201
9b00: 32 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30  2-01-01 12:00:00
9b10: 5a 22 5d 29 7d 0d 0a 7d 20 2d 63 6f 6e 73 74 72  Z"])}..} -constr
9b20: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73  aints {eagle Sys
9b30: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
9b40: 20 2d 72 65 73 75 6c 74 20 7b 31 33 32 35 33 39   -result {132539
9b50: 30 34 30 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  0400}}....######
9b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9ba0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
9bb0: 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
9bc0: 31 2e 32 31 20 7b 53 51 4c 69 74 65 43 6f 6e 76  1.21 {SQLiteConv
9bd0: 65 72 74 20 54 6f 55 6e 69 78 45 70 6f 63 68 20  ert ToUnixEpoch 
9be0: 28 4c 6f 63 61 6c 29 7d 20 2d 62 6f 64 79 20 7b  (Local)} -body {
9bf0: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
9c00: 20 41 74 20 66 69 72 73 74 2c 20 74 68 65 20 74   At first, the t
9c10: 65 73 74 20 72 65 73 75 6c 74 20 68 65 72 65 20  est result here 
9c20: 6d 61 79 20 6e 6f 74 20 73 65 65 6d 20 63 6f 72  may not seem cor
9c30: 72 65 63 74 3b 20 68 6f 77 65 76 65 72 2c 20 74  rect; however, t
9c40: 68 65 0d 0a 20 20 23 20 20 20 20 20 20 20 73 61  he..  #       sa
9c50: 6d 65 20 72 65 73 75 6c 74 20 63 61 6e 20 62 65  me result can be
9c60: 20 73 65 65 6e 20 62 79 20 63 6f 6d 70 69 6c 69   seen by compili
9c70: 6e 67 20 61 6e 64 20 72 75 6e 6e 69 6e 67 20 74  ng and running t
9c80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 43 23 0d  he following C#.
9c90: 0a 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20  .  #       code 
9ca0: 66 72 61 67 6d 65 6e 74 20 74 6f 67 65 74 68 65  fragment togethe
9cb0: 72 20 77 69 74 68 20 74 68 65 20 54 6f 55 6e 69  r with the ToUni
9cc0: 78 45 70 6f 63 68 20 6d 65 74 68 6f 64 3a 0d 0a  xEpoch method:..
9cd0: 20 20 23 0d 0a 20 20 23 20 20 20 20 20 20 20 20    #..  #        
9ce0: 20 20 20 44 61 74 65 54 69 6d 65 20 64 61 74 65     DateTime date
9cf0: 54 69 6d 65 3b 0d 0a 20 20 23 20 20 20 20 20 20  Time;..  #      
9d00: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
9d10: 74 65 4c 69 6e 65 28 22 64 61 74 65 54 69 6d 65  teLine("dateTime
9d20: 20 3d 20 7b 30 7d 2c 20 75 6e 69 78 54 69 6d 65   = {0}, unixTime
9d30: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 23 20 20 20   = {1}",..  #   
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 65              date
9d50: 54 69 6d 65 20 3d 20 44 61 74 65 54 69 6d 65 2e  Time = DateTime.
9d60: 50 61 72 73 65 28 22 32 30 31 32 2d 30 31 2d 30  Parse("2012-01-0
9d70: 31 20 31 32 3a 30 30 3a 30 30 22 29 2c 0d 0a 20  1 12:00:00"),.. 
9d80: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
9d90: 20 54 6f 55 6e 69 78 45 70 6f 63 68 28 64 61 74   ToUnixEpoch(dat
9da0: 65 54 69 6d 65 29 29 3b 0d 0a 20 20 23 0d 0a 20  eTime));..  #.. 
9db0: 20 23 20 20 20 20 20 20 20 54 68 65 20 62 61 73   #       The bas
9dc0: 69 63 20 70 72 6f 62 6c 65 6d 20 68 65 72 65 20  ic problem here 
9dd0: 69 73 20 74 68 61 74 20 74 68 65 20 50 61 72 73  is that the Pars
9de0: 65 20 5b 61 6e 64 20 54 72 79 50 61 72 73 65 5d  e [and TryParse]
9df0: 20 6d 65 74 68 6f 64 73 20 6f 66 0d 0a 20 20 23   methods of..  #
9e00: 20 20 20 20 20 20 20 74 68 65 20 44 61 74 65 54         the DateT
9e10: 69 6d 65 20 73 74 72 75 63 74 75 72 65 20 73 65  ime structure se
9e20: 65 6d 20 74 6f 20 61 6c 77 61 79 73 20 72 65 74  em to always ret
9e30: 75 72 6e 20 6c 6f 63 61 6c 20 74 69 6d 65 2c 20  urn local time, 
9e40: 65 76 65 6e 20 77 68 65 6e 0d 0a 20 20 23 20 20  even when..  #  
9e50: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
9e60: 65 20 63 6c 65 61 72 6c 79 20 69 6e 64 69 63 61  e clearly indica
9e70: 74 65 73 20 6f 74 68 65 72 77 69 73 65 20 28 69  tes otherwise (i
9e80: 2e 65 2e 20 74 68 65 20 74 72 61 69 6c 69 6e 67  .e. the trailing
9e90: 20 22 5a 22 2c 0d 0a 20 20 23 20 20 20 20 20 20   "Z",..  #      
9ea0: 20 69 6e 64 69 63 61 74 69 6e 67 20 55 54 43 29   indicating UTC)
9eb0: 2e 0d 0a 20 20 23 0d 0a 20 20 65 78 70 72 20 7b  ...  #..  expr {
9ec0: 72 6f 75 6e 64 28 5b 6f 62 6a 65 63 74 20 69 6e  round([object in
9ed0: 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61  voke System.Data
9ee0: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
9ef0: 6e 76 65 72 74 20 54 6f 55 6e 69 78 45 70 6f 63  nvert ToUnixEpoc
9f00: 68 20 5c 0d 0a 20 20 20 20 20 20 22 32 30 31 32  h \..      "2012
9f10: 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 22  -01-01 12:00:00"
9f20: 5d 29 7d 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ])}..} -constrai
9f30: 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73 74 65  nts {eagle Syste
9f40: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
9f50: 72 65 73 75 6c 74 20 7b 31 33 32 35 34 31 39 32  result {13254192
9f60: 30 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  00}}....########
9f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fb0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
9fc0: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
9fd0: 32 32 20 7b 53 51 4c 69 74 65 54 72 61 6e 73 61  22 {SQLiteTransa
9fe0: 63 74 69 6f 6e 20 64 69 73 70 6f 73 61 6c 20 62  ction disposal b
9ff0: 65 68 61 76 69 6f 72 7d 20 2d 73 65 74 75 70 20  ehavior} -setup 
a000: 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
a010: 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
a020: 31 2e 32 32 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  1.22.db]..} -bod
a030: 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
a040: 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54  te $db "CREATE T
a050: 41 42 4c 45 20 74 31 28 78 20 54 45 58 54 29 3b  ABLE t1(x TEXT);
a060: 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  "....  sql execu
a070: 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 49 4e  te $db {..    IN
a080: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29  SERT INTO t1 (x)
a090: 20 56 41 4c 55 45 53 28 27 74 65 73 74 31 27 29   VALUES('test1')
a0a0: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
a0b0: 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
a0c0: 28 27 74 65 73 74 32 27 29 3b 0d 0a 20 20 20 20  ('test2');..    
a0d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
a0e0: 78 29 20 56 41 4c 55 45 53 28 27 74 65 73 74 33  x) VALUES('test3
a0f0: 27 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ');..  }....  se
a100: 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 78 20  t sql "SELECT x 
a110: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
a120: 20 78 20 43 4f 4c 4c 41 54 45 20 44 4f 54 48 52   x COLLATE DOTHR
a130: 4f 57 3b 22 0d 0a 0d 0a 20 20 73 65 74 20 69 64  OW;"....  set id
a140: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
a150: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
a160: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
a170: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
a180: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
a190: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
a1a0: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
a1b0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
a1c0: 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ain results erro
a1d0: 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65  rs....  set code
a1e0: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57   [compileCSharpW
a1f0: 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20  ith [subst {..  
a200: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d    using System;.
a210: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
a220: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a  m.Data.SQLite;..
a230: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
a240: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
a250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 5c 5b 53 51     {..      \[SQ
a260: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 28 4e 61 6d  LiteFunction(Nam
a270: 65 20 3d 20 22 44 4f 54 48 52 4f 57 22 2c 20 46  e = "DOTHROW", F
a280: 75 6e 63 54 79 70 65 20 3d 20 46 75 6e 63 74 69  uncType = Functi
a290: 6f 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f 6e  onType.Collation
a2a0: 29 5c 5d 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  )\]..      publi
a2b0: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
a2c0: 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69  } : SQLiteFuncti
a2d0: 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  on..      {..   
a2e0: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
a2f0: 72 69 64 65 20 69 6e 74 20 43 6f 6d 70 61 72 65  ride int Compare
a300: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  (..          str
a310: 69 6e 67 20 70 61 72 61 6d 31 2c 0d 0a 20 20 20  ing param1,..   
a320: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 61         string pa
a330: 72 61 6d 32 0d 0a 20 20 20 20 20 20 20 20 20 20  ram2..          
a340: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a350: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
a360: 77 20 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 74  w Exception("not
a370: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 29 3b 0d   implemented");.
a380: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
a390: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a3e0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a3f0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
a400: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
a410: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46           SQLiteF
a420: 75 6e 63 74 69 6f 6e 2e 52 65 67 69 73 74 65 72  unction.Register
a430: 46 75 6e 63 74 69 6f 6e 28 74 79 70 65 6f 66 28  Function(typeof(
a440: 54 65 73 74 24 7b 69 64 7d 29 29 3b 0d 0a 0d 0a  Test${id}));....
a450: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
a460: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
a470: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
a480: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
a490: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
a4a0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
a4b0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
a4c0: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
a4d0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
a4e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
a4f0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
a500: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a510: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 54 72   using (SQLiteTr
a520: 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 61  ansaction transa
a530: 63 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20  ction =..       
a540: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
a550: 69 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63  ion.BeginTransac
a560: 74 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20 20  tion())..       
a570: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a580: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
a590: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
a5b0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
a5c0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
a5d0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 3b 0d  reateCommand();.
a5e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a5f0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
a600: 6e 64 54 65 78 74 20 3d 20 22 24 7b 73 71 6c 7d  ndText = "${sql}
a610: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
a620: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
a630: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
a650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
a660: 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
a670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a680: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
a690: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
a6a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a6b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
a6c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
a6d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
a6e0: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
a6f0: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
a700: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
a710: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
a720: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
a730: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
a740: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
a750: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
a760: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
a770: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
a780: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
a790: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
a7a0: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
a7b0: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
a7c0: 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72   Main..      } r
a7d0: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
a7e0: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
a7f0: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
a800: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
a810: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
a820: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
a830: 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72  esult results er
a840: 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20 64 61  rors code sql da
a850: 74 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66  taSource id db f
a860: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
a870: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d  traints {eagle m
a880: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
a890: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
a8a0: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
a8b0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f  m.Data.SQLite co
a8c0: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
a8d0: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
a8e0: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
a8f0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
a900: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
a910: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
a920: 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
a930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a970: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
a980: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
a990: 32 33 20 7b 53 51 4c 69 74 65 46 75 6e 63 74 69  23 {SQLiteFuncti
a9a0: 6f 6e 20 63 6f 6c 6c 61 74 69 6f 6e 20 65 78 63  on collation exc
a9b0: 65 70 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b  eption} -setup {
a9c0: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
a9d0: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
a9e0: 2e 32 33 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .23.db]..} -body
a9f0: 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
aa00: 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
aa10: 42 4c 45 20 74 31 28 78 20 54 45 58 54 29 3b 22  BLE t1(x TEXT);"
aa20: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
aa30: 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 49 4e 53  e $db {..    INS
aa40: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
aa50: 56 41 4c 55 45 53 28 27 74 65 73 74 31 27 29 3b  VALUES('test1');
aa60: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
aa70: 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
aa80: 27 74 65 73 74 32 27 29 3b 0d 0a 20 20 20 20 49  'test2');..    I
aa90: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
aaa0: 29 20 56 41 4c 55 45 53 28 27 74 65 73 74 33 27  ) VALUES('test3'
aab0: 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  );..  }....  set
aac0: 20 73 71 6c 20 22 53 45 4c 45 43 54 20 78 20 46   sql "SELECT x F
aad0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
aae0: 78 20 43 4f 4c 4c 41 54 45 20 44 4f 54 48 52 4f  x COLLATE DOTHRO
aaf0: 57 32 3b 22 0d 0a 0d 0a 20 20 73 65 74 20 69 64  W2;"....  set id
ab00: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
ab10: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
ab20: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
ab30: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
ab40: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
ab50: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
ab60: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
ab70: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
ab80: 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ain results erro
ab90: 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65  rs....  set code
aba0: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57   [compileCSharpW
abb0: 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20  ith [subst {..  
abc0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d    using System;.
abd0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
abe0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a  m.Data.SQLite;..
abf0: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
ac00: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
ac10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 5c 5b 53 51     {..      \[SQ
ac20: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 28 4e 61 6d  LiteFunction(Nam
ac30: 65 20 3d 20 22 44 4f 54 48 52 4f 57 32 22 2c 20  e = "DOTHROW2", 
ac40: 46 75 6e 63 54 79 70 65 20 3d 20 46 75 6e 63 74  FuncType = Funct
ac50: 69 6f 6e 54 79 70 65 2e 43 6f 6c 6c 61 74 69 6f  ionType.Collatio
ac60: 6e 29 5c 5d 0d 0a 20 20 20 20 20 20 70 75 62 6c  n)\]..      publ
ac70: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
ac80: 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74  d} : SQLiteFunct
ac90: 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ion..      {..  
aca0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65        public ove
acb0: 72 72 69 64 65 20 69 6e 74 20 43 6f 6d 70 61 72  rride int Compar
acc0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  e(..          st
acd0: 72 69 6e 67 20 70 61 72 61 6d 31 2c 0d 0a 20 20  ring param1,..  
ace0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
acf0: 61 72 61 6d 32 0d 0a 20 20 20 20 20 20 20 20 20  aram2..         
ad00: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
ad10: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
ad20: 65 77 20 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f  ew Exception("no
ad30: 74 20 69 6d 70 6c 65 6d 65 6e 74 65 64 22 29 3b  t implemented");
ad40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
ad50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ada0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
adb0: 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e   static int Main
adc0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
add0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46           SQLiteF
ade0: 75 6e 63 74 69 6f 6e 2e 52 65 67 69 73 74 65 72  unction.Register
adf0: 46 75 6e 63 74 69 6f 6e 28 74 79 70 65 6f 66 28  Function(typeof(
ae00: 54 65 73 74 24 7b 69 64 7d 29 29 3b 0d 0a 0d 0a  Test${id}));....
ae10: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
ae20: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
ae30: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
ae40: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
ae50: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ae60: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
ae70: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
ae80: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
ae90: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
aea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
aeb0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
aec0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
aed0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 54 72   using (SQLiteTr
aee0: 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 61  ansaction transa
aef0: 63 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20  ction =..       
af00: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
af10: 69 6f 6e 2e 42 65 67 69 6e 54 72 61 6e 73 61 63  ion.BeginTransac
af20: 74 69 6f 6e 28 29 29 0d 0a 20 20 20 20 20 20 20  tion())..       
af30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
af40: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6d 6d        SQLiteComm
af50: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
af60: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
af70: 6f 6d 6d 61 6e 64 28 29 3b 0d 0a 0d 0a 20 20 20  ommand();....   
af80: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
af90: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
afa0: 20 22 24 7b 73 71 6c 7d 22 3b 0d 0a 0d 0a 20 20   "${sql}";....  
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
afc0: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
afd0: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
afe0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
aff0: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
b000: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b010: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
b020: 63 6f 75 6e 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20  count = 0;....  
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
b040: 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e  ile (dataReader.
b050: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
b060: 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74             count
b070: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
b080: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
b090: 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  unt;..          
b0a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b0b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b0c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
b0d0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
b0e0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
b0f0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
b100: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
b110: 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69  ite.dll]....  li
b120: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code $result
b130: 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  s \..      [expr
b140: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65   {[info exists e
b150: 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73  rrors] ? $errors
b160: 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20   : ""}] \..     
b170: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
b180: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
b190: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
b1a0: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
b1b0: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
b1c0: 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65  Main..      } re
b1d0: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
b1e0: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
b1f0: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
b200: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
b210: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
b220: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
b230: 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72 72  sult results err
b240: 6f 72 73 20 63 6f 64 65 20 73 71 6c 20 64 61 74  ors code sql dat
b250: 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66 69  aSource id db fi
b260: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
b270: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d 6f  raints {eagle mo
b280: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
b290: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
b2a0: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
b2b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d  .Data.SQLite com
b2c0: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
b2d0: 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c  ch regexp -resul
b2e0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
b2f0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
b300: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
b310: 23 5c 64 2b 20 5c 7b 5c 7d 20 31 5c 0d 0a 5c 7b  #\d+ \{\} 1\..\{
b320: 53 79 73 74 65 6d 5c 2e 52 65 66 6c 65 63 74 69  System\.Reflecti
b330: 6f 6e 5c 2e 54 61 72 67 65 74 49 6e 76 6f 63 61  on\.TargetInvoca
b340: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 3a 20 45  tionException: E
b350: 78 63 65 70 74 69 6f 6e 20 68 61 73 20 62 65 65  xception has bee
b360: 6e 20 74 68 72 6f 77 6e 20 62 79 5c 0d 0a 74 68  n thrown by\..th
b370: 65 20 74 61 72 67 65 74 20 6f 66 20 61 6e 20 69  e target of an i
b380: 6e 76 6f 63 61 74 69 6f 6e 5c 2e 20 2d 2d 2d 3e  nvocation\. --->
b390: 20 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53   System\.Data\.S
b3a0: 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63  QLite\.SQLiteExc
b3b0: 65 70 74 69 6f 6e 3a 5c 0d 0a 69 6e 74 65 72 72  eption:\..interr
b3c0: 75 70 74 65 64 2e 2a 24 7d 7d 0d 0a 0d 0a 23 23  upted.*$}}....##
b3d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b3e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b3f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b410: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
b420: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
b430: 61 74 61 2d 31 2e 32 34 20 7b 4c 49 4e 51 20 53  ata-1.24 {LINQ S
b440: 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54 43 4f 4c  QL_CONSTRAINTCOL
b450: 55 4d 4e 53 20 72 65 73 6f 75 72 63 65 7d 20 2d  UMNS resource} -
b460: 62 6f 64 79 20 7b 0d 0a 20 20 6f 62 6a 65 63 74  body {..  object
b470: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
b480: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
b490: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
b4a0: 51 4c 69 74 65 2e 4c 69 6e 71 2e 50 72 6f 70 65  QLite.Linq.Prope
b4b0: 72 74 69 65 73 2e 52 65 73 6f 75 72 63 65 73 20  rties.Resources 
b4c0: 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54 43 4f  SQL_CONSTRAINTCO
b4d0: 4c 55 4d 4e 53 0d 0a 7d 20 2d 63 6f 6e 73 74 72  LUMNS..} -constr
b4e0: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73  aints {eagle Sys
b4f0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite 
b500: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b510: 74 65 2e 4c 69 6e 71 7d 20 2d 72 65 73 75 6c 74  te.Linq} -result
b520: 20 7b 0d 0a 20 20 20 20 20 20 43 52 45 41 54 45   {..      CREATE
b530: 20 54 45 4d 50 20 56 49 45 57 20 53 43 48 45 4d   TEMP VIEW SCHEM
b540: 41 43 4f 4e 53 54 52 41 49 4e 54 43 4f 4c 55 4d  ACONSTRAINTCOLUM
b550: 4e 53 20 41 53 0d 0a 20 20 20 20 20 20 20 20 53  NS AS..        S
b560: 45 4c 45 43 54 20 43 4f 4e 53 54 52 41 49 4e 54  ELECT CONSTRAINT
b570: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
b580: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41            NULL A
b590: 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f 53 43 48  S CONSTRAINT_SCH
b5a0: 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  EMA,..          
b5b0: 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 5f       CONSTRAINT_
b5c0: 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  NAME,..         
b5d0: 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41 54 41        TABLE_CATA
b5e0: 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  LOG,..          
b5f0: 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 54 41 42       NULL AS TAB
b600: 4c 45 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20  LE_SCHEMA,..    
b610: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
b620: 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20  _NAME,..        
b630: 20 20 20 20 20 20 20 43 4f 4c 55 4d 4e 5f 4e 41         COLUMN_NA
b640: 4d 45 0d 0a 20 20 20 20 20 20 20 20 46 52 4f 4d  ME..        FROM
b650: 20 54 45 4d 50 2e 53 43 48 45 4d 41 49 4e 44 45   TEMP.SCHEMAINDE
b660: 58 43 4f 4c 55 4d 4e 53 0d 0a 20 20 20 20 20 20  XCOLUMNS..      
b670: 20 20 55 4e 49 4f 4e 0d 0a 20 20 20 20 20 20 20    UNION..       
b680: 20 53 45 4c 45 43 54 20 43 4f 4e 53 54 52 41 49   SELECT CONSTRAI
b690: 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20  NT_CATALOG,..   
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
b6b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b6c0: 20 20 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d    CONSTRAINT_NAM
b6d0: 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
b6e0: 20 20 20 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47     TABLE_CATALOG
b6f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b700: 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20    NULL,..       
b710: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 4e 41          TABLE_NA
b720: 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ME,..           
b730: 20 20 20 20 46 4b 45 59 5f 46 52 4f 4d 5f 43 4f      FKEY_FROM_CO
b740: 4c 55 4d 4e 0d 0a 20 20 20 20 20 20 20 20 46 52  LUMN..        FR
b750: 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d 41 46 4f  OM TEMP.SCHEMAFO
b760: 52 45 49 47 4e 4b 45 59 53 3b 0d 0a 20 20 20 20  REIGNKEYS;..    
b770: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
b780: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7c0: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
b7d0: 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 32 35   {test data-1.25
b7e0: 20 7b 45 46 36 20 53 51 4c 5f 43 4f 4e 53 54 52   {EF6 SQL_CONSTR
b7f0: 41 49 4e 54 43 4f 4c 55 4d 4e 53 20 72 65 73 6f  AINTCOLUMNS reso
b800: 75 72 63 65 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  urce} -body {.. 
b810: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
b820: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
b830: 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
b840: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
b850: 2e 50 72 6f 70 65 72 74 69 65 73 2e 52 65 73 6f  .Properties.Reso
b860: 75 72 63 65 73 20 53 51 4c 5f 43 4f 4e 53 54 52  urces SQL_CONSTR
b870: 41 49 4e 54 43 4f 4c 55 4d 4e 53 0d 0a 7d 20 2d  AINTCOLUMNS..} -
b880: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
b890: 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  le System.Data.S
b8a0: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
b8b0: 61 2e 53 51 4c 69 74 65 2e 45 46 36 7d 20 2d 72  a.SQLite.EF6} -r
b8c0: 65 73 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 43  esult {..      C
b8d0: 52 45 41 54 45 20 54 45 4d 50 20 56 49 45 57 20  REATE TEMP VIEW 
b8e0: 53 43 48 45 4d 41 43 4f 4e 53 54 52 41 49 4e 54  SCHEMACONSTRAINT
b8f0: 43 4f 4c 55 4d 4e 53 20 41 53 0d 0a 20 20 20 20  COLUMNS AS..    
b900: 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e 53 54      SELECT CONST
b910: 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a  RAINT_CATALOG,..
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
b930: 55 4c 4c 20 41 53 20 43 4f 4e 53 54 52 41 49 4e  ULL AS CONSTRAIN
b940: 54 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20  T_SCHEMA,..     
b950: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52            CONSTR
b960: 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20  AINT_NAME,..    
b970: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
b980: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
b990: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41            NULL A
b9a0: 53 20 54 41 42 4c 45 5f 53 43 48 45 4d 41 2c 0d  S TABLE_SCHEMA,.
b9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b9c0: 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20  TABLE_NAME,..   
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4c 55              COLU
b9e0: 4d 4e 5f 4e 41 4d 45 0d 0a 20 20 20 20 20 20 20  MN_NAME..       
b9f0: 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d   FROM TEMP.SCHEM
ba00: 41 49 4e 44 45 58 43 4f 4c 55 4d 4e 53 0d 0a 20  AINDEXCOLUMNS.. 
ba10: 20 20 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20 20         UNION..  
ba20: 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e        SELECT CON
ba30: 53 54 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c  STRAINT_CATALOG,
ba40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba50: 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20   NULL,..        
ba60: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e         CONSTRAIN
ba70: 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20  T_NAME,..       
ba80: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41          TABLE_CA
ba90: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
baa0: 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20         NULL,..  
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
bac0: 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  LE_NAME,..      
bad0: 20 20 20 20 20 20 20 20 20 46 4b 45 59 5f 46 52           FKEY_FR
bae0: 4f 4d 5f 43 4f 4c 55 4d 4e 0d 0a 20 20 20 20 20  OM_COLUMN..     
baf0: 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48     FROM TEMP.SCH
bb00: 45 4d 41 46 4f 52 45 49 47 4e 4b 45 59 53 3b 0d  EMAFOREIGNKEYS;.
bb10: 0a 20 20 20 20 7d 7d 0d 0a 0d 0a 23 23 23 23 23  .    }}....#####
bb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb60: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
bb70: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
bb80: 2d 31 2e 32 36 20 7b 4c 49 4e 51 20 53 51 4c 5f  -1.26 {LINQ SQL_
bb90: 43 4f 4e 53 54 52 41 49 4e 54 53 20 72 65 73 6f  CONSTRAINTS reso
bba0: 75 72 63 65 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  urce} -body {.. 
bbb0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
bbc0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
bbd0: 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
bbe0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
bbf0: 71 2e 50 72 6f 70 65 72 74 69 65 73 2e 52 65 73  q.Properties.Res
bc00: 6f 75 72 63 65 73 20 53 51 4c 5f 43 4f 4e 53 54  ources SQL_CONST
bc10: 52 41 49 4e 54 53 0d 0a 7d 20 2d 63 6f 6e 73 74  RAINTS..} -const
bc20: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53 79  raints {eagle Sy
bc30: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
bc40: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
bc50: 69 74 65 2e 4c 69 6e 71 7d 20 2d 72 65 73 75 6c  ite.Linq} -resul
bc60: 74 20 7b 0d 0a 20 20 20 20 20 20 43 52 45 41 54  t {..      CREAT
bc70: 45 20 54 45 4d 50 20 56 49 45 57 20 53 43 48 45  E TEMP VIEW SCHE
bc80: 4d 41 43 4f 4e 53 54 52 41 49 4e 54 53 20 41 53  MACONSTRAINTS AS
bc90: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  ..        SELECT
bca0: 20 49 4e 44 45 58 5f 43 41 54 41 4c 4f 47 20 41   INDEX_CATALOG A
bcb0: 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54  S CONSTRAINT_CAT
bcc0: 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20  ALOG,..         
bcd0: 20 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 43 4f        NULL AS CO
bce0: 4e 53 54 52 41 49 4e 54 5f 53 43 48 45 4d 41 2c  NSTRAINT_SCHEMA,
bcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd00: 20 49 4e 44 45 58 5f 4e 41 4d 45 20 41 53 20 43   INDEX_NAME AS C
bd10: 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d 45 2c 0d  ONSTRAINT_NAME,.
bd20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd30: 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a  TABLE_CATALOG,..
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
bd50: 55 4c 4c 20 41 53 20 54 41 42 4c 45 5f 53 43 48  ULL AS TABLE_SCH
bd60: 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  EMA,..          
bd70: 20 20 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c       TABLE_NAME,
bd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd90: 20 27 50 52 49 4d 41 52 59 20 4b 45 59 27 20 41   'PRIMARY KEY' A
bda0: 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f 54 59 50  S CONSTRAINT_TYP
bdb0: 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
bdc0: 20 20 20 30 20 41 53 20 49 53 5f 44 45 46 45 52     0 AS IS_DEFER
bdd0: 52 41 42 4c 45 2c 0d 0a 20 20 20 20 20 20 20 20  RABLE,..        
bde0: 20 20 20 20 20 20 20 30 20 41 53 20 49 4e 49 54         0 AS INIT
bdf0: 49 41 4c 4c 59 5f 44 45 46 45 52 52 45 44 2c 0d  IALLY_DEFERRED,.
be00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be10: 4e 55 4c 4c 20 41 53 20 43 48 45 43 4b 5f 43 4c  NULL AS CHECK_CL
be20: 41 55 53 45 0d 0a 20 20 20 20 20 20 20 20 46 52  AUSE..        FR
be30: 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d 41 49 4e  OM TEMP.SCHEMAIN
be40: 44 45 58 45 53 0d 0a 20 20 20 20 20 20 20 20 57  DEXES..        W
be50: 48 45 52 45 20 50 52 49 4d 41 52 59 5f 4b 45 59  HERE PRIMARY_KEY
be60: 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 55 4e   = 1..        UN
be70: 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 53 45 4c  ION..        SEL
be80: 45 43 54 20 49 4e 44 45 58 5f 43 41 54 41 4c 4f  ECT INDEX_CATALO
be90: 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  G,..            
bea0: 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20     NULL,..      
beb0: 20 20 20 20 20 20 20 20 20 49 4e 44 45 58 5f 4e           INDEX_N
bec0: 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  AME,..          
bed0: 20 20 20 20 20 54 41 42 4c 45 5f 43 41 54 41 4c       TABLE_CATAL
bee0: 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OG,..           
bef0: 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20      NULL,..     
bf00: 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f            TABLE_
bf10: 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  NAME,..         
bf20: 20 20 20 20 20 20 27 55 4e 49 51 55 45 27 2c 0d        'UNIQUE',.
bf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf40: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
bf50: 20 20 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20     0,..         
bf60: 20 20 20 20 20 20 4e 55 4c 4c 0d 0a 20 20 20 20        NULL..    
bf70: 20 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43      FROM TEMP.SC
bf80: 48 45 4d 41 49 4e 44 45 58 45 53 0d 0a 20 20 20  HEMAINDEXES..   
bf90: 20 20 20 20 20 57 48 45 52 45 20 50 52 49 4d 41       WHERE PRIMA
bfa0: 52 59 5f 4b 45 59 20 3d 20 30 20 41 4e 44 20 5b  RY_KEY = 0 AND [
bfb0: 55 4e 49 51 55 45 5d 20 3d 20 31 0d 0a 20 20 20  UNIQUE] = 1..   
bfc0: 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20 20 20 20       UNION..    
bfd0: 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e 53 54      SELECT CONST
bfe0: 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a  RAINT_CATALOG,..
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
c000: 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ULL,..          
c010: 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e 54 5f       CONSTRAINT_
c020: 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  NAME,..         
c030: 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41 54 41        TABLE_CATA
c040: 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  LOG,..          
c050: 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20       NULL,..    
c060: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
c070: 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20  _NAME,..        
c080: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e         CONSTRAIN
c090: 54 5f 54 59 50 45 2c 0d 0a 20 20 20 20 20 20 20  T_TYPE,..       
c0a0: 20 20 20 20 20 20 20 20 49 53 5f 44 45 46 45 52          IS_DEFER
c0b0: 52 41 42 4c 45 2c 0d 0a 20 20 20 20 20 20 20 20  RABLE,..        
c0c0: 20 20 20 20 20 20 20 49 4e 49 54 49 41 4c 4c 59         INITIALLY
c0d0: 5f 44 45 46 45 52 52 45 44 2c 0d 0a 20 20 20 20  _DEFERRED,..    
c0e0: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 0d             NULL.
c0f0: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45  .        FROM TE
c100: 4d 50 2e 53 43 48 45 4d 41 46 4f 52 45 49 47 4e  MP.SCHEMAFOREIGN
c110: 4b 45 59 53 3b 0d 0a 20 20 20 20 7d 7d 0d 0a 0d  KEYS;..    }}...
c120: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
c130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c170: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
c180: 74 20 64 61 74 61 2d 31 2e 32 37 20 7b 45 46 36  t data-1.27 {EF6
c190: 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54 53   SQL_CONSTRAINTS
c1a0: 20 72 65 73 6f 75 72 63 65 7d 20 2d 62 6f 64 79   resource} -body
c1b0: 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76   {..  object inv
c1c0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
c1d0: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53  ublic \..      S
c1e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c1f0: 65 2e 45 46 36 2e 50 72 6f 70 65 72 74 69 65 73  e.EF6.Properties
c200: 2e 52 65 73 6f 75 72 63 65 73 20 53 51 4c 5f 43  .Resources SQL_C
c210: 4f 4e 53 54 52 41 49 4e 54 53 0d 0a 7d 20 2d 63  ONSTRAINTS..} -c
c220: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
c230: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
c240: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
c250: 2e 53 51 4c 69 74 65 2e 45 46 36 7d 20 2d 72 65  .SQLite.EF6} -re
c260: 73 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 43 52  sult {..      CR
c270: 45 41 54 45 20 54 45 4d 50 20 56 49 45 57 20 53  EATE TEMP VIEW S
c280: 43 48 45 4d 41 43 4f 4e 53 54 52 41 49 4e 54 53  CHEMACONSTRAINTS
c290: 20 41 53 0d 0a 20 20 20 20 20 20 20 20 53 45 4c   AS..        SEL
c2a0: 45 43 54 20 49 4e 44 45 58 5f 43 41 54 41 4c 4f  ECT INDEX_CATALO
c2b0: 47 20 41 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f  G AS CONSTRAINT_
c2c0: 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20  CATALOG,..      
c2d0: 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41 53           NULL AS
c2e0: 20 43 4f 4e 53 54 52 41 49 4e 54 5f 53 43 48 45   CONSTRAINT_SCHE
c2f0: 4d 41 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  MA,..           
c300: 20 20 20 20 49 4e 44 45 58 5f 4e 41 4d 45 20 41      INDEX_NAME A
c310: 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d  S CONSTRAINT_NAM
c320: 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  E,..            
c330: 20 20 20 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47     TABLE_CATALOG
c340: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c350: 20 20 4e 55 4c 4c 20 41 53 20 54 41 42 4c 45 5f    NULL AS TABLE_
c360: 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20  SCHEMA,..       
c370: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 4e 41          TABLE_NA
c380: 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ME,..           
c390: 20 20 20 20 27 50 52 49 4d 41 52 59 20 4b 45 59      'PRIMARY KEY
c3a0: 27 20 41 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f  ' AS CONSTRAINT_
c3b0: 54 59 50 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  TYPE,..         
c3c0: 20 20 20 20 20 20 30 20 41 53 20 49 53 5f 44 45        0 AS IS_DE
c3d0: 46 45 52 52 41 42 4c 45 2c 0d 0a 20 20 20 20 20  FERRABLE,..     
c3e0: 20 20 20 20 20 20 20 20 20 20 30 20 41 53 20 49            0 AS I
c3f0: 4e 49 54 49 41 4c 4c 59 5f 44 45 46 45 52 52 45  NITIALLY_DEFERRE
c400: 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  D,..            
c410: 20 20 20 4e 55 4c 4c 20 41 53 20 43 48 45 43 4b     NULL AS CHECK
c420: 5f 43 4c 41 55 53 45 0d 0a 20 20 20 20 20 20 20  _CLAUSE..       
c430: 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d   FROM TEMP.SCHEM
c440: 41 49 4e 44 45 58 45 53 0d 0a 20 20 20 20 20 20  AINDEXES..      
c450: 20 20 57 48 45 52 45 20 50 52 49 4d 41 52 59 5f    WHERE PRIMARY_
c460: 4b 45 59 20 3d 20 31 0d 0a 20 20 20 20 20 20 20  KEY = 1..       
c470: 20 55 4e 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20   UNION..        
c480: 53 45 4c 45 43 54 20 49 4e 44 45 58 5f 43 41 54  SELECT INDEX_CAT
c490: 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20  ALOG,..         
c4a0: 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20        NULL,..   
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 44 45              INDE
c4c0: 58 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20  X_NAME,..       
c4d0: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41          TABLE_CA
c4e0: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
c4f0: 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20         NULL,..  
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
c510: 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  LE_NAME,..      
c520: 20 20 20 20 20 20 20 20 20 27 55 4e 49 51 55 45           'UNIQUE
c530: 27 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ',..            
c540: 20 20 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20     0,..         
c550: 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20 20 20        0,..      
c560: 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 0d 0a 20           NULL.. 
c570: 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45 4d 50         FROM TEMP
c580: 2e 53 43 48 45 4d 41 49 4e 44 45 58 45 53 0d 0a  .SCHEMAINDEXES..
c590: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 50 52          WHERE PR
c5a0: 49 4d 41 52 59 5f 4b 45 59 20 3d 20 30 20 41 4e  IMARY_KEY = 0 AN
c5b0: 44 20 5b 55 4e 49 51 55 45 5d 20 3d 20 31 0d 0a  D [UNIQUE] = 1..
c5c0: 20 20 20 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20          UNION.. 
c5d0: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f         SELECT CO
c5e0: 4e 53 54 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47  NSTRAINT_CATALOG
c5f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c600: 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20    NULL,..       
c610: 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49          CONSTRAI
c620: 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  NT_NAME,..      
c630: 20 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43           TABLE_C
c640: 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20  ATALOG,..       
c650: 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20          NULL,.. 
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41                TA
c670: 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20  BLE_NAME,..     
c680: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52            CONSTR
c690: 41 49 4e 54 5f 54 59 50 45 2c 0d 0a 20 20 20 20  AINT_TYPE,..    
c6a0: 20 20 20 20 20 20 20 20 20 20 20 49 53 5f 44 45             IS_DE
c6b0: 46 45 52 52 41 42 4c 45 2c 0d 0a 20 20 20 20 20  FERRABLE,..     
c6c0: 20 20 20 20 20 20 20 20 20 20 49 4e 49 54 49 41            INITIA
c6d0: 4c 4c 59 5f 44 45 46 45 52 52 45 44 2c 0d 0a 20  LLY_DEFERRED,.. 
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55                NU
c6f0: 4c 4c 0d 0a 20 20 20 20 20 20 20 20 46 52 4f 4d  LL..        FROM
c700: 20 54 45 4d 50 2e 53 43 48 45 4d 41 46 4f 52 45   TEMP.SCHEMAFORE
c710: 49 47 4e 4b 45 59 53 3b 0d 0a 20 20 20 20 7d 7d  IGNKEYS;..    }}
c720: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
c730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c770: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
c780: 74 65 73 74 20 64 61 74 61 2d 31 2e 32 38 20 7b  test data-1.28 {
c790: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
c7a0: 20 47 65 74 56 61 6c 75 65 73 20 77 2f 63 6f 6c   GetValues w/col
c7b0: 6c 65 63 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20  lection} -setup 
c7c0: 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
c7d0: 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
c7e0: 31 2e 32 38 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  1.28.db]..} -bod
c7f0: 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
c800: 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52  te $db {..    CR
c810: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
c820: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c830: 4b 45 59 20 41 53 43 2c 20 79 20 54 45 58 54 29  KEY ASC, y TEXT)
c840: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
c850: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
c860: 55 45 53 28 31 2c 20 27 61 61 72 64 76 61 72 6b  UES(1, 'aardvark
c870: 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  ');..    INSERT 
c880: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
c890: 41 4c 55 45 53 28 32 2c 20 27 62 65 61 72 27 29  ALUES(2, 'bear')
c8a0: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
c8b0: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
c8c0: 55 45 53 28 33 2c 20 27 63 68 69 63 6b 65 6e 27  UES(3, 'chicken'
c8d0: 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
c8e0: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
c8f0: 4c 55 45 53 28 34 2c 20 27 64 75 63 6b 27 29 3b  LUES(4, 'duck');
c900: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
c910: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
c920: 45 53 28 35 2c 20 27 65 6c 65 70 68 61 6e 74 27  ES(5, 'elephant'
c930: 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
c940: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
c950: 4c 55 45 53 28 36 2c 20 27 66 72 6f 67 27 29 3b  LUES(6, 'frog');
c960: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
c970: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
c980: 45 53 28 37 2c 20 27 67 6f 6f 73 65 27 29 3b 0d  ES(7, 'goose');.
c990: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
c9a0: 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45   t1 (x, y) VALUE
c9b0: 53 28 38 2c 20 27 68 6f 72 73 65 27 29 3b 0d 0a  S(8, 'horse');..
c9c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
c9d0: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
c9e0: 28 39 2c 20 27 69 67 75 61 6e 61 27 29 3b 0d 0a  (9, 'iguana');..
c9f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
ca00: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
ca10: 28 31 30 2c 20 27 6a 65 6c 6c 79 66 69 73 68 27  (10, 'jellyfish'
ca20: 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
ca30: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
ca40: 4c 55 45 53 28 31 31 2c 20 27 6b 61 6e 67 61 72  LUES(11, 'kangar
ca50: 6f 6f 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  oo');..    INSER
ca60: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
ca70: 20 56 41 4c 55 45 53 28 31 32 2c 20 27 6c 6c 61   VALUES(12, 'lla
ca80: 6d 61 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  ma');..    INSER
ca90: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
caa0: 20 56 41 4c 55 45 53 28 31 33 2c 20 27 6d 6f 6f   VALUES(13, 'moo
cab0: 73 65 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  se');..    INSER
cac0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
cad0: 20 56 41 4c 55 45 53 28 31 34 2c 20 27 6e 65 77   VALUES(14, 'new
cae0: 74 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  t');..    INSERT
caf0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
cb00: 56 41 4c 55 45 53 28 31 35 2c 20 27 6f 73 74 72  VALUES(15, 'ostr
cb10: 69 63 68 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45  ich');..    INSE
cb20: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
cb30: 29 20 56 41 4c 55 45 53 28 31 36 2c 20 27 70 69  ) VALUES(16, 'pi
cb40: 67 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  g');..    INSERT
cb50: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
cb60: 56 41 4c 55 45 53 28 31 37 2c 20 27 71 75 61 69  VALUES(17, 'quai
cb70: 6c 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  l');..    INSERT
cb80: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
cb90: 56 41 4c 55 45 53 28 31 38 2c 20 27 72 68 69 6e  VALUES(18, 'rhin
cba0: 6f 63 65 72 6f 73 27 29 3b 0d 0a 20 20 20 20 49  oceros');..    I
cbb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
cbc0: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 39 2c 20  , y) VALUES(19, 
cbd0: 27 73 68 61 72 6b 27 29 3b 0d 0a 20 20 20 20 49  'shark');..    I
cbe0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
cbf0: 2c 20 79 29 20 56 41 4c 55 45 53 28 32 30 2c 20  , y) VALUES(20, 
cc00: 27 74 69 67 65 72 27 29 3b 0d 0a 20 20 20 20 49  'tiger');..    I
cc10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
cc20: 2c 20 79 29 20 56 41 4c 55 45 53 28 32 31 2c 20  , y) VALUES(21, 
cc30: 27 75 6e 69 63 6f 72 6e 27 29 3b 0d 0a 20 20 20  'unicorn');..   
cc40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
cc50: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 32  (x, y) VALUES(22
cc60: 2c 20 27 76 69 70 65 72 27 29 3b 0d 0a 20 20 20  , 'viper');..   
cc70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
cc80: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 33  (x, y) VALUES(23
cc90: 2c 20 27 77 65 61 73 65 6c 27 29 3b 0d 0a 20 20  , 'weasel');..  
cca0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
ccb0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32   (x, y) VALUES(2
ccc0: 34 2c 20 27 78 65 72 75 73 27 29 3b 0d 0a 20 20  4, 'xerus');..  
ccd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
cce0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32   (x, y) VALUES(2
ccf0: 35 2c 20 27 79 61 6b 27 29 3b 0d 0a 20 20 20 20  5, 'yak');..    
cd00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
cd10: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32 36 2c  x, y) VALUES(26,
cd20: 20 27 7a 65 62 72 61 27 29 3b 0d 0a 20 20 7d 0d   'zebra');..  }.
cd30: 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  ...  set connect
cd40: 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
cd50: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 63  tion]....  set c
cd60: 6f 6d 6d 61 6e 64 20 5b 6f 62 6a 65 63 74 20 63  ommand [object c
cd70: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 53 79 73  reate -alias Sys
cd80: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
cd90: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 5c 0d  SQLiteCommand \.
cda0: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78  .      "SELECT x
cdb0: 2c 20 79 2c 20 78 2c 20 79 20 46 52 4f 4d 20 74  , y, x, y FROM t
cdc0: 31 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  1 ORDER BY y DES
cdd0: 43 3b 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d  C;" $connection]
cde0: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72  ....  set reader
cdf0: 20 5b 24 63 6f 6d 6d 61 6e 64 20 2d 61 6c 69 61   [$command -alia
ce00: 73 20 45 78 65 63 75 74 65 52 65 61 64 65 72 5d  s ExecuteReader]
ce10: 0d 0a 20 20 73 65 74 20 63 6f 6c 6c 65 63 74 69  ..  set collecti
ce20: 6f 6e 20 5b 24 72 65 61 64 65 72 20 2d 61 6c 69  on [$reader -ali
ce30: 61 73 20 47 65 74 56 61 6c 75 65 73 5d 0d 0a 20  as GetValues].. 
ce40: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
ce50: 74 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 66  t]....  object f
ce60: 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74  oreach -alias it
ce70: 65 6d 20 24 63 6f 6c 6c 65 63 74 69 6f 6e 20 7b  em $collection {
ce80: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
ce90: 73 75 6c 74 20 5b 24 63 6f 6c 6c 65 63 74 69 6f  sult [$collectio
cea0: 6e 20 47 65 74 56 61 6c 75 65 73 20 24 69 74 65  n GetValues $ite
ceb0: 6d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  m]..  }....  set
cec0: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
ced0: 6e 75 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43  nup {..  freeDbC
cee0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
cef0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
cf00: 20 72 65 73 75 6c 74 20 69 74 65 6d 20 63 6f 6c   result item col
cf10: 6c 65 63 74 69 6f 6e 20 72 65 61 64 65 72 20 63  lection reader c
cf20: 6f 6d 6d 61 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  ommand connectio
cf30: 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  n....  cleanupDb
cf40: 20 24 66 69 6c 65 4e 61 6d 65 3b 20 23 20 4e 4f   $fileName; # NO
cf50: 54 45 3a 20 41 66 74 65 72 20 6f 62 6a 65 63 74  TE: After object
cf60: 20 64 69 73 70 6f 73 61 6c 2e 0d 0a 0d 0a 20 20   disposal.....  
cf70: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
cf80: 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  n db fileName..}
cf90: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d   -constraints \.
cfa0: 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32  .{eagle monoBug2
cfb0: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
cfc0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
cfd0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
cfe0: 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d  Lite} -result \.
cff0: 0a 7b 7b 32 36 20 32 36 7d 20 7b 7a 65 62 72 61  .{{26 26} {zebra
d000: 20 7a 65 62 72 61 7d 7d 7d 0d 0a 0d 0a 23 23 23   zebra}}}....###
d010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d050: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
d060: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
d070: 74 61 2d 31 2e 32 39 20 7b 4c 49 4e 51 20 49 53  ta-1.29 {LINQ IS
d080: 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e  QLiteSchemaExten
d090: 73 69 6f 6e 73 2e 42 75 69 6c 64 54 65 6d 70 53  sions.BuildTempS
d0a0: 63 68 65 6d 61 7d 20 2d 73 65 74 75 70 20 7b 0d  chema} -setup {.
d0b0: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
d0c0: 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
d0d0: 32 39 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  29.db]..} -body 
d0e0: 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74  {..  set connect
d0f0: 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63  ion [getDbConnec
d100: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 70  tion]....  set p
d110: 72 6f 76 69 64 65 72 53 65 72 76 69 63 65 73 20  roviderServices 
d120: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
d130: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
d140: 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
d150: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
d160: 71 2e 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72  q.SQLiteProvider
d170: 53 65 72 76 69 63 65 73 20 49 6e 73 74 61 6e 63  Services Instanc
d180: 65 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69  e]....  object i
d190: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
d1a0: 6e 50 75 62 6c 69 63 20 2d 74 79 70 65 20 5c 0d  nPublic -type \.
d1b0: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
d1c0: 74 61 2e 53 51 4c 69 74 65 2e 49 53 51 4c 69 74  ta.SQLite.ISQLit
d1d0: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
d1e0: 73 20 24 70 72 6f 76 69 64 65 72 53 65 72 76 69  s $providerServi
d1f0: 63 65 73 20 5c 0d 0a 20 20 20 20 20 20 42 75 69  ces \..      Bui
d200: 6c 64 54 65 6d 70 53 63 68 65 6d 61 20 24 63 6f  ldTempSchema $co
d210: 6e 6e 65 63 74 69 6f 6e 0d 0a 7d 20 2d 63 6c 65  nnection..} -cle
d220: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
d230: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
d240: 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
d250: 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ion....  unset -
d260: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 76 69  nocomplain provi
d270: 64 65 72 53 65 72 76 69 63 65 73 20 63 6f 6e 6e  derServices conn
d280: 65 63 74 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61  ection db fileNa
d290: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
d2a0: 74 73 20 7b 65 61 67 6c 65 20 53 51 4c 69 74 65  ts {eagle SQLite
d2b0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
d2c0: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
d2d0: 53 51 4c 69 74 65 2e 4c 69 6e 71 7d 20 5c 0d 0a  SQLite.Linq} \..
d2e0: 2d 72 65 73 75 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23  -result {}}....#
d2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
d340: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
d350: 64 61 74 61 2d 31 2e 33 30 20 7b 45 46 36 20 49  data-1.30 {EF6 I
d360: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
d370: 6e 73 69 6f 6e 73 2e 42 75 69 6c 64 54 65 6d 70  nsions.BuildTemp
d380: 53 63 68 65 6d 61 7d 20 2d 73 65 74 75 70 20 7b  Schema} -setup {
d390: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
d3a0: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
d3b0: 2e 33 30 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .30.db]..} -body
d3c0: 20 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63   {..  set connec
d3d0: 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65  tion [getDbConne
d3e0: 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20  ction]....  set 
d3f0: 70 72 6f 76 69 64 65 72 53 65 72 76 69 63 65 73  providerServices
d400: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
d410: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
d420: 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  c \..      Syste
d430: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
d440: 36 2e 53 51 4c 69 74 65 50 72 6f 76 69 64 65 72  6.SQLiteProvider
d450: 53 65 72 76 69 63 65 73 20 49 6e 73 74 61 6e 63  Services Instanc
d460: 65 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69  e]....  object i
d470: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
d480: 6e 50 75 62 6c 69 63 20 2d 74 79 70 65 20 5c 0d  nPublic -type \.
d490: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
d4a0: 74 61 2e 53 51 4c 69 74 65 2e 49 53 51 4c 69 74  ta.SQLite.ISQLit
d4b0: 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e  eSchemaExtension
d4c0: 73 20 24 70 72 6f 76 69 64 65 72 53 65 72 76 69  s $providerServi
d4d0: 63 65 73 20 5c 0d 0a 20 20 20 20 20 20 42 75 69  ces \..      Bui
d4e0: 6c 64 54 65 6d 70 53 63 68 65 6d 61 20 24 63 6f  ldTempSchema $co
d4f0: 6e 6e 65 63 74 69 6f 6e 0d 0a 7d 20 2d 63 6c 65  nnection..} -cle
d500: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
d510: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
d520: 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
d530: 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ion....  unset -
d540: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 76 69  nocomplain provi
d550: 64 65 72 53 65 72 76 69 63 65 73 20 63 6f 6e 6e  derServices conn
d560: 65 63 74 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61  ection db fileNa
d570: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
d580: 74 73 20 7b 65 61 67 6c 65 20 53 51 4c 69 74 65  ts {eagle SQLite
d590: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
d5a0: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
d5b0: 53 51 4c 69 74 65 2e 45 46 36 7d 20 5c 0d 0a 2d  SQLite.EF6} \..-
d5c0: 72 65 73 75 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23 23  result {}}....##
d5d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d610: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
d620: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
d630: 61 74 61 2d 31 2e 33 31 20 7b 56 41 52 43 48 41  ata-1.31 {VARCHA
d640: 52 20 2f 20 4e 56 41 52 43 48 41 52 20 74 79 70  R / NVARCHAR typ
d650: 65 73 20 77 69 74 68 20 73 70 61 63 65 73 7d 20  es with spaces} 
d660: 2d 62 6f 64 79 20 7b 0d 0a 20 20 6c 69 73 74 20  -body {..  list 
d670: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
d680: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
d690: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
d6a0: 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72  ite.SQLiteConver
d6b0: 74 20 5c 0d 0a 20 20 20 20 20 20 54 79 70 65 4e  t \..      TypeN
d6c0: 61 6d 65 54 6f 44 62 54 79 70 65 20 6e 75 6c 6c  ameToDbType null
d6d0: 20 56 41 52 43 48 41 52 20 4e 6f 6e 65 5d 20 5c   VARCHAR None] \
d6e0: 0d 0a 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20  ..      [object 
d6f0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
d700: 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e  onPublic System.
d710: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
d720: 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20  teConvert \..   
d730: 20 20 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54     TypeNameToDbT
d740: 79 70 65 20 6e 75 6c 6c 20 4e 56 41 52 43 48 41  ype null NVARCHA
d750: 52 20 4e 6f 6e 65 5d 20 5c 0d 0a 20 20 20 20 20  R None] \..     
d760: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
d770: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
d780: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  c System.Data.SQ
d790: 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76 65  Lite.SQLiteConve
d7a0: 72 74 20 5c 0d 0a 20 20 20 20 20 20 54 79 70 65  rt \..      Type
d7b0: 4e 61 6d 65 54 6f 44 62 54 79 70 65 20 6e 75 6c  NameToDbType nul
d7c0: 6c 20 56 41 52 43 48 41 52 28 31 29 20 4e 6f 6e  l VARCHAR(1) Non
d7d0: 65 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 6f 62 6a  e] \..      [obj
d7e0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
d7f0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73  s +NonPublic Sys
d800: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
d810: 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 5c 0d  SQLiteConvert \.
d820: 0a 20 20 20 20 20 20 54 79 70 65 4e 61 6d 65 54  .      TypeNameT
d830: 6f 44 62 54 79 70 65 20 6e 75 6c 6c 20 4e 56 41  oDbType null NVA
d840: 52 43 48 41 52 28 31 29 20 4e 6f 6e 65 5d 20 5c  RCHAR(1) None] \
d850: 0d 0a 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20  ..      [object 
d860: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
d870: 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e  onPublic System.
d880: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
d890: 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20  teConvert \..   
d8a0: 20 20 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54     TypeNameToDbT
d8b0: 79 70 65 20 6e 75 6c 6c 20 22 56 41 52 43 48 41  ype null "VARCHA
d8c0: 52 20 28 31 29 22 20 4e 6f 6e 65 5d 20 5c 0d 0a  R (1)" None] \..
d8d0: 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e        [object in
d8e0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
d8f0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61  Public System.Da
d900: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
d910: 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20 20 20  Convert \..     
d920: 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70   TypeNameToDbTyp
d930: 65 20 6e 75 6c 6c 20 22 4e 56 41 52 43 48 41 52  e null "NVARCHAR
d940: 20 28 31 29 22 20 4e 6f 6e 65 5d 20 5c 0d 0a 7d   (1)" None] \..}
d950: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
d960: 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61  agle System.Data
d970: 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
d980: 20 5c 0d 0a 7b 41 6e 73 69 53 74 72 69 6e 67 20   \..{AnsiString 
d990: 53 74 72 69 6e 67 20 41 6e 73 69 53 74 72 69 6e  String AnsiStrin
d9a0: 67 20 53 74 72 69 6e 67 20 41 6e 73 69 53 74 72  g String AnsiStr
d9b0: 69 6e 67 20 53 74 72 69 6e 67 7d 7d 0d 0a 0d 0a  ing String}}....
d9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d9d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d9e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d9f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
da00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
da10: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
da20: 20 64 61 74 61 2d 31 2e 33 32 20 7b 53 65 74 4d   data-1.32 {SetM
da30: 65 6d 6f 72 79 53 74 61 74 75 73 20 6d 65 74 68  emoryStatus meth
da40: 6f 64 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  od} -setup {..  
da50: 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b  #..  # NOTE: Mak
da60: 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69  e sure that SQLi
da70: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
da80: 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68  is completely sh
da90: 75 74 64 6f 77 6e 20 70 72 69 6f 72 20 74 6f 0d  utdown prior to.
daa0: 0a 20 20 23 20 20 20 20 20 20 20 73 74 61 72 74  .  #       start
dab0: 69 6e 67 20 74 68 69 73 20 74 65 73 74 2e 0d 0a  ing this test...
dac0: 20 20 23 0d 0a 20 20 73 68 75 74 64 6f 77 6e 53    #..  shutdownS
dad0: 51 4c 69 74 65 20 24 74 65 73 74 5f 63 68 61 6e  QLite $test_chan
dae0: 6e 65 6c 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20  nel....  #..  # 
daf0: 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 6e 20  NOTE: Create an 
db00: 49 6e 74 50 74 72 20 69 6e 73 74 61 6e 63 65 20  IntPtr instance 
db10: 77 69 74 68 20 61 20 76 61 6c 75 65 20 6f 66 20  with a value of 
db20: 7a 65 72 6f 2e 0d 0a 20 20 23 0d 0a 20 20 73 65  zero...  #..  se
db30: 74 20 7a 65 72 6f 20 5b 6f 62 6a 65 63 74 20 69  t zero [object i
db40: 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 49 6e  nvoke -create In
db50: 74 50 74 72 20 5a 65 72 6f 5d 0d 0a 0d 0a 20 20  tPtr Zero]....  
db60: 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 43 72 65  #..  # NOTE: Cre
db70: 61 74 65 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  ate an instance 
db80: 6f 66 20 74 68 65 20 63 6f 72 65 20 53 51 4c 69  of the core SQLi
db90: 74 65 20 6c 69 62 72 61 72 79 20 69 6e 74 65 72  te library inter
dba0: 6f 70 20 77 72 61 70 70 65 72 20 63 6c 61 73 73  op wrapper class
dbb0: 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74 20 73 71  ...  #..  set sq
dbc0: 6c 69 74 65 33 20 5b 6f 62 6a 65 63 74 20 63 72  lite3 [object cr
dbd0: 65 61 74 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  eate -flags +Non
dbe0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61  Public System.Da
dbf0: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
dc00: 33 20 5c 0d 0a 20 20 20 20 20 20 44 65 66 61 75  3 \..      Defau
dc10: 6c 74 20 55 6e 73 70 65 63 69 66 69 65 64 20 6e  lt Unspecified n
dc20: 75 6c 6c 20 24 7a 65 72 6f 20 6e 75 6c 6c 20 74  ull $zero null t
dc30: 72 75 65 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  rue]..} -body {.
dc40: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 72 63  .  set result(rc
dc50: 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  1) [object invok
dc60: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
dc70: 6c 69 63 20 24 73 71 6c 69 74 65 33 20 53 65 74  lic $sqlite3 Set
dc80: 4d 65 6d 6f 72 79 53 74 61 74 75 73 20 5c 0d 0a  MemoryStatus \..
dc90: 20 20 20 20 20 20 66 61 6c 73 65 5d 0d 0a 0d 0a        false]....
dca0: 20 20 73 65 74 20 72 65 73 75 6c 74 28 62 65 66    set result(bef
dcb0: 6f 72 65 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76  ore) [object inv
dcc0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
dcd0: 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 4d  ublic $sqlite3 M
dce0: 65 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a 20 20  emoryUsed]....  
dcf0: 73 65 74 20 72 65 73 75 6c 74 28 70 74 72 31 29  set result(ptr1)
dd00: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
dd10: 2d 63 72 65 61 74 65 20 2d 66 6c 61 67 73 20 2b  -create -flags +
dd20: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
dd30: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
dd40: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
dd50: 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65  veMethods sqlite
dd60: 33 5f 6d 61 6c 6c 6f 63 20 31 30 30 5d 0d 0a 0d  3_malloc 100]...
dd70: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 61 66  .  set result(af
dd80: 74 65 72 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e  ter1) [object in
dd90: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
dda0: 50 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20  Public $sqlite3 
ddb0: 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a 20  MemoryUsed].... 
ddc0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
ddd0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
dde0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
ddf0: 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
de00: 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..     
de10: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 20 24 72   sqlite3_free $r
de20: 65 73 75 6c 74 28 70 74 72 31 29 0d 0a 0d 0a 20  esult(ptr1).... 
de30: 20 73 65 74 20 72 65 73 75 6c 74 28 61 66 74 65   set result(afte
de40: 72 32 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  r2) [object invo
de50: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
de60: 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 4d 65  blic $sqlite3 Me
de70: 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a 20 20 73  moryUsed]....  s
de80: 65 74 20 72 65 73 75 6c 74 28 72 63 32 29 20 5b  et result(rc2) [
de90: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
dea0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
deb0: 24 73 71 6c 69 74 65 33 20 53 65 74 4d 65 6d 6f  $sqlite3 SetMemo
dec0: 72 79 53 74 61 74 75 73 20 5c 0d 0a 20 20 20 20  ryStatus \..    
ded0: 20 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 73 65 74    true]....  set
dee0: 20 72 65 73 75 6c 74 28 72 63 33 29 20 5b 6f 62   result(rc3) [ob
def0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
df00: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
df10: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
df20: 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
df30: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71  NativeMethods sq
df40: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 5d 0d  lite3_shutdown].
df50: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28  ...  set result(
df60: 72 63 34 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76  rc4) [object inv
df70: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
df80: 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 53  ublic $sqlite3 S
df90: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 20 5c  etMemoryStatus \
dfa0: 0d 0a 20 20 20 20 20 20 74 72 75 65 5d 0d 0a 0d  ..      true]...
dfb0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 70 74  .  set result(pt
dfc0: 72 32 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  r2) [object invo
dfd0: 6b 65 20 2d 63 72 65 61 74 65 20 2d 66 6c 61 67  ke -create -flag
dfe0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
dff0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
e000: 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
e010: 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c  ativeMethods sql
e020: 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 31 30 30 5d  ite3_malloc 100]
e030: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
e040: 28 61 66 74 65 72 33 29 20 5b 6f 62 6a 65 63 74  (after3) [object
e050: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
e060: 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c 69 74  NonPublic $sqlit
e070: 65 33 20 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a  e3 MemoryUsed]..
e080: 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ..  object invok
e090: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
e0a0: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  lic System.Data.
e0b0: 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
e0c0: 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20  iveMethods \..  
e0d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
e0e0: 20 24 72 65 73 75 6c 74 28 70 74 72 32 29 0d 0a   $result(ptr2)..
e0f0: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 61  ..  set result(a
e100: 66 74 65 72 34 29 20 5b 6f 62 6a 65 63 74 20 69  fter4) [object i
e110: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
e120: 6e 50 75 62 6c 69 63 20 24 73 71 6c 69 74 65 33  nPublic $sqlite3
e130: 20 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a 0d 0a   MemoryUsed]....
e140: 20 20 6c 69 73 74 20 24 72 65 73 75 6c 74 28 72    list $result(r
e150: 63 31 29 20 24 72 65 73 75 6c 74 28 72 63 32 29  c1) $result(rc2)
e160: 20 24 72 65 73 75 6c 74 28 72 63 33 29 20 24 72   $result(rc3) $r
e170: 65 73 75 6c 74 28 72 63 34 29 20 24 72 65 73 75  esult(rc4) $resu
e180: 6c 74 28 70 74 72 31 29 20 5c 0d 0a 20 20 20 20  lt(ptr1) \..    
e190: 20 20 24 72 65 73 75 6c 74 28 70 74 72 32 29 20    $result(ptr2) 
e1a0: 24 72 65 73 75 6c 74 28 62 65 66 6f 72 65 29 20  $result(before) 
e1b0: 24 72 65 73 75 6c 74 28 61 66 74 65 72 31 29 20  $result(after1) 
e1c0: 24 72 65 73 75 6c 74 28 61 66 74 65 72 32 29 20  $result(after2) 
e1d0: 5c 0d 0a 20 20 20 20 20 20 24 72 65 73 75 6c 74  \..      $result
e1e0: 28 61 66 74 65 72 33 29 20 24 72 65 73 75 6c 74  (after3) $result
e1f0: 28 61 66 74 65 72 34 29 20 5c 0d 0a 20 20 20 20  (after4) \..    
e200: 20 20 5b 65 78 70 72 20 7b 24 72 65 73 75 6c 74    [expr {$result
e210: 28 62 65 66 6f 72 65 29 20 3d 3d 20 24 72 65 73  (before) == $res
e220: 75 6c 74 28 61 66 74 65 72 31 29 7d 5d 20 5c 0d  ult(after1)}] \.
e230: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 72  .      [expr {$r
e240: 65 73 75 6c 74 28 62 65 66 6f 72 65 29 20 3d 3d  esult(before) ==
e250: 20 24 72 65 73 75 6c 74 28 61 66 74 65 72 32 29   $result(after2)
e260: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
e270: 72 20 7b 24 72 65 73 75 6c 74 28 61 66 74 65 72  r {$result(after
e280: 33 29 20 3e 20 30 7d 5d 20 5c 0d 0a 20 20 20 20  3) > 0}] \..    
e290: 20 20 5b 65 78 70 72 20 7b 24 72 65 73 75 6c 74    [expr {$result
e2a0: 28 62 65 66 6f 72 65 29 20 3c 20 24 72 65 73 75  (before) < $resu
e2b0: 6c 74 28 61 66 74 65 72 33 29 7d 5d 20 5c 0d 0a  lt(after3)}] \..
e2c0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 72 65        [expr {$re
e2d0: 73 75 6c 74 28 61 66 74 65 72 31 29 20 3c 20 24  sult(after1) < $
e2e0: 72 65 73 75 6c 74 28 61 66 74 65 72 33 29 7d 5d  result(after3)}]
e2f0: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
e300: 7b 24 72 65 73 75 6c 74 28 61 66 74 65 72 34 29  {$result(after4)
e310: 20 3c 20 24 72 65 73 75 6c 74 28 61 66 74 65 72   < $result(after
e320: 33 29 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  3)}]..} -cleanup
e330: 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20   {..  catch {.. 
e340: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
e350: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
e360: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
e370: 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65  rary is complete
e380: 6c 79 20 73 68 75 74 64 6f 77 6e 20 70 72 69 6f  ly shutdown prio
e390: 72 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 74  r..    #       t
e3a0: 6f 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  o attempting to 
e3b0: 72 65 63 6f 6e 66 69 67 75 72 65 20 74 68 65 20  reconfigure the 
e3c0: 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 73 65  memory status se
e3d0: 74 74 69 6e 67 2e 0d 0a 20 20 20 20 23 0d 0a 20  tting...    #.. 
e3e0: 20 20 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74     shutdownSQLit
e3f0: 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  e $test_channel.
e400: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
e410: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
e420: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
e430: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
e440: 20 74 68 65 20 70 72 6f 63 65 73 73 2d 77 69 64   the process-wid
e450: 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 6d  e..    #       m
e460: 65 6d 6f 72 79 20 75 73 61 67 65 20 74 72 61 63  emory usage trac
e470: 6b 69 6e 67 20 73 65 74 74 69 6e 67 20 69 73 20  king setting is 
e480: 72 65 73 74 6f 72 65 64 2e 20 20 54 68 69 73 20  restored.  This 
e490: 69 73 20 6e 6f 74 20 31 30 30 25 0d 0a 20 20 20  is not 100%..   
e4a0: 20 23 20 20 20 20 20 20 20 72 65 6c 69 61 62 6c   #       reliabl
e4b0: 65 20 62 65 63 61 75 73 65 20 77 65 20 68 61 76  e because we hav
e4c0: 65 20 6e 6f 20 69 64 65 61 20 77 68 61 74 20 74  e no idea what t
e4d0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  he original valu
e4e0: 65 20 77 61 73 0d 0a 20 20 20 20 23 20 20 20 20  e was..    #    
e4f0: 20 20 20 75 70 6f 6e 20 65 6e 74 72 79 20 69 6e     upon entry in
e500: 74 6f 20 74 68 69 73 20 74 65 73 74 20 28 69 2e  to this test (i.
e510: 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20 75  e. because the u
e520: 6e 64 65 72 6c 79 69 6e 67 20 63 6f 72 65 0d 0a  nderlying core..
e530: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
e540: 61 72 79 20 70 72 6f 70 65 72 74 79 20 69 73 20  ary property is 
e550: 63 75 72 72 65 6e 74 6c 79 20 77 72 69 74 65 2d  currently write-
e560: 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 23 0d 0a 20  only)...    #.. 
e570: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
e580: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
e590: 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ic System.Data.S
e5a0: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
e5b0: 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..   
e5c0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e       sqlite3_con
e5d0: 66 69 67 5f 69 6e 74 20 53 51 4c 49 54 45 5f 43  fig_int SQLITE_C
e5e0: 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55 53 20  ONFIG_MEMSTATUS 
e5f0: 31 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  1..  }....  unse
e600: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
e610: 73 75 6c 74 20 73 71 6c 69 74 65 33 20 7a 65 72  sult sqlite3 zer
e620: 6f 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  o..} -constraint
e630: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
e640: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
e650: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
e660: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
e670: 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68  a.SQLite} -match
e680: 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75   \..regexp -resu
e690: 6c 74 20 7b 5e 4f 6b 20 4d 69 73 75 73 65 20 4f  lt {^Ok Misuse O
e6a0: 6b 20 4f 6b 20 53 79 73 74 65 6d 23 49 6e 74 50  k Ok System#IntP
e6b0: 74 72 23 5c 64 2b 20 53 79 73 74 65 6d 23 49 6e  tr#\d+ System#In
e6c0: 74 50 74 72 23 5c 64 2b 20 5c 64 2b 20 5c 64 2b  tPtr#\d+ \d+ \d+
e6d0: 5c 0d 0a 5c 64 2b 20 5c 64 2b 20 5c 64 2b 20 54  \..\d+ \d+ \d+ T
e6e0: 72 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72  rue True True Tr
e6f0: 75 65 20 54 72 75 65 20 54 72 75 65 24 7d 7d 0d  ue True True$}}.
e700: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
e710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e750: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
e760: 65 73 74 20 64 61 74 61 2d 31 2e 33 33 20 7b 53  est data-1.33 {S
e770: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
e780: 4f 70 65 6e 20 77 69 74 68 20 53 65 74 44 65 66  Open with SetDef
e790: 61 75 6c 74 73 3d 46 61 6c 73 65 7d 20 2d 73 65  aults=False} -se
e7a0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
e7b0: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
e7c0: 61 74 61 2d 31 2e 33 33 2e 64 62 5d 20 22 22 20  ata-1.33.db] "" 
e7d0: 22 22 20 22 22 20 22 22 20 53 65 74 44 65 66 61  "" "" "" SetDefa
e7e0: 75 6c 74 73 3d 46 61 6c 73 65 0d 0a 7d 20 2d 62  ults=False..} -b
e7f0: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73  ody {..  set res
e800: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
e810: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
e820: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
e830: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
e840: 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a  "PRAGMA page_siz
e850: 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  e;"]..  lappend 
e860: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
e870: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
e880: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
e890: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3b 22  max_page_count;"
e8a0: 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ]..  lappend res
e8b0: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
e8c0: 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
e8d0: 20 24 64 62 20 22 50 52 41 47 4d 41 20 6c 65 67   $db "PRAGMA leg
e8e0: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  acy_file_format;
e8f0: 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
e900: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
e910: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
e920: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 73 79  r $db "PRAGMA sy
e930: 6e 63 68 72 6f 6e 6f 75 73 3b 22 5d 0d 0a 20 20  nchronous;"]..  
e940: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
e950: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
e960: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
e970: 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69  "PRAGMA cache_si
e980: 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  ze;"]..  lappend
e990: 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
e9a0: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
e9b0: 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA
e9c0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 22 5d   journal_mode;"]
e9d0: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
e9e0: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
e9f0: 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
ea00: 24 64 62 20 22 50 52 41 47 4d 41 20 66 6f 72 65  $db "PRAGMA fore
ea10: 69 67 6e 5f 6b 65 79 73 3b 22 5d 0d 0a 0d 0a 20  ign_keys;"].... 
ea20: 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
ea30: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
ea40: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
ea50: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
ea60: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 64  omplain result d
ea70: 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
ea80: 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
ea90: 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
eaa0: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
eab0: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
eac0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
ead0: 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 31  e} -result \..{1
eae0: 30 32 34 20 31 30 37 33 37 34 31 38 32 33 20 30  024 1073741823 0
eaf0: 20 32 20 32 30 30 30 20 64 65 6c 65 74 65 20 30   2 2000 delete 0
eb00: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
eb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
eb50: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
eb60: 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 33 34   {test data-1.34
eb70: 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   {SQLiteConnecti
eb80: 6f 6e 2e 4f 70 65 6e 20 77 69 74 68 20 53 65 74  on.Open with Set
eb90: 44 65 66 61 75 6c 74 73 3d 54 72 75 65 7d 20 2d  Defaults=True} -
eba0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70  setup {..  setup
ebb0: 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
ebc0: 20 64 61 74 61 2d 31 2e 33 34 2e 64 62 5d 20 22   data-1.34.db] "
ebd0: 22 20 22 22 20 22 22 20 22 22 20 53 65 74 44 65  " "" "" "" SetDe
ebe0: 66 61 75 6c 74 73 3d 54 72 75 65 0d 0a 7d 20 2d  faults=True..} -
ebf0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65  body {..  set re
ec00: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
ec10: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
ec20: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
ec30: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
ec40: 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69   "PRAGMA page_si
ec50: 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  ze;"]..  lappend
ec60: 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
ec70: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
ec80: 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA
ec90: 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3b   max_page_count;
eca0: 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
ecb0: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
ecc0: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
ecd0: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 6c 65  r $db "PRAGMA le
ece0: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
ecf0: 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ;"]..  lappend r
ed00: 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
ed10: 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
ed20: 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 73  ar $db "PRAGMA s
ed30: 79 6e 63 68 72 6f 6e 6f 75 73 3b 22 5d 0d 0a 20  ynchronous;"].. 
ed40: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
ed50: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
ed60: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
ed70: 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73   "PRAGMA cache_s
ed80: 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  ize;"]..  lappen
ed90: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
eda0: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
edb0: 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM
edc0: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 22  A journal_mode;"
edd0: 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ]..  lappend res
ede0: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
edf0: 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
ee00: 20 24 64 62 20 22 50 52 41 47 4d 41 20 66 6f 72   $db "PRAGMA for
ee10: 65 69 67 6e 5f 6b 65 79 73 3b 22 5d 0d 0a 0d 0a  eign_keys;"]....
ee20: 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20    set result..} 
ee30: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
ee40: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
ee50: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
ee60: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
ee70: 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
ee80: 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b  constraints \..{
ee90: 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20  eagle monoBug28 
eea0: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
eeb0: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
eec0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
eed0: 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b  te} -result \..{
eee0: 31 30 32 34 20 31 30 37 33 37 34 31 38 32 33 20  1024 1073741823 
eef0: 30 20 32 20 32 30 30 30 20 64 65 6c 65 74 65 20  0 2 2000 delete 
ef00: 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  0}}....#########
ef10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ef50: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
ef60: 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 33  t {test data-1.3
ef70: 35 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  5 {SQLiteConnect
ef80: 69 6f 6e 2e 4f 70 65 6e 20 77 69 74 68 6f 75 74  ion.Open without
ef90: 20 53 65 74 44 65 66 61 75 6c 74 73 7d 20 2d 73   SetDefaults} -s
efa0: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
efb0: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
efc0: 64 61 74 61 2d 31 2e 33 35 2e 64 62 5d 0d 0a 7d  data-1.35.db]..}
efd0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
efe0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
eff0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
f000: 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
f010: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
f020: 64 62 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f  db "PRAGMA page_
f030: 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  size;"]..  lappe
f040: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f050: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f060: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f070: 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  MA max_page_coun
f080: 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t;"]..  lappend 
f090: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
f0a0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
f0b0: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
f0c0: 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d  legacy_file_form
f0d0: 61 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  at;"]..  lappend
f0e0: 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
f0f0: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
f100: 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA
f110: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 22 5d 0d   synchronous;"].
f120: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
f130: 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
f140: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
f150: 64 62 20 22 50 52 41 47 4d 41 20 63 61 63 68 65  db "PRAGMA cache
f160: 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70  _size;"]..  lapp
f170: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
f180: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
f190: 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41   scalar $db "PRA
f1a0: 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  GMA journal_mode
f1b0: 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ;"]..  lappend r
f1c0: 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
f1d0: 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
f1e0: 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 66  ar $db "PRAGMA f
f1f0: 6f 72 65 69 67 6e 5f 6b 65 79 73 3b 22 5d 0d 0a  oreign_keys;"]..
f200: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
f210: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
f220: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
f230: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
f240: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
f250: 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  t db fileName..}
f260: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d   -constraints \.
f270: 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32  .{eagle monoBug2
f280: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
f290: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
f2a0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
f2b0: 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d  Lite} -result \.
f2c0: 0a 7b 31 30 32 34 20 31 30 37 33 37 34 31 38 32  .{1024 107374182
f2d0: 33 20 30 20 32 20 32 30 30 30 20 64 65 6c 65 74  3 0 2 2000 delet
f2e0: 65 20 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  e 0}}....#######
f2f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f330: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
f340: 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
f350: 2e 33 36 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65  .36 {SQLiteConne
f360: 63 74 69 6f 6e 2e 4f 70 65 6e 20 77 69 74 68 20  ction.Open with 
f370: 50 52 41 47 4d 41 20 6f 76 65 72 72 69 64 65 73  PRAGMA overrides
f380: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 23 0d  } -setup {..  #.
f390: 0a 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d  .  # NOTE: Attem
f3a0: 70 74 20 74 6f 20 6f 70 65 6e 20 61 20 63 6f 6e  pt to open a con
f3b0: 6e 65 63 74 69 6f 6e 20 77 69 74 68 20 61 6c 6c  nection with all
f3c0: 20 61 76 61 69 6c 61 62 6c 65 20 50 52 41 47 4d   available PRAGM
f3d0: 41 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 23 20  A settings..  # 
f3e0: 20 20 20 20 20 20 73 65 74 20 74 6f 20 6e 6f 6e        set to non
f3f0: 2d 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20  -default values 
f400: 69 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  in the connectio
f410: 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 23 0d 0a  n string...  #..
f420: 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66    setupDb [set f
f430: 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 33  ileName data-1.3
f440: 36 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20 22  6.db] "" "" "" "
f450: 22 20 5b 6a 6f 69 6e 20 5b 6c 69 73 74 20 5c 0d  " [join [list \.
f460: 0a 20 20 20 20 20 20 22 50 61 67 65 20 53 69 7a  .      "Page Siz
f470: 65 3d 34 30 39 36 22 20 22 4d 61 78 20 50 61 67  e=4096" "Max Pag
f480: 65 20 43 6f 75 6e 74 3d 32 30 34 38 22 20 22 4c  e Count=2048" "L
f490: 65 67 61 63 79 20 46 6f 72 6d 61 74 3d 54 72 75  egacy Format=Tru
f4a0: 65 22 20 5c 0d 0a 20 20 20 20 20 20 53 79 6e 63  e" \..      Sync
f4b0: 68 72 6f 6e 6f 75 73 3d 4e 6f 72 6d 61 6c 20 22  hronous=Normal "
f4c0: 43 61 63 68 65 20 53 69 7a 65 3d 34 30 39 36 22  Cache Size=4096"
f4d0: 20 22 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 57   "Journal Mode=W
f4e0: 61 6c 22 20 5c 0d 0a 20 20 20 20 20 20 22 46 6f  al" \..      "Fo
f4f0: 72 65 69 67 6e 20 4b 65 79 73 3d 54 72 75 65 22  reign Keys=True"
f500: 5d 20 5c 3b 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b  ] \;]..} -body {
f510: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b  ..  set result [
f520: 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  list]....  lappe
f530: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f540: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f550: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f560: 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d 0d  MA page_size;"].
f570: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
f580: 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
f590: 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
f5a0: 64 62 20 22 50 52 41 47 4d 41 20 6d 61 78 5f 70  db "PRAGMA max_p
f5b0: 61 67 65 5f 63 6f 75 6e 74 3b 22 5d 0d 0a 20 20  age_count;"]..  
f5c0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
f5d0: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
f5e0: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
f5f0: 22 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f 66  "PRAGMA legacy_f
f600: 69 6c 65 5f 66 6f 72 6d 61 74 3b 22 5d 0d 0a 20  ile_format;"].. 
f610: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
f620: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
f630: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
f640: 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f   "PRAGMA synchro
f650: 6e 6f 75 73 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  nous;"]..  lappe
f660: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f670: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f680: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f690: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d  MA cache_size;"]
f6a0: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
f6b0: 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
f6c0: 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
f6d0: 24 64 62 20 22 50 52 41 47 4d 41 20 6a 6f 75 72  $db "PRAGMA jour
f6e0: 6e 61 6c 5f 6d 6f 64 65 3b 22 5d 0d 0a 20 20 6c  nal_mode;"]..  l
f6f0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
f700: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
f710: 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db "
f720: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
f730: 65 79 73 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20  eys;"]....  set 
f740: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
f750: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
f760: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
f770: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
f780: 69 6e 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c  in result db fil
f790: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
f7a0: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
f7b0: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
f7c0: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
f7d0: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
f7e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
f7f0: 65 73 75 6c 74 20 5c 0d 0a 7b 34 30 39 36 20 32  esult \..{4096 2
f800: 30 34 38 20 31 20 31 20 34 30 39 36 20 77 61 6c  048 1 1 4096 wal
f810: 20 31 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23   1}}....########
f820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f860: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
f870: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
f880: 33 37 20 7b 73 71 6c 69 74 65 33 5f 77 69 6e 33  37 {sqlite3_win3
f890: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory 
f8a0: 66 75 6e 63 74 69 6f 6e 7d 20 2d 73 65 74 75 70  function} -setup
f8b0: 20 7b 0d 0a 20 20 73 65 74 20 64 69 72 65 63 74   {..  set direct
f8c0: 6f 72 79 28 62 61 73 65 29 20 5b 67 65 74 44 61  ory(base) [getDa
f8d0: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
f8e0: 0d 0a 0d 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e  ....  if {[strin
f8f0: 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74  g length $direct
f900: 6f 72 79 28 62 61 73 65 29 5d 20 3d 3d 20 30 20  ory(base)] == 0 
f910: 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 21 5b 66 69  || \..      ![fi
f920: 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63  le exists $direc
f930: 74 6f 72 79 28 62 61 73 65 29 5d 20 7c 7c 20 5c  tory(base)] || \
f940: 0d 0a 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69  ..      ![file i
f950: 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire
f960: 63 74 6f 72 79 28 62 61 73 65 29 5d 7d 20 74 68  ctory(base)]} th
f970: 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20  en {..    error 
f980: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 62 61 73  [appendArgs "bas
f990: 65 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20  e directory \"" 
f9a0: 24 64 69 72 65 63 74 6f 72 79 28 62 61 73 65 29  $directory(base)
f9b0: 20 22 5c 22 20 69 73 20 69 6e 76 61 6c 69 64 22   "\" is invalid"
f9c0: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ]..  }....  set 
f9d0: 64 69 72 65 63 74 6f 72 79 28 64 61 74 61 29 20  directory(data) 
f9e0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire
f9f0: 63 74 6f 72 79 28 62 61 73 65 29 20 5c 0d 0a 20  ctory(base) \.. 
fa00: 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
fa10: 20 73 71 6c 69 74 65 20 2e 64 61 74 61 2e 20 5b   sqlite .data. [
fa20: 70 69 64 5d 5d 5d 0d 0a 0d 0a 20 20 66 69 6c 65  pid]]]....  file
fa30: 20 6d 6b 64 69 72 20 24 64 69 72 65 63 74 6f 72   mkdir $director
fa40: 79 28 64 61 74 61 29 0d 0a 0d 0a 20 20 74 70 75  y(data)....  tpu
fa50: 74 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  ts $test_channel
fa60: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d   [appendArgs "--
fa70: 2d 2d 20 63 72 65 61 74 65 64 20 64 61 74 61 20  -- created data 
fa80: 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d  directory \"" \.
fa90: 0a 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72  .      $director
faa0: 79 28 64 61 74 61 29 20 5c 22 5c 6e 5d 0d 0a 0d  y(data) \"\n]...
fab0: 0a 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79  .  set directory
fac0: 28 74 65 6d 70 29 20 5b 66 69 6c 65 20 6a 6f 69  (temp) [file joi
fad0: 6e 20 24 64 69 72 65 63 74 6f 72 79 28 62 61 73  n $directory(bas
fae0: 65 29 20 5c 0d 0a 20 20 20 20 20 20 5b 61 70 70  e) \..      [app
faf0: 65 6e 64 41 72 67 73 20 73 71 6c 69 74 65 20 2e  endArgs sqlite .
fb00: 74 65 6d 70 2e 20 5b 70 69 64 5d 5d 5d 0d 0a 0d  temp. [pid]]]...
fb10: 0a 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 64  .  file mkdir $d
fb20: 69 72 65 63 74 6f 72 79 28 74 65 6d 70 29 0d 0a  irectory(temp)..
fb30: 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74 5f  ..  tputs $test_
fb40: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
fb50: 72 67 73 20 22 2d 2d 2d 2d 20 63 72 65 61 74 65  rgs "---- create
fb60: 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
fb70: 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20  ctory \"" \..   
fb80: 20 20 20 24 64 69 72 65 63 74 6f 72 79 28 74 65     $directory(te
fb90: 6d 70 29 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 70  mp) \"\n]....  p
fba0: 72 6f 63 20 74 68 72 65 61 64 53 74 61 72 74 20  roc threadStart 
fbb0: 7b 7d 20 7b 0d 0a 20 20 20 20 77 68 69 6c 65 20  {} {..    while 
fbc0: 7b 24 3a 3a 69 20 3c 20 31 30 30 30 7d 20 7b 0d  {$::i < 1000} {.
fbd0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 66 6f 75  .      set ::fou
fbe0: 6e 64 28 74 65 6d 70 29 20 5b 65 78 70 72 20 5c  nd(temp) [expr \
fbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 5b 6c 6c  ..          {[ll
fc00: 65 6e 67 74 68 20 5b 66 69 6c 65 20 6c 69 73 74  ength [file list
fc10: 20 24 3a 3a 64 69 72 65 63 74 6f 72 79 28 74 65   $::directory(te
fc20: 6d 70 29 20 65 74 69 6c 71 73 5f 2a 5d 5d 20 3e  mp) etilqs_*]] >
fc30: 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66   0}]....      if
fc40: 20 7b 24 3a 3a 66 6f 75 6e 64 28 74 65 6d 70 29   {$::found(temp)
fc50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
fc60: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..      
fc70: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  }..    }..  }...
fc80: 0a 20 20 6f 62 6a 65 63 74 20 69 6d 70 6f 72 74  .  object import
fc90: 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e   System.Threadin
fca0: 67 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  g..} -body {..  
fcb0: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
fcc0: 5d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  ]....  #..  # NO
fcd0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6d  TE: Attempt to m
fce0: 6f 64 69 66 79 20 74 68 65 20 70 72 6f 63 65 73  odify the proces
fcf0: 73 2d 77 69 64 65 20 64 61 74 61 20 61 6e 64 20  s-wide data and 
fd00: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
fd10: 6f 72 79 0d 0a 20 20 23 20 20 20 20 20 20 20 73  ory..  #       s
fd20: 65 74 74 69 6e 67 73 20 66 6f 72 20 74 68 65 20  ettings for the 
fd30: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
fd40: 61 72 79 2e 0d 0a 20 20 23 0d 0a 20 20 6c 61 70  ary...  #..  lap
fd50: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62 6a  pend result [obj
fd60: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
fd70: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
fd80: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
fd90: 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
fda0: 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c  ativeMethods sql
fdb0: 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
fdc0: 69 72 65 63 74 6f 72 79 20 31 20 5c 0d 0a 20 20  irectory 1 \..  
fdd0: 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 28 64      $directory(d
fde0: 61 74 61 29 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  ata)]....  lappe
fdf0: 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63  nd result [objec
fe00: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
fe10: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
fe20: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
fe30: 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
fe40: 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74  iveMethods sqlit
fe50: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
fe60: 65 63 74 6f 72 79 20 32 20 5c 0d 0a 20 20 20 20  ectory 2 \..    
fe70: 20 20 24 64 69 72 65 63 74 6f 72 79 28 74 65 6d    $directory(tem
fe80: 70 29 5d 0d 0a 0d 0a 20 20 73 65 74 75 70 44 62  p)]....  setupDb
fe90: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
fea0: 61 74 61 2d 31 2e 33 37 2e 64 62 5d 20 22 22 20  ata-1.37.db] "" 
feb0: 22 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73  "" "" "" "" fals
fec0: 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61  e false false fa
fed0: 6c 73 65 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  lse....  sql exe
fee0: 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45  cute $db "CREATE
fef0: 20 54 41 42 4c 45 20 74 31 28 78 20 4e 4f 54 20   TABLE t1(x NOT 
ff00: 4e 55 4c 4c 29 3b 22 0d 0a 0d 0a 20 20 66 6f 72  NULL);"....  for
ff10: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c   {set i 1} {$i <
ff20: 20 31 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b   100} {incr i} {
ff30: 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74  ..    sql execut
ff40: 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
ff50: 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
ff60: 28 3f 29 3b 22 20 5b 6c 69 73 74 20 70 61 72 61  (?);" [list para
ff70: 6d 31 20 53 74 72 69 6e 67 20 24 69 5d 0d 0a 20  m1 String $i].. 
ff80: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 66 6f 75 6e   }....  set foun
ff90: 64 28 64 61 74 61 29 20 5b 65 78 70 72 20 5c 0d  d(data) [expr \.
ffa0: 0a 20 20 20 20 20 20 7b 5b 6c 6c 65 6e 67 74 68  .      {[llength
ffb0: 20 5b 66 69 6c 65 20 6c 69 73 74 20 24 64 69 72   [file list $dir
ffc0: 65 63 74 6f 72 79 28 64 61 74 61 29 20 24 66 69  ectory(data) $fi
ffd0: 6c 65 4e 61 6d 65 5d 5d 20 3d 3d 20 31 7d 5d 0d  leName]] == 1}].
ffe0: 0a 0d 0a 20 20 73 65 74 20 74 20 5b 6f 62 6a 65  ...  set t [obje
fff0: 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
10000 20 54 68 72 65 61 64 20 74 68 72 65 61 64 53 74   Thread threadSt
10010 61 72 74 5d 0d 0a 20 20 73 71 6c 20 65 78 65 63  art]..  sql exec
10020 75 74 65 20 24 64 62 20 22 42 45 47 49 4e 20 54  ute $db "BEGIN T
10030 52 41 4e 53 41 43 54 49 4f 4e 3b 22 3b 20 24 74  RANSACTION;"; $t
10040 20 53 74 61 72 74 0d 0a 0d 0a 20 20 66 6f 72 20   Start....  for 
10050 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c 20  {set i 1} {$i < 
10060 31 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  1000} {incr i} {
10070 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
10080 4f 54 45 3a 20 45 78 65 63 75 74 65 20 61 20 71  OTE: Execute a q
10090 75 65 72 79 20 74 68 61 74 20 73 68 6f 75 6c 64  uery that should
100a0 20 66 6f 72 63 65 20 74 68 65 20 63 72 65 61 74   force the creat
100b0 69 6f 6e 20 6f 66 20 61 20 74 65 6d 70 6f 72 61  ion of a tempora
100c0 72 79 20 66 69 6c 65 0d 0a 20 20 20 20 23 20 20  ry file..    #  
100d0 20 20 20 20 20 66 6f 72 20 69 74 73 20 73 74 61       for its sta
100e0 74 65 6d 65 6e 74 20 6a 6f 75 72 6e 61 6c 2e 0d  tement journal..
100f0 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 71 6c 20  .    #..    sql 
10100 65 78 65 63 75 74 65 20 24 64 62 20 22 55 50 44  execute $db "UPD
10110 41 54 45 20 74 31 20 53 45 54 20 78 20 3d 20 3f  ATE t1 SET x = ?
10120 3b 22 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20  ;" [list param1 
10130 53 74 72 69 6e 67 20 24 69 5d 0d 0a 0d 0a 20 20  String $i]....  
10140 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
10150 20 47 69 76 65 20 74 68 65 20 6f 74 68 65 72 20   Give the other 
10160 74 68 72 65 61 64 20 73 6f 6d 65 20 74 69 6d 65  thread some time
10170 20 74 6f 20 6e 6f 74 69 63 65 20 74 68 65 20 74   to notice the t
10180 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 2e 0d 0a  emporary file...
10190 20 20 20 20 23 0d 0a 20 20 20 20 61 66 74 65 72      #..    after
101a0 20 5b 65 78 70 72 20 7b 69 6e 74 28 72 61 6e 64   [expr {int(rand
101b0 28 29 20 2a 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a  () * 1000)}]....
101c0 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
101d0 45 3a 20 53 74 6f 70 20 77 68 65 6e 20 74 68 65  E: Stop when the
101e0 20 6f 74 68 65 72 20 74 68 72 65 61 64 20 63 6f   other thread co
101f0 6e 66 69 72 6d 73 20 74 68 61 74 20 74 68 65 20  nfirms that the 
10200 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 20 77  temporary file w
10210 61 73 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  as..    #       
10220 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 63  created in the c
10230 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f 72 79  orrect directory
10240 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66  ...    #..    if
10250 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66   {[info exists f
10260 6f 75 6e 64 28 74 65 6d 70 29 5d 20 26 26 20 24  ound(temp)] && $
10270 66 6f 75 6e 64 28 74 65 6d 70 29 7d 20 74 68 65  found(temp)} the
10280 6e 20 7b 0d 0a 20 20 20 20 20 20 62 72 65 61 6b  n {..      break
10290 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
102a0 20 20 24 74 20 4a 6f 69 6e 3b 20 73 71 6c 20 65    $t Join; sql e
102b0 78 65 63 75 74 65 20 24 64 62 20 22 43 4f 4d 4d  xecute $db "COMM
102c0 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 22  IT TRANSACTION;"
102d0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
102e0 73 75 6c 74 20 24 66 6f 75 6e 64 28 64 61 74 61  sult $found(data
102f0 29 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65  ) [expr {[info e
10300 78 69 73 74 73 20 66 6f 75 6e 64 28 74 65 6d 70  xists found(temp
10310 29 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 24 66  )] ? \..      $f
10320 6f 75 6e 64 28 74 65 6d 70 29 20 3a 20 46 61 6c  ound(temp) : Fal
10330 73 65 7d 5d 3b 20 73 65 74 20 72 65 73 75 6c 74  se}]; set result
10340 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
10350 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 43    #..  # NOTE: C
10360 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73  lose the databas
10370 65 3b 20 68 6f 77 65 76 65 72 2c 20 64 6f 20 6e  e; however, do n
10380 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65  ot attempt to de
10390 6c 65 74 65 20 74 68 65 20 66 69 6c 65 20 61 73  lete the file as
103a0 0d 0a 20 20 23 20 20 20 20 20 20 20 69 74 20 69  ..  #       it i
103b0 73 20 6e 6f 74 20 6c 6f 63 61 74 65 64 20 69 6e  s not located in
103c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69   the database di
103d0 72 65 63 74 6f 72 79 20 6b 6e 6f 77 6e 20 74 6f  rectory known to
103e0 20 74 68 65 20 63 6c 65 61 6e 75 70 44 62 0d 0a   the cleanupDb..
103f0 20 20 23 20 20 20 20 20 20 20 70 72 6f 63 65 64    #       proced
10400 75 72 65 20 28 69 2e 65 2e 20 74 68 65 20 6f 6e  ure (i.e. the on
10410 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 67 65  e returned by ge
10420 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
10430 72 79 29 2e 0d 0a 20 20 23 0d 0a 20 20 63 6c 65  ry)...  #..  cle
10440 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
10450 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66   db true false f
10460 61 6c 73 65 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  alse....  #..  #
10470 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
10480 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20 70 72  o restore the pr
10490 6f 63 65 73 73 2d 77 69 64 65 20 64 61 74 61 20  ocess-wide data 
104a0 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69  and temporary di
104b0 72 65 63 74 6f 72 79 0d 0a 20 20 23 20 20 20 20  rectory..  #    
104c0 20 20 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20     settings for 
104d0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
104e0 6c 69 62 72 61 72 79 2e 0d 0a 20 20 23 0d 0a 20  library...  #.. 
104f0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 6f 62   catch {..    ob
10500 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
10510 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79  gs +NonPublic Sy
10520 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
10530 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
10540 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..        
10550 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
10560 74 5f 64 69 72 65 63 74 6f 72 79 20 31 20 6e 75  t_directory 1 nu
10570 6c 6c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 63 61 74  ll..  }....  cat
10580 63 68 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63 74  ch {..    object
10590 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
105a0 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d  NonPublic System
105b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
105c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
105d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 69   \..        sqli
105e0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
105f0 72 65 63 74 6f 72 79 20 32 20 6e 75 6c 6c 0d 0a  rectory 2 null..
10600 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69 6e    }....  if {[in
10610 66 6f 20 65 78 69 73 74 73 20 64 69 72 65 63 74  fo exists direct
10620 6f 72 79 28 64 61 74 61 29 5d 20 26 26 20 5c 0d  ory(data)] && \.
10630 0a 20 20 20 20 20 20 5b 66 69 6c 65 20 65 78 69  .      [file exi
10640 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 28 64  sts $directory(d
10650 61 74 61 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ata)] && \..    
10660 20 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74    [file isdirect
10670 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 28 64  ory $directory(d
10680 61 74 61 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ata)]} then {.. 
10690 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d     file delete -
106a0 72 65 63 75 72 73 69 76 65 20 2d 66 6f 72 63 65  recursive -force
106b0 20 24 64 69 72 65 63 74 6f 72 79 28 64 61 74 61   $directory(data
106c0 29 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  )..  }....  if {
106d0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 69 72  [info exists dir
106e0 65 63 74 6f 72 79 28 74 65 6d 70 29 5d 20 26 26  ectory(temp)] &&
106f0 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69 6c 65 20   \..      [file 
10700 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72  exists $director
10710 79 28 74 65 6d 70 29 5d 20 26 26 20 5c 0d 0a 20  y(temp)] && \.. 
10720 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72       [file isdir
10730 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72  ectory $director
10740 79 28 74 65 6d 70 29 5d 7d 20 74 68 65 6e 20 7b  y(temp)]} then {
10750 0d 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74  ..    file delet
10760 65 20 2d 72 65 63 75 72 73 69 76 65 20 2d 66 6f  e -recursive -fo
10770 72 63 65 20 24 64 69 72 65 63 74 6f 72 79 28 74  rce $directory(t
10780 65 6d 70 29 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 6f  emp)..  }....  o
10790 62 6a 65 63 74 20 75 6e 69 6d 70 6f 72 74 20 2d  bject unimport -
107a0 69 6d 70 6f 72 74 70 61 74 74 65 72 6e 20 53 79  importpattern Sy
107b0 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 0d 0a  stem.Threading..
107c0 0d 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78  ..  if {[info ex
107d0 69 73 74 73 20 74 5d 20 26 26 20 5b 63 6c 65 61  ists t] && [clea
107e0 6e 75 70 54 68 72 65 61 64 20 24 74 5d 7d 20 74  nupThread $t]} t
107f0 68 65 6e 20 7b 0d 0a 20 20 20 20 75 6e 73 65 74  hen {..    unset
10800 20 74 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 63 61 74   t..  }....  cat
10810 63 68 20 7b 6f 62 6a 65 63 74 20 72 65 6d 6f 76  ch {object remov
10820 65 63 61 6c 6c 62 61 63 6b 20 74 68 72 65 61 64  ecallback thread
10830 53 74 61 72 74 7d 0d 0a 0d 0a 20 20 75 6e 73 65  Start}....  unse
10840 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 20  t -nocomplain t 
10850 66 6f 75 6e 64 20 69 20 64 62 20 66 69 6c 65 4e  found i db fileN
10860 61 6d 65 20 72 65 73 75 6c 74 20 64 69 72 65 63  ame result direc
10870 74 6f 72 79 0d 0a 0d 0a 20 20 72 65 6e 61 6d 65  tory....  rename
10880 20 74 68 72 65 61 64 53 74 61 72 74 20 22 22 0d   threadStart "".
10890 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
108a0 7b 65 61 67 6c 65 20 77 69 6e 64 6f 77 73 20 6d  {eagle windows m
108b0 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
108c0 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
108d0 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
108e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 71  m.Data.SQLite sq
108f0 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
10900 64 69 72 65 63 74 6f 72 79 7d 20 2d 72 65 73 75  directory} -resu
10910 6c 74 20 7b 4f 6b 20 4f 6b 20 54 72 75 65 20 54  lt {Ok Ok True T
10920 72 75 65 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  rue}}....#######
10930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10970 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
10980 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
10990 2e 33 38 20 7b 73 65 72 69 61 6c 69 7a 61 74 69  .38 {serializati
109a0 6f 6e 20 6f 66 20 53 51 4c 69 74 65 45 78 63 65  on of SQLiteExce
109b0 70 74 69 6f 6e 7d 20 2d 62 6f 64 79 20 7b 0d 0a  ption} -body {..
109c0 20 20 73 65 74 20 73 65 72 69 61 6c 69 7a 65 72    set serializer
109d0 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20   [object create 
109e0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..      
109f0 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 53  System.Runtime.S
10a00 65 72 69 61 6c 69 7a 61 74 69 6f 6e 2e 46 6f 72  erialization.For
10a10 6d 61 74 74 65 72 73 2e 42 69 6e 61 72 79 2e 42  matters.Binary.B
10a20 69 6e 61 72 79 46 6f 72 6d 61 74 74 65 72 5d 0d  inaryFormatter].
10a30 0a 0d 0a 20 20 73 65 74 20 73 74 72 65 61 6d 20  ...  set stream 
10a40 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
10a50 61 6c 69 61 73 20 53 79 73 74 65 6d 2e 49 4f 2e  alias System.IO.
10a60 4d 65 6d 6f 72 79 53 74 72 65 61 6d 5d 0d 0a 0d  MemoryStream]...
10a70 0a 20 20 73 65 74 20 65 78 63 65 70 74 69 6f 6e  .  set exception
10a80 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  (1) [object crea
10a90 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  te -alias \..   
10aa0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
10ab0 51 4c 69 74 65 2e 53 51 4c 69 74 65 45 78 63 65  QLite.SQLiteExce
10ac0 70 74 69 6f 6e 20 31 34 20 22 74 68 69 73 20 69  ption 14 "this i
10ad0 73 20 61 20 74 65 73 74 22 5d 3b 20 23 20 43 61  s a test"]; # Ca
10ae0 6e 74 4f 70 65 6e 0d 0a 0d 0a 20 20 24 73 65 72  ntOpen....  $ser
10af0 69 61 6c 69 7a 65 72 20 53 65 72 69 61 6c 69 7a  ializer Serializ
10b00 65 20 24 73 74 72 65 61 6d 20 24 65 78 63 65 70  e $stream $excep
10b10 74 69 6f 6e 28 31 29 0d 0a 0d 0a 20 20 24 73 74  tion(1)....  $st
10b20 72 65 61 6d 20 53 65 65 6b 20 30 20 42 65 67 69  ream Seek 0 Begi
10b30 6e 0d 0a 0d 0a 20 20 73 65 74 20 65 78 63 65 70  n....  set excep
10b40 74 69 6f 6e 28 32 29 20 5b 24 73 65 72 69 61 6c  tion(2) [$serial
10b50 69 7a 65 72 20 2d 61 6c 69 61 73 20 44 65 73 65  izer -alias Dese
10b60 72 69 61 6c 69 7a 65 20 24 73 74 72 65 61 6d 5d  rialize $stream]
10b70 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 24 65 78 63  ....  list [$exc
10b80 65 70 74 69 6f 6e 28 31 29 20 52 65 73 75 6c 74  eption(1) Result
10b90 43 6f 64 65 5d 20 5b 24 65 78 63 65 70 74 69 6f  Code] [$exceptio
10ba0 6e 28 31 29 20 4d 65 73 73 61 67 65 5d 20 5c 0d  n(1) Message] \.
10bb0 0a 20 20 20 20 20 20 5b 24 65 78 63 65 70 74 69  .      [$excepti
10bc0 6f 6e 28 32 29 20 52 65 73 75 6c 74 43 6f 64 65  on(2) ResultCode
10bd0 5d 20 5b 24 65 78 63 65 70 74 69 6f 6e 28 32 29  ] [$exception(2)
10be0 20 4d 65 73 73 61 67 65 5d 20 5c 0d 0a 20 20 20   Message] \..   
10bf0 20 20 20 5b 65 78 70 72 20 7b 5b 24 65 78 63 65     [expr {[$exce
10c00 70 74 69 6f 6e 28 31 29 20 52 65 73 75 6c 74 43  ption(1) ResultC
10c10 6f 64 65 5d 20 65 71 20 5b 24 65 78 63 65 70 74  ode] eq [$except
10c20 69 6f 6e 28 32 29 20 52 65 73 75 6c 74 43 6f 64  ion(2) ResultCod
10c30 65 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  e]}] \..      [e
10c40 78 70 72 20 7b 5b 24 65 78 63 65 70 74 69 6f 6e  xpr {[$exception
10c50 28 31 29 20 4d 65 73 73 61 67 65 5d 20 65 71 20  (1) Message] eq 
10c60 5b 24 65 78 63 65 70 74 69 6f 6e 28 32 29 20 4d  [$exception(2) M
10c70 65 73 73 61 67 65 5d 7d 5d 0d 0a 7d 20 2d 63 6c  essage]}]..} -cl
10c80 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74  eanup {..  unset
10c90 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 78 63   -nocomplain exc
10ca0 65 70 74 69 6f 6e 20 73 74 72 65 61 6d 20 73 65  eption stream se
10cb0 72 69 61 6c 69 7a 65 72 0d 0a 7d 20 2d 63 6f 6e  rializer..} -con
10cc0 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
10cd0 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
10ce0 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
10cf0 6c 74 20 5c 0d 0a 5b 73 74 72 69 6e 67 20 6d 61  lt \..[string ma
10d00 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d  p [list \n \r\n]
10d10 20 7b 43 61 6e 74 4f 70 65 6e 20 7b 75 6e 61 62   {CantOpen {unab
10d20 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61 74 61 62  le to open datab
10d30 61 73 65 20 66 69 6c 65 0d 0a 74 68 69 73 20 69  ase file..this i
10d40 73 20 61 20 74 65 73 74 7d 20 43 61 6e 74 4f 70  s a test} CantOp
10d50 65 6e 20 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70  en {unable to op
10d60 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  en database file
10d70 0d 0a 74 68 69 73 20 69 73 20 61 20 74 65 73 74  ..this is a test
10d80 7d 20 54 72 75 65 20 54 72 75 65 7d 5d 7d 0d 0a  } True True}]}..
10d90 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
10da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10de0 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
10df0 73 74 20 64 61 74 61 2d 31 2e 33 39 20 7b 75 6e  st data-1.39 {un
10e00 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61  encrypted databa
10e10 73 65 2c 20 77 69 74 68 20 70 61 73 73 77 6f 72  se, with passwor
10e20 64 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  d} -setup {..  s
10e30 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
10e40 4e 61 6d 65 20 64 61 74 61 2d 31 2e 33 39 2e 64  Name data-1.39.d
10e50 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
10e60 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
10e70 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
10e80 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78  1(x);"..  sql ex
10e90 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
10ea0 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
10eb0 4c 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63  LUES(1);"....  c
10ec0 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
10ed0 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65  me db true false
10ee0 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44   false..  setupD
10ef0 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22  b $fileName "" "
10f00 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72  " "" "" "Passwor
10f10 64 3d 31 32 33 34 35 3b 22 20 74 72 75 65 20 66  d=12345;" true f
10f20 61 6c 73 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65  alse....  set re
10f30 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
10f40 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
10f50 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
10f60 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
10f70 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
10f80 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a   "SELECT COUNT(*
10f90 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72  ) FROM t1;"} err
10fa0 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20  or] $error....  
10fb0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
10fc0 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
10fd0 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  te $db \..      
10fe0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
10ff0 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d  (x) VALUES(1);"}
11000 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
11010 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
11020 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20  ileName db true 
11030 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73  false false..  s
11040 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
11050 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" "" 
11060 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20  true false....  
11070 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
11080 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
11090 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  te $db \..      
110a0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
110b0 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d  (x) VALUES(1);"}
110c0 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
110d0 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
110e0 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
110f0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
11100 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20  scalar $db \..  
11110 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e      "SELECT COUN
11120 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20  T(*) FROM t1;"} 
11130 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d  error] $error...
11140 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
11150 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
11160 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
11170 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
11180 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72 20  ocomplain error 
11190 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61  result db fileNa
111a0 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
111b0 74 73 20 7b 65 61 67 6c 65 20 53 79 73 74 65 6d  ts {eagle System
111c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63  .Data.SQLite.Enc
111d0 72 79 70 74 69 6f 6e 20 6d 6f 6e 6f 42 75 67 32  ryption monoBug2
111e0 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a  8 command.sql\..
111f0 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
11200 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
11210 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20 72  SQLite} -match r
11220 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e  egexp -result {^
11230 31 5c 0d 0a 5c 7b 53 79 73 74 65 6d 5c 2e 44 61  1\..\{System\.Da
11240 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69  ta\.SQLite\.SQLi
11250 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78  teException \(0x
11260 38 30 30 30 34 30 30 35 5c 29 3a 20 66 69 6c 65  80004005\): file
11270 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72   is encrypted or
11280 20 69 73 5c 0d 0a 6e 6f 74 20 61 20 64 61 74 61   is\..not a data
11290 62 61 73 65 2e 2a 3f 5c 7d 20 31 20 5c 7b 53 79  base.*?\} 1 \{Sy
112a0 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69  stem\.Data\.SQLi
112b0 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74  te\.SQLiteExcept
112c0 69 6f 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35  ion \(0x80004005
112d0 5c 29 3a 5c 0d 0a 66 69 6c 65 20 69 73 20 65 6e  \):\..file is en
112e0 63 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f  crypted or is no
112f0 74 20 61 20 64 61 74 61 62 61 73 65 2e 2a 3f 5c  t a database.*?\
11300 7d 20 30 20 31 20 30 20 32 24 7d 7d 0d 0a 0d 0a  } 0 1 0 2$}}....
11310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
11360 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
11370 20 64 61 74 61 2d 31 2e 34 30 20 7b 65 6e 63 72   data-1.40 {encr
11380 79 70 74 65 64 20 64 61 74 61 62 61 73 65 2c 20  ypted database, 
11390 77 72 6f 6e 67 20 70 61 73 73 77 6f 72 64 7d 20  wrong password} 
113a0 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
113b0 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
113c0 65 20 64 61 74 61 2d 31 2e 34 30 2e 64 62 5d 20  e data-1.40.db] 
113d0 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73  "" "" "" "" "Pas
113e0 73 77 6f 72 64 3d 31 32 33 34 35 3b 22 0d 0a 7d  sword=12345;"..}
113f0 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20   -body {..  sql 
11400 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45  execute $db "CRE
11410 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
11420 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  "..  sql execute
11430 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
11440 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
11450 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  1);"....  cleanu
11460 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62  pDb $fileName db
11470 20 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73   true false fals
11480 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69  e..  setupDb $fi
11490 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20  leName "" "" "" 
114a0 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31 32 33  "" "Password=123
114b0 34 36 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d  46;" true false.
114c0 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  ...  set result 
114d0 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70  [list]....  lapp
114e0 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
114f0 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  h {sql execute -
11500 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
11510 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c  db \..      "SEL
11520 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f  ECT COUNT(*) FRO
11530 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24  M t1;"} error] $
11540 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65  error....  lappe
11550 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
11560 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64   {sql execute $d
11570 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45  b \..      "INSE
11580 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
11590 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72 6f  ALUES(1);"} erro
115a0 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 63  r] $error....  c
115b0 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
115c0 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65  me db true false
115d0 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44   false..  setupD
115e0 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22  b $fileName "" "
115f0 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72  " "" "" "Passwor
11600 64 3d 31 32 33 34 35 3b 22 20 74 72 75 65 20 66  d=12345;" true f
11610 61 6c 73 65 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  alse....  lappen
11620 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
11630 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62  {sql execute $db
11640 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52   \..      "INSER
11650 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
11660 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72 6f 72  LUES(1);"} error
11670 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61  ] $error....  la
11680 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
11690 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65  tch {sql execute
116a0 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
116b0 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53   $db \..      "S
116c0 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46  ELECT COUNT(*) F
116d0 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d  ROM t1;"} error]
116e0 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 73 65 74   $error....  set
116f0 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
11700 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
11710 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
11720 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
11730 61 69 6e 20 65 72 72 6f 72 20 72 65 73 75 6c 74  ain error result
11740 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
11750 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
11760 67 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  gle System.Data.
11770 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f  SQLite.Encryptio
11780 6e 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  n monoBug28 comm
11790 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c  and.sql\..compil
117a0 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
117b0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
117c0 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
117d0 2d 72 65 73 75 6c 74 20 7b 5e 31 5c 0d 0a 5c 7b  -result {^1\..\{
117e0 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51  System\.Data\.SQ
117f0 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65  Lite\.SQLiteExce
11800 70 74 69 6f 6e 20 5c 28 30 78 38 30 30 30 34 30  ption \(0x800040
11810 30 35 5c 29 3a 20 66 69 6c 65 20 69 73 20 65 6e  05\): file is en
11820 63 72 79 70 74 65 64 20 6f 72 20 69 73 5c 0d 0a  crypted or is\..
11830 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 2e 2a  not a database.*
11840 3f 5c 7d 20 31 20 5c 7b 53 79 73 74 65 6d 5c 2e  ?\} 1 \{System\.
11850 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51  Data\.SQLite\.SQ
11860 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28  LiteException \(
11870 30 78 38 30 30 30 34 30 30 35 5c 29 3a 5c 0d 0a  0x80004005\):\..
11880 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65  file is encrypte
11890 64 20 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61  d or is not a da
118a0 74 61 62 61 73 65 2e 2a 3f 5c 7d 20 30 20 31 20  tabase.*?\} 0 1 
118b0 30 20 32 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  0 2$}}....######
118c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
118d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
118e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
118f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11900 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
11910 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
11920 31 2e 34 31 20 7b 65 6e 63 72 79 70 74 65 64 20  1.41 {encrypted 
11930 64 61 74 61 62 61 73 65 2c 20 70 61 73 73 77 6f  database, passwo
11940 72 64 20 77 2f 73 74 61 72 74 2d 73 70 61 63 65  rd w/start-space
11950 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
11960 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
11970 61 6d 65 20 64 61 74 61 2d 31 2e 34 31 2e 64 62  ame data-1.41.db
11980 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  ] "" "" "" "" "P
11990 61 73 73 77 6f 72 64 3d 20 31 32 33 34 3b 22 0d  assword= 1234;".
119a0 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
119b0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
119c0 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
119d0 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  );"..  sql execu
119e0 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
119f0 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
11a00 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61  S(1);"....  clea
11a10 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
11a20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61  db true false fa
11a30 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24  lse..  setupDb $
11a40 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
11a50 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31  " "" "Password=1
11a60 32 33 34 3b 22 20 74 72 75 65 20 66 61 6c 73 65  234;" true false
11a70 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
11a80 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70   [list]....  lap
11a90 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
11aa0 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
11ab0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
11ac0 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45  $db \..      "SE
11ad0 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
11ae0 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20  OM t1;"} error] 
11af0 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70  $error....  lapp
11b00 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
11b10 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24  h {sql execute $
11b20 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53  db \..      "INS
11b30 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
11b40 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72  VALUES(1);"} err
11b50 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20  or] $error....  
11b60 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
11b70 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c 73  ame db true fals
11b80 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70  e false..  setup
11b90 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20  Db $fileName "" 
11ba0 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f  "" "" "" "Passwo
11bb0 72 64 3d 20 31 32 33 34 3b 22 20 74 72 75 65 20  rd= 1234;" true 
11bc0 66 61 6c 73 65 0d 0a 0d 0a 20 20 6c 61 70 70 65  false....  lappe
11bd0 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
11be0 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64   {sql execute $d
11bf0 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45  b \..      "INSE
11c00 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
11c10 41 4c 55 45 53 28 31 29 3b 22 7d 20 65 72 72 6f  ALUES(1);"} erro
11c20 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c  r] $error....  l
11c30 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
11c40 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74  atch {sql execut
11c50 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
11c60 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  r $db \..      "
11c70 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
11c80 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72  FROM t1;"} error
11c90 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 73 65  ] $error....  se
11ca0 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65  t result..} -cle
11cb0 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
11cc0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
11cd0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
11ce0 6c 61 69 6e 20 65 72 72 6f 72 20 72 65 73 75 6c  lain error resul
11cf0 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  t db fileName..}
11d00 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
11d10 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61  agle System.Data
11d20 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69  .SQLite.Encrypti
11d30 6f 6e 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  on monoBug28 com
11d40 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69  mand.sql\..compi
11d50 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
11d60 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
11d70 65 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 31 20  e} -result {0 1 
11d80 30 20 31 20 30 20 31 20 30 20 33 7d 7d 0d 0a 0d  0 1 0 1 0 3}}...
11d90 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
11da0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11db0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11dc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11de0 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
11df0 74 20 64 61 74 61 2d 31 2e 34 32 20 7b 65 6e 63  t data-1.42 {enc
11e00 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65 2c  rypted database,
11e10 20 77 2f 71 75 6f 74 65 64 2d 73 74 61 72 74 2d   w/quoted-start-
11e20 73 70 61 63 65 7d 20 2d 73 65 74 75 70 20 7b 0d  space} -setup {.
11e30 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
11e40 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
11e50 34 32 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20  42.db] "" "" "" 
11e60 22 22 20 22 50 61 73 73 77 6f 72 64 3d 5c 22 20  "" "Password=\" 
11e70 31 32 33 34 5c 22 3b 22 0d 0a 7d 20 2d 62 6f 64  1234\";"..} -bod
11e80 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
11e90 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54  te $db "CREATE T
11ea0 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20  ABLE t1(x);"..  
11eb0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
11ec0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
11ed0 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d  (x) VALUES(1);".
11ee0 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
11ef0 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65  fileName db true
11f00 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
11f10 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
11f20 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  e "" "" "" "" "P
11f30 61 73 73 77 6f 72 64 3d 31 32 33 34 3b 22 20 74  assword=1234;" t
11f40 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73  rue false....  s
11f50 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
11f60 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
11f70 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
11f80 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
11f90 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a  e scalar $db \..
11fa0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f        "SELECT CO
11fb0 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22  UNT(*) FROM t1;"
11fc0 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
11fd0 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
11fe0 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
11ff0 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
12000 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
12010 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
12020 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  1);"} error] $er
12030 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ror....  cleanup
12040 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
12050 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65  true false false
12060 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c  ..  setupDb $fil
12070 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
12080 22 20 22 50 61 73 73 77 6f 72 64 3d 5c 22 20 31  " "Password=\" 1
12090 32 33 34 5c 22 3b 22 20 74 72 75 65 20 66 61 6c  234\";" true fal
120a0 73 65 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  se....  lappend 
120b0 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
120c0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c  ql execute $db \
120d0 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20  ..      "INSERT 
120e0 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
120f0 45 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20  ES(1);"} error] 
12100 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70  $error....  lapp
12110 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63  end result [catc
12120 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  h {sql execute -
12130 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
12140 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c  db \..      "SEL
12150 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f  ECT COUNT(*) FRO
12160 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24  M t1;"} error] $
12170 65 72 72 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 72  error....  set r
12180 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
12190 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
121a0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
121b0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
121c0 6e 20 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64  n error result d
121d0 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
121e0 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
121f0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
12200 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20  Lite.Encryption 
12210 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
12220 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e  d.sql\..compile.
12230 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
12240 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
12250 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
12260 65 73 75 6c 74 20 7b 5e 31 5c 0d 0a 5c 7b 53 79  esult {^1\..\{Sy
12270 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69  stem\.Data\.SQLi
12280 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74  te\.SQLiteExcept
12290 69 6f 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35  ion \(0x80004005
122a0 5c 29 3a 20 66 69 6c 65 20 69 73 20 65 6e 63 72  \): file is encr
122b0 79 70 74 65 64 20 6f 72 20 69 73 5c 0d 0a 6e 6f  ypted or is\..no
122c0 74 20 61 20 64 61 74 61 62 61 73 65 2e 2a 3f 5c  t a database.*?\
122d0 7d 20 31 20 5c 7b 53 79 73 74 65 6d 5c 2e 44 61  } 1 \{System\.Da
122e0 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69  ta\.SQLite\.SQLi
122f0 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78  teException \(0x
12300 38 30 30 30 34 30 30 35 5c 29 3a 5c 0d 0a 66 69  80004005\):\..fi
12310 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20  le is encrypted 
12320 6f 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61  or is not a data
12330 62 61 73 65 2e 2a 3f 5c 7d 20 30 20 31 20 30 20  base.*?\} 0 1 0 
12340 32 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  2$}}....########
12350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12390 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
123a0 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
123b0 34 33 20 7b 65 6e 63 72 79 70 74 65 64 20 64 61  43 {encrypted da
123c0 74 61 62 61 73 65 2c 20 70 61 73 73 77 6f 72 64  tabase, password
123d0 20 77 2f 6d 69 64 2d 73 70 61 63 65 7d 20 2d 73   w/mid-space} -s
123e0 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
123f0 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
12400 64 61 74 61 2d 31 2e 34 33 2e 64 62 5d 20 22 22  data-1.43.db] ""
12410 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77   "" "" "" "Passw
12420 6f 72 64 3d 31 32 20 34 35 3b 22 0d 0a 7d 20 2d  ord=12 45;"..} -
12430 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78  body {..  sql ex
12440 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54  ecute $db "CREAT
12450 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b 22 0d  E TABLE t1(x);".
12460 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
12470 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
12480 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29  t1 (x) VALUES(1)
12490 3b 22 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  ;"....  cleanupD
124a0 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74  b $fileName db t
124b0 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d  rue false false.
124c0 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65  .  setupDb $file
124d0 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22  Name "" "" "" ""
124e0 20 22 50 61 73 73 77 6f 72 64 3d 31 32 34 35 3b   "Password=1245;
124f0 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a  " true false....
12500 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
12510 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  st]....  lappend
12520 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
12530 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
12540 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
12550 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
12560 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74   COUNT(*) FROM t
12570 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  1;"} error] $err
12580 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  or....  lappend 
12590 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
125a0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c  ql execute $db \
125b0 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20  ..      "INSERT 
125c0 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
125d0 45 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20  ES(1);"} error] 
125e0 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61  $error....  clea
125f0 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  nupDb $fileName 
12600 64 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61  db true false fa
12610 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24  lse..  setupDb $
12620 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22  fileName "" "" "
12630 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31  " "" "Password=1
12640 32 20 34 35 3b 22 20 74 72 75 65 20 66 61 6c 73  2 45;" true fals
12650 65 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  e....  lappend r
12660 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
12670 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d  l execute $db \.
12680 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49  .      "INSERT I
12690 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
126a0 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24  S(1);"} error] $
126b0 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65  error....  lappe
126c0 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
126d0 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   {sql execute -e
126e0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
126f0 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45  b \..      "SELE
12700 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d  CT COUNT(*) FROM
12710 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65   t1;"} error] $e
12720 72 72 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65  rror....  set re
12730 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
12740 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
12750 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
12760 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
12770 20 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62   error result db
12780 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
12790 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
127a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
127b0 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20 6d  ite.Encryption m
127c0 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
127d0 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
127e0 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
127f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
12800 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65  match regexp -re
12810 73 75 6c 74 20 7b 5e 31 5c 0d 0a 5c 7b 53 79 73  sult {^1\..\{Sys
12820 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74  tem\.Data\.SQLit
12830 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69  e\.SQLiteExcepti
12840 6f 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c  on \(0x80004005\
12850 29 3a 20 66 69 6c 65 20 69 73 20 65 6e 63 72 79  ): file is encry
12860 70 74 65 64 20 6f 72 20 69 73 5c 0d 0a 6e 6f 74  pted or is\..not
12870 20 61 20 64 61 74 61 62 61 73 65 2e 2a 3f 5c 7d   a database.*?\}
12880 20 31 20 5c 7b 53 79 73 74 65 6d 5c 2e 44 61 74   1 \{System\.Dat
12890 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74  a\.SQLite\.SQLit
128a0 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38  eException \(0x8
128b0 30 30 30 34 30 30 35 5c 29 3a 5c 0d 0a 66 69 6c  0004005\):\..fil
128c0 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
128d0 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
128e0 61 73 65 2e 2a 3f 5c 7d 20 30 20 31 20 30 20 32  ase.*?\} 0 1 0 2
128f0 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  $}}....#########
12900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12940 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
12950 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34  t {test data-1.4
12960 34 20 7b 65 6e 63 72 79 70 74 65 64 20 64 61 74  4 {encrypted dat
12970 61 62 61 73 65 2c 20 70 61 73 73 77 6f 72 64 20  abase, password 
12980 77 2f 65 6e 64 2d 73 70 61 63 65 7d 20 2d 73 65  w/end-space} -se
12990 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
129a0 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
129b0 61 74 61 2d 31 2e 34 34 2e 64 62 5d 20 22 22 20  ata-1.44.db] "" 
129c0 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f  "" "" "" "Passwo
129d0 72 64 3d 31 32 33 34 20 3b 22 0d 0a 7d 20 2d 62  rd=1234 ;"..} -b
129e0 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65  ody {..  sql exe
129f0 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45  cute $db "CREATE
12a00 20 54 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a   TABLE t1(x);"..
12a10 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
12a20 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
12a30 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
12a40 22 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  "....  cleanupDb
12a50 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72   $fileName db tr
12a60 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  ue false false..
12a70 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e    setupDb $fileN
12a80 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20  ame "" "" "" "" 
12a90 22 50 61 73 73 77 6f 72 64 3d 31 32 33 34 3b 22  "Password=1234;"
12aa0 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20   true false.... 
12ab0 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
12ac0 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t]....  lappend 
12ad0 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
12ae0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
12af0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
12b00 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
12b10 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
12b20 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f  ;"} error] $erro
12b30 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  r....  lappend r
12b40 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
12b50 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d  l execute $db \.
12b60 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49  .      "INSERT I
12b70 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
12b80 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24  S(1);"} error] $
12b90 65 72 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e  error....  clean
12ba0 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64  upDb $fileName d
12bb0 62 20 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c  b true false fal
12bc0 73 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66  se..  setupDb $f
12bd0 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22  ileName "" "" ""
12be0 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31 32   "" "Password=12
12bf0 33 34 20 3b 22 20 74 72 75 65 20 66 61 6c 73 65  34 ;" true false
12c00 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
12c10 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
12c20 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a   execute $db \..
12c30 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e        "INSERT IN
12c40 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
12c50 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65  (1);"} error] $e
12c60 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  rror....  lappen
12c70 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
12c80 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  {sql execute -ex
12c90 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
12ca0 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43   \..      "SELEC
12cb0 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20  T COUNT(*) FROM 
12cc0 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  t1;"} error] $er
12cd0 72 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  ror....  set res
12ce0 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
12cf0 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
12d00 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
12d10 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
12d20 65 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20  error result db 
12d30 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
12d40 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
12d50 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12d60 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 20 6d 6f  te.Encryption mo
12d70 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
12d80 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
12d90 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
12da0 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
12db0 65 73 75 6c 74 20 7b 30 20 31 20 30 20 31 20 30  esult {0 1 0 1 0
12dc0 20 31 20 30 20 33 7d 7d 0d 0a 0d 0a 23 23 23 23   1 0 3}}....####
12dd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12de0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12e10 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
12e20 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
12e30 61 2d 31 2e 34 35 20 7b 65 6e 63 72 79 70 74 65  a-1.45 {encrypte
12e40 64 20 64 61 74 61 62 61 73 65 2c 20 77 2f 71 75  d database, w/qu
12e50 6f 74 65 64 2d 65 6e 64 2d 73 70 61 63 65 7d 20  oted-end-space} 
12e60 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
12e70 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
12e80 65 20 64 61 74 61 2d 31 2e 34 35 2e 64 62 5d 20  e data-1.45.db] 
12e90 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73  "" "" "" "" "Pas
12ea0 73 77 6f 72 64 3d 5c 22 31 32 33 34 20 5c 22 3b  sword=\"1234 \";
12eb0 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  "..} -body {..  
12ec0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
12ed0 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
12ee0 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65  (x);"..  sql exe
12ef0 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
12f00 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c   INTO t1 (x) VAL
12f10 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63 6c  UES(1);"....  cl
12f20 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
12f30 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20  e db true false 
12f40 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44 62  false..  setupDb
12f50 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" ""
12f60 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64   "" "" "Password
12f70 3d 31 32 33 34 3b 22 20 74 72 75 65 20 66 61 6c  =1234;" true fal
12f80 73 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  se....  set resu
12f90 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c  lt [list]....  l
12fa0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
12fb0 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74  atch {sql execut
12fc0 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
12fd0 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  r $db \..      "
12fe0 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
12ff0 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f 72  FROM t1;"} error
13000 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61  ] $error....  la
13010 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
13020 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65  tch {sql execute
13030 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
13040 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
13050 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20 65  ) VALUES(1);"} e
13060 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a  rror] $error....
13070 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
13080 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61  eName db true fa
13090 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74  lse false..  set
130a0 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName "
130b0 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73  " "" "" "" "Pass
130c0 77 6f 72 64 3d 5c 22 31 32 33 34 20 5c 22 3b 22  word=\"1234 \";"
130d0 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20   true false.... 
130e0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
130f0 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
13100 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ute $db \..     
13110 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
13120 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
13130 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
13140 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
13150 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
13160 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
13170 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
13180 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55       "SELECT COU
13190 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d  NT(*) FROM t1;"}
131a0 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
131b0 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
131c0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
131d0 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
131e0 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
131f0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72  nocomplain error
13200 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
13210 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
13220 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73 74 65  nts {eagle Syste
13230 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e  m.Data.SQLite.En
13240 63 72 79 70 74 69 6f 6e 20 6d 6f 6e 6f 42 75 67  cryption monoBug
13250 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  28 command.sql\.
13260 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
13270 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
13280 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20  .SQLite} -match 
13290 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b  regexp -result {
132a0 5e 31 5c 0d 0a 5c 7b 53 79 73 74 65 6d 5c 2e 44  ^1\..\{System\.D
132b0 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c  ata\.SQLite\.SQL
132c0 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30  iteException \(0
132d0 78 38 30 30 30 34 30 30 35 5c 29 3a 20 66 69 6c  x80004005\): fil
132e0 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
132f0 72 20 69 73 5c 0d 0a 6e 6f 74 20 61 20 64 61 74  r is\..not a dat
13300 61 62 61 73 65 2e 2a 3f 5c 7d 20 31 20 5c 7b 53  abase.*?\} 1 \{S
13310 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c  ystem\.Data\.SQL
13320 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70  ite\.SQLiteExcep
13330 74 69 6f 6e 20 5c 28 30 78 38 30 30 30 34 30 30  tion \(0x8000400
13340 35 5c 29 3a 5c 0d 0a 66 69 6c 65 20 69 73 20 65  5\):\..file is e
13350 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e  ncrypted or is n
13360 6f 74 20 61 20 64 61 74 61 62 61 73 65 2e 2a 3f  ot a database.*?
13370 5c 7d 20 30 20 31 20 30 20 32 24 7d 7d 0d 0a 0d  \} 0 1 0 2$}}...
13380 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
13390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
133a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
133b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
133c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
133d0 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
133e0 74 20 64 61 74 61 2d 31 2e 34 36 20 7b 65 6e 63  t data-1.46 {enc
133f0 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65 2c  rypted database,
13400 20 70 61 73 73 77 6f 72 64 20 76 69 61 20 62 75   password via bu
13410 69 6c 64 65 72 7d 20 2d 73 65 74 75 70 20 7b 0d  ilder} -setup {.
13420 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
13430 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
13440 34 36 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20  46.db] "" "" "" 
13450 22 22 20 22 50 61 73 73 77 6f 72 64 3d 36 37 20  "" "Password=67 
13460 38 39 3b 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  89;"..} -body {.
13470 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
13480 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
13490 20 74 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20   t1(x);"..  sql 
134a0 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
134b0 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
134c0 56 41 4c 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20  VALUES(1);".... 
134d0 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
134e0 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c  Name db true fal
134f0 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65  se false....  se
13500 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  t connectionStri
13510 6e 67 42 75 69 6c 64 65 72 20 5b 6f 62 6a 65 63  ngBuilder [objec
13520 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20  t create -alias 
13530 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  \..      System.
13540 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
13550 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  teConnectionStri
13560 6e 67 42 75 69 6c 64 65 72 5d 0d 0a 0d 0a 20 20  ngBuilder]....  
13570 24 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  $connectionStrin
13580 67 42 75 69 6c 64 65 72 20 44 61 74 61 53 6f 75  gBuilder DataSou
13590 72 63 65 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69  rce \..      [fi
135a0 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
135b0 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
135c0 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 24  fileName]....  $
135d0 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67  connectionString
135e0 42 75 69 6c 64 65 72 20 50 61 73 73 77 6f 72 64  Builder Password
135f0 20 22 36 37 20 38 39 22 0d 0a 0d 0a 20 20 73 65   "67 89"....  se
13600 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62  t connection [ob
13610 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69  ject create -ali
13620 61 73 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  as \..      Syst
13630 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
13640 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
13650 5c 0d 0a 20 20 20 20 20 20 5b 24 63 6f 6e 6e 65  \..      [$conne
13660 63 74 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64  ctionStringBuild
13670 65 72 20 54 6f 53 74 72 69 6e 67 5d 20 74 72 75  er ToString] tru
13680 65 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74  e]....  $connect
13690 69 6f 6e 20 4f 70 65 6e 3b 20 61 64 64 44 62 43  ion Open; addDbC
136a0 6f 6e 6e 65 63 74 69 6f 6e 20 24 63 6f 6e 6e 65  onnection $conne
136b0 63 74 69 6f 6e 0d 0a 0d 0a 20 20 73 65 74 20 72  ction....  set r
136c0 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
136d0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
136e0 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65   [catch {sql exe
136f0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
13700 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20  alar $db \..    
13710 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28    "SELECT COUNT(
13720 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72  *) FROM t1;"} er
13730 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20  ror] $error.... 
13740 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
13750 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
13760 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ute $db \..     
13770 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
13780 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
13790 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
137a0 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
137b0 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65  fileName db true
137c0 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
137d0 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
137e0 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  e "" "" "" "" "P
137f0 61 73 73 77 6f 72 64 3d 5c 22 36 37 20 38 39 5c  assword=\"67 89\
13800 22 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a  ";" true false..
13810 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
13820 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
13830 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20  xecute $db \..  
13840 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
13850 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
13860 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  );"} error] $err
13870 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  or....  lappend 
13880 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
13890 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
138a0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
138b0 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
138c0 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
138d0 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f  ;"} error] $erro
138e0 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  r....  set resul
138f0 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
13900 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
13910 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  lain connection.
13920 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
13930 66 69 6c 65 4e 61 6d 65 3b 20 23 20 4e 4f 54 45  fileName; # NOTE
13940 3a 20 41 66 74 65 72 20 6f 62 6a 65 63 74 20 64  : After object d
13950 69 73 70 6f 73 61 6c 2e 0d 0a 0d 0a 20 20 75 6e  isposal.....  un
13960 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
13970 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67  connectionString
13980 42 75 69 6c 64 65 72 20 65 72 72 6f 72 20 72 65  Builder error re
13990 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
139a0 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
139b0 20 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44   {eagle System.D
139c0 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79  ata.SQLite.Encry
139d0 70 74 69 6f 6e 20 6d 6f 6e 6f 42 75 67 32 38 20  ption monoBug28 
139e0 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f  command.sql\..co
139f0 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
13a00 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
13a10 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 30  Lite} -result {0
13a20 20 31 20 30 20 31 20 30 20 31 20 30 20 33 7d 7d   1 0 1 0 1 0 3}}
13a30 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
13a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13a80 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
13a90 74 65 73 74 20 64 61 74 61 2d 31 2e 34 37 20 7b  test data-1.47 {
13aa0 71 75 6f 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f  quoted connectio
13ab0 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74  n string propert
13ac0 69 65 73 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ies} -setup {.. 
13ad0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
13ae0 69 6e 20 72 65 73 75 6c 74 20 6c 69 73 74 20 70  in result list p
13af0 61 69 72 20 73 74 72 69 6e 67 73 20 73 74 72 69  air strings stri
13b00 6e 67 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  ng..} -body {.. 
13b10 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
13b20 74 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 74 72 69  t]....  set stri
13b30 6e 67 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ngs [list \..   
13b40 20 20 20 22 4f 6e 65 54 77 6f 3d 54 68 72 65 65     "OneTwo=Three
13b50 46 6f 75 72 22 20 22 5c 22 4f 6e 65 54 77 6f 5c  Four" "\"OneTwo\
13b60 22 3d 5c 22 54 68 72 65 65 46 6f 75 72 5c 22 22  "=\"ThreeFour\""
13b70 20 5c 0d 0a 20 20 20 20 20 20 22 4f 6e 65 20 54   \..      "One T
13b80 77 6f 3d 54 68 72 65 65 20 46 6f 75 72 22 20 22  wo=Three Four" "
13b90 5c 22 4f 6e 65 20 54 77 6f 5c 22 3d 5c 22 54 68  \"One Two\"=\"Th
13ba0 72 65 65 20 46 6f 75 72 5c 22 22 20 5c 0d 0a 20  ree Four\"" \.. 
13bb0 20 20 20 20 20 22 4f 6e 65 54 77 6f 3d 54 68 72       "OneTwo=Thr
13bc0 65 65 46 6f 75 72 3b 22 20 22 5c 22 4f 6e 65 54  eeFour;" "\"OneT
13bd0 77 6f 5c 22 3d 5c 22 54 68 72 65 65 46 6f 75 72  wo\"=\"ThreeFour
13be0 5c 22 3b 22 20 5c 0d 0a 20 20 20 20 20 20 22 4f  \";" \..      "O
13bf0 6e 65 20 54 77 6f 3d 54 68 72 65 65 20 46 6f 75  ne Two=Three Fou
13c00 72 3b 22 20 22 5c 22 4f 6e 65 20 54 77 6f 5c 22  r;" "\"One Two\"
13c10 3d 5c 22 54 68 72 65 65 20 46 6f 75 72 5c 22 3b  =\"Three Four\";
13c20 22 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20  "]....  foreach 
13c30 73 74 72 69 6e 67 20 24 73 74 72 69 6e 67 73 20  string $strings 
13c40 7b 0d 0a 20 20 20 20 73 65 74 20 6c 69 73 74 20  {..    set list 
13c50 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
13c60 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
13c70 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74   \..        Syst
13c80 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
13c90 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
13ca0 50 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 53  ParseConnectionS
13cb0 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20  tring \..       
13cc0 20 24 73 74 72 69 6e 67 20 66 61 6c 73 65 5d 0d   $string false].
13cd0 0a 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 66 6f  ...    object fo
13ce0 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69  reach -alias pai
13cf0 72 20 24 6c 69 73 74 20 7b 0d 0a 20 20 20 20 20  r $list {..     
13d00 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
13d10 5b 6c 69 73 74 20 5b 24 70 61 69 72 20 4b 65 79  [list [$pair Key
13d20 5d 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 5d  ] [$pair Value]]
13d30 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
13d40 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20    set result..} 
13d50 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e  -cleanup {..  un
13d60 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
13d70 72 65 73 75 6c 74 20 6c 69 73 74 20 70 61 69 72  result list pair
13d80 20 73 74 72 69 6e 67 73 20 73 74 72 69 6e 67 0d   strings string.
13d90 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
13da0 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61  {eagle System.Da
13db0 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
13dc0 6c 74 20 7b 7b 4f 6e 65 54 77 6f 20 54 68 72 65  lt {{OneTwo Thre
13dd0 65 46 6f 75 72 7d 20 7b 4f 6e 65 54 77 6f 5c 0d  eFour} {OneTwo\.
13de0 0a 54 68 72 65 65 46 6f 75 72 7d 20 7b 7b 4f 6e  .ThreeFour} {{On
13df0 65 20 54 77 6f 7d 20 7b 54 68 72 65 65 20 46 6f  e Two} {Three Fo
13e00 75 72 7d 7d 20 7b 7b 4f 6e 65 20 54 77 6f 7d 20  ur}} {{One Two} 
13e10 7b 54 68 72 65 65 20 46 6f 75 72 7d 7d 20 7b 4f  {Three Four}} {O
13e20 6e 65 54 77 6f 20 54 68 72 65 65 46 6f 75 72 7d  neTwo ThreeFour}
13e30 5c 0d 0a 7b 4f 6e 65 54 77 6f 20 54 68 72 65 65  \..{OneTwo Three
13e40 46 6f 75 72 7d 20 7b 7b 4f 6e 65 20 54 77 6f 7d  Four} {{One Two}
13e50 20 7b 54 68 72 65 65 20 46 6f 75 72 7d 7d 20 7b   {Three Four}} {
13e60 7b 4f 6e 65 20 54 77 6f 7d 20 7b 54 68 72 65 65  {One Two} {Three
13e70 20 46 6f 75 72 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23   Four}}}}....###
13e80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13e90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ea0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13ec0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
13ed0 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
13ee0 74 61 2d 31 2e 34 38 20 7b 72 6f 6c 6c 62 61 63  ta-1.48 {rollbac
13ef0 6b 20 74 6f 20 6e 65 73 74 65 64 20 73 61 76 65  k to nested save
13f00 70 6f 69 6e 74 7d 20 2d 73 65 74 75 70 20 7b 0d  point} -setup {.
13f10 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
13f20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
13f30 34 38 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  48.db]..} -body 
13f40 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  {..  sql execute
13f50 20 24 64 62 20 22 42 45 47 49 4e 20 49 4d 4d 45   $db "BEGIN IMME
13f60 44 49 41 54 45 20 54 52 41 4e 53 41 43 54 49 4f  DIATE TRANSACTIO
13f70 4e 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  N;"..  sql execu
13f80 74 65 20 24 64 62 20 22 53 41 56 45 50 4f 49 4e  te $db "SAVEPOIN
13f90 54 20 6f 6e 65 3b 22 0d 0a 0d 0a 20 20 73 71 6c  T one;"....  sql
13fa0 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52   execute $db "CR
13fb0 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29  EATE TABLE t1(x)
13fc0 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ;"..  sql execut
13fd0 65 20 24 64 62 20 22 53 41 56 45 50 4f 49 4e 54  e $db "SAVEPOINT
13fe0 20 74 77 6f 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20   two;"....  sql 
13ff0 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
14000 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
14010 56 41 4c 55 45 53 28 31 29 3b 22 0d 0a 20 20 6c  VALUES(1);"..  l
14020 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
14030 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
14040 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db "
14050 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20  SELECT COUNT(*) 
14060 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 20 20 73 71  FROM t1;"]..  sq
14070 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 53  l execute $db "S
14080 41 56 45 50 4f 49 4e 54 20 74 68 72 65 65 3b 22  AVEPOINT three;"
14090 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
140a0 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
140b0 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
140c0 28 32 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64  (2);"..  lappend
140d0 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
140e0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
140f0 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54  alar $db "SELECT
14100 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74   COUNT(*) FROM t
14110 31 3b 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  1;"]....  sql ex
14120 65 63 75 74 65 20 24 64 62 20 22 52 4f 4c 4c 42  ecute $db "ROLLB
14130 41 43 4b 20 54 52 41 4e 53 41 43 54 49 4f 4e 20  ACK TRANSACTION 
14140 54 4f 20 53 41 56 45 50 4f 49 4e 54 20 74 68 72  TO SAVEPOINT thr
14150 65 65 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20  ee;"..  lappend 
14160 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
14170 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
14180 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20  lar $db "SELECT 
14190 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
141a0 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  ;"]....  set res
141b0 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
141c0 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
141d0 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
141e0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
141f0 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61  result db fileNa
14200 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
14210 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
14220 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
14230 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
14240 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
14250 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
14260 6c 74 20 5c 0d 0a 7b 31 20 32 20 31 7d 7d 0d 0a  lt \..{1 2 1}}..
14270 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
14280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
142a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
142b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
142c0 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
142d0 73 74 20 64 61 74 61 2d 31 2e 34 39 20 7b 4e 6f  st data-1.49 {No
142e0 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f  ExtensionFunctio
142f0 6e 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ns connection fl
14300 61 67 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ag} -setup {..  
14310 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
14320 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 34 39 2e  eName data-1.49.
14330 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
14340 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
14350 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  st]....  lappend
14360 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
14370 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
14380 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
14390 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
143a0 20 72 65 70 6c 69 63 61 74 65 28 27 31 32 33 34   replicate('1234
143b0 27 2c 20 32 29 3b 22 7d 20 6f 75 74 70 75 74 5d  ', 2);"} output]
143c0 20 24 6f 75 74 70 75 74 0d 0a 0d 0a 20 20 63 6c   $output....  cl
143d0 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
143e0 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69  e..  setupDb $fi
143f0 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20  leName "" "" "" 
14400 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63 74  NoExtensionFunct
14410 69 6f 6e 73 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  ions....  lappen
14420 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20  d result [catch 
14430 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  {sql execute -ex
14440 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
14450 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43   \..      "SELEC
14460 54 20 72 65 70 6c 69 63 61 74 65 28 27 31 32 33  T replicate('123
14470 34 27 2c 20 33 29 3b 22 7d 20 6f 75 74 70 75 74  4', 3);"} output
14480 5d 20 24 6f 75 74 70 75 74 0d 0a 0d 0a 20 20 63  ] $output....  c
14490 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
144a0 6d 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66  me..  setupDb $f
144b0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 6c 61 70  ileName....  lap
144c0 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
144d0 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
144e0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
144f0 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45  $db \..      "SE
14500 4c 45 43 54 20 72 65 70 6c 69 63 61 74 65 28 27  LECT replicate('
14510 31 32 33 34 27 2c 20 34 29 3b 22 7d 20 6f 75 74  1234', 4);"} out
14520 70 75 74 5d 20 24 6f 75 74 70 75 74 0d 0a 0d 0a  put] $output....
14530 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20    set result..} 
14540 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
14550 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
14560 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
14570 63 6f 6d 70 6c 61 69 6e 20 6f 75 74 70 75 74 20  complain output 
14580 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61  result db fileNa
14590 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
145a0 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
145b0 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
145c0 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
145d0 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
145e0 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63  ta.SQLite} -matc
145f0 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73  h \..regexp -res
14600 75 6c 74 20 7b 5e 30 20 31 32 33 34 31 32 33 34  ult {^0 12341234
14610 20 31 20 5c 7b 53 79 73 74 65 6d 5c 2e 44 61 74   1 \{System\.Dat
14620 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74  a\.SQLite\.SQLit
14630 65 45 78 63 65 70 74 69 6f 6e 5c 0d 0a 5c 28 30  eException\..\(0
14640 78 38 30 30 30 34 30 30 35 5c 29 3a 20 53 51 4c  x80004005\): SQL
14650 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
14660 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
14670 2e 2a 3f 5c 7d 20 30 20 31 32 33 34 31 32 33 34  .*?\} 0 12341234
14680 31 32 33 34 31 32 33 34 24 7d 7d 0d 0a 0d 0a 23  12341234$}}....#
14690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
146a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
146b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
146c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
146d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
146e0 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
146f0 64 61 74 61 2d 31 2e 35 30 20 7b 63 6f 6c 75 6d  data-1.50 {colum
14700 6e 20 6e 61 6d 65 20 61 6e 64 20 69 6e 64 65 78  n name and index
14710 20 6c 6f 6f 6b 75 70 7d 20 2d 73 65 74 75 70 20   lookup} -setup 
14720 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
14730 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
14740 31 2e 35 30 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  1.50.db]..} -bod
14750 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
14760 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52  te $db {..    CR
14770 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c  EATE TABLE t1(x,
14780 20 79 2c 20 7a 29 3b 0d 0a 20 20 20 20 49 4e 53   y, z);..    INS
14790 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
147a0 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 31 2c 20  y, z) VALUES(1, 
147b0 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b 0d 0a 20  'foo', 1234);.. 
147c0 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 64 61 74 61   }....  set data
147d0 52 65 61 64 65 72 20 5b 73 71 6c 20 65 78 65 63  Reader [sql exec
147e0 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
147f0 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74 61  der -format data
14800 72 65 61 64 65 72 20 5c 0d 0a 20 20 20 20 20 20  reader \..      
14810 2d 61 6c 69 61 73 20 24 64 62 20 22 53 45 4c 45  -alias $db "SELE
14820 43 54 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20  CT x, y, z FROM 
14830 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  t1;"]....  set r
14840 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
14850 20 20 77 68 69 6c 65 20 7b 5b 24 64 61 74 61 52    while {[$dataR
14860 65 61 64 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a  eader Read]} {..
14870 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
14880 6c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6c  lt \..        [l
14890 69 73 74 20 5b 24 64 61 74 61 52 65 61 64 65 72  ist [$dataReader
148a0 20 47 65 74 4e 61 6d 65 20 30 5d 20 5b 24 64 61   GetName 0] [$da
148b0 74 61 52 65 61 64 65 72 20 47 65 74 4f 72 64 69  taReader GetOrdi
148c0 6e 61 6c 20 78 5d 20 5c 0d 0a 20 20 20 20 20 20  nal x] \..      
148d0 20 20 20 20 20 20 5b 24 64 61 74 61 52 65 61 64        [$dataRead
148e0 65 72 20 49 74 65 6d 20 78 5d 5d 20 5c 0d 0a 20  er Item x]] \.. 
148f0 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 24 64         [list [$d
14900 61 74 61 52 65 61 64 65 72 20 47 65 74 4e 61 6d  ataReader GetNam
14910 65 20 31 5d 20 5b 24 64 61 74 61 52 65 61 64 65  e 1] [$dataReade
14920 72 20 47 65 74 4f 72 64 69 6e 61 6c 20 79 5d 20  r GetOrdinal y] 
14930 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
14940 24 64 61 74 61 52 65 61 64 65 72 20 49 74 65 6d  $dataReader Item
14950 20 79 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20   y]] \..        
14960 5b 6c 69 73 74 20 5b 24 64 61 74 61 52 65 61 64  [list [$dataRead
14970 65 72 20 47 65 74 4e 61 6d 65 20 32 5d 20 5b 24  er GetName 2] [$
14980 64 61 74 61 52 65 61 64 65 72 20 47 65 74 4f 72  dataReader GetOr
14990 64 69 6e 61 6c 20 7a 5d 20 5c 0d 0a 20 20 20 20  dinal z] \..    
149a0 20 20 20 20 20 20 20 20 5b 24 64 61 74 61 52 65          [$dataRe
149b0 61 64 65 72 20 49 74 65 6d 20 7a 5d 5d 0d 0a 20  ader Item z]].. 
149c0 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75   }....  set resu
149d0 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
149e0 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
149f0 70 6c 61 69 6e 20 64 61 74 61 52 65 61 64 65 72  plain dataReader
14a00 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
14a10 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
14a20 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
14a30 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
14a40 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
14a50 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
14a60 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
14a70 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
14a80 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
14a90 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
14aa0 75 6c 74 20 5c 0d 0a 7b 7b 78 20 30 20 31 7d 20  ult \..{{x 0 1} 
14ab0 7b 79 20 31 20 66 6f 6f 7d 20 7b 7a 20 32 20 31  {y 1 foo} {z 2 1
14ac0 32 33 34 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  234}}}....######
14ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14b10 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
14b20 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
14b30 31 2e 35 31 20 7b 6e 75 6c 6c 61 62 6c 65 20 76  1.51 {nullable v
14b40 61 6c 75 65 20 74 79 70 65 73 7d 20 2d 73 65 74  alue types} -set
14b50 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
14b60 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
14b70 74 61 2d 31 2e 35 31 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.51.db]..} -
14b80 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78  body {..  sql ex
14b90 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20  ecute $db {..   
14ba0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
14bb0 28 78 20 49 4e 54 45 47 45 52 29 3b 0d 0a 20 20  (x INTEGER);..  
14bc0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
14bd0 20 28 78 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c   (x) VALUES(NULL
14be0 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49  );..    INSERT I
14bf0 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
14c00 53 28 31 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  S(1);..  }....  
14c10 73 65 74 20 64 61 74 61 52 65 61 64 65 72 20 5b  set dataReader [
14c20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
14c30 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72  cute reader -for
14c40 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20 5c  mat datareader \
14c50 0d 0a 20 20 20 20 20 20 2d 61 6c 69 61 73 20 24  ..      -alias $
14c60 64 62 20 22 53 45 4c 45 43 54 20 78 20 46 52 4f  db "SELECT x FRO
14c70 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b  M t1 ORDER BY x;
14c80 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  "]....  set resu
14c90 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 77  lt [list]....  w
14ca0 68 69 6c 65 20 7b 5b 24 64 61 74 61 52 65 61 64  hile {[$dataRead
14cb0 65 72 20 52 65 61 64 5d 7d 20 7b 0d 0a 20 20 20  er Read]} {..   
14cc0 20 66 6f 72 65 61 63 68 20 7b 61 20 62 20 63 20   foreach {a b c 
14cd0 64 20 65 7d 20 5b 6c 69 73 74 20 22 22 20 22 22  d e} [list "" ""
14ce0 20 22 22 20 22 22 20 22 22 5d 20 62 72 65 61 6b   "" "" ""] break
14cf0 0d 0a 0d 0a 20 20 20 20 73 65 74 20 78 20 5b 24  ....    set x [$
14d00 64 61 74 61 52 65 61 64 65 72 20 47 65 74 4f 72  dataReader GetOr
14d10 64 69 6e 61 6c 20 78 5d 0d 0a 0d 0a 20 20 20 20  dinal x]....    
14d20 66 6f 72 65 61 63 68 20 7b 61 20 62 20 63 20 65  foreach {a b c e
14d30 7d 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  } [list \..     
14d40 20 20 20 5b 24 64 61 74 61 52 65 61 64 65 72 20     [$dataReader 
14d50 47 65 74 4e 61 6d 65 20 24 78 5d 20 5b 24 64 61  GetName $x] [$da
14d60 74 61 52 65 61 64 65 72 20 47 65 74 56 61 6c 75  taReader GetValu
14d70 65 20 24 78 5d 20 5c 0d 0a 20 20 20 20 20 20 20  e $x] \..       
14d80 20 5b 63 61 74 63 68 20 7b 24 64 61 74 61 52 65   [catch {$dataRe
14d90 61 64 65 72 20 47 65 74 49 6e 74 36 34 20 24 78  ader GetInt64 $x
14da0 7d 20 64 5d 20 5b 24 64 61 74 61 52 65 61 64 65  } d] [$dataReade
14db0 72 20 49 74 65 6d 20 78 5d 5d 20 62 72 65 61 6b  r Item x]] break
14dc0 0d 0a 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  ....    lappend 
14dd0 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 78 20  result [list $x 
14de0 24 61 20 24 62 20 24 63 20 24 64 20 24 65 5d 0d  $a $b $c $d $e].
14df0 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  .  }....  set re
14e00 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
14e10 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
14e20 6f 6d 70 6c 61 69 6e 20 64 61 74 61 52 65 61 64  omplain dataRead
14e30 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  er....  cleanupD
14e40 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
14e50 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
14e60 69 6e 20 65 20 64 20 63 20 62 20 61 20 78 20 72  in e d c b a x r
14e70 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d  esult db fileNam
14e80 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
14e90 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
14ea0 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
14eb0 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
14ec0 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
14ed0 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68  a.SQLite} -match
14ee0 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75   \..regexp -resu
14ef0 6c 74 20 7b 5e 5c 7b 30 20 78 20 53 79 73 74 65  lt {^\{0 x Syste
14f00 6d 23 44 42 4e 75 6c 6c 23 5c 64 2b 20 31 5c 0d  m#DBNull#\d+ 1\.
14f10 0a 5c 7b 53 79 73 74 65 6d 5c 2e 52 65 66 6c 65  .\{System\.Refle
14f20 63 74 69 6f 6e 5c 2e 54 61 72 67 65 74 49 6e 76  ction\.TargetInv
14f30 6f 63 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  ocationException
14f40 3a 20 45 78 63 65 70 74 69 6f 6e 20 68 61 73 20  : Exception has 
14f50 62 65 65 6e 20 74 68 72 6f 77 6e 20 62 79 5c 0d  been thrown by\.
14f60 0a 74 68 65 20 74 61 72 67 65 74 20 6f 66 20 61  .the target of a
14f70 6e 20 69 6e 76 6f 63 61 74 69 6f 6e 5c 2e 20 2d  n invocation\. -
14f80 2d 2d 3e 20 53 79 73 74 65 6d 5c 2e 49 6e 76 61  --> System\.Inva
14f90 6c 69 64 43 61 73 74 45 78 63 65 70 74 69 6f 6e  lidCastException
14fa0 3a 2e 2a 5c 7d 5c 0d 0a 53 79 73 74 65 6d 23 44  :.*\}\..System#D
14fb0 42 4e 75 6c 6c 23 5c 64 2b 5c 7d 20 5c 7b 30 20  BNull#\d+\} \{0 
14fc0 78 20 31 20 30 20 31 20 31 5c 7d 24 7d 7d 0d 0a  x 1 0 1 1\}$}}..
14fd0 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
14fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15020 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
15030 73 74 20 64 61 74 61 2d 31 2e 35 32 20 7b 73 74  st data-1.52 {st
15040 61 74 69 63 20 53 51 4c 69 74 65 43 6f 6d 6d 61  atic SQLiteComma
15050 6e 64 2e 45 78 65 63 75 74 65 20 6d 65 74 68 6f  nd.Execute metho
15060 64 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 75  d} -setup {..  u
15070 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
15080 20 72 65 73 75 6c 74 20 73 71 6c 0d 0a 7d 20 2d   result sql..} -
15090 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 73 71  body {..  set sq
150a0 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
150b0 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29  EATE TABLE t1(x)
150c0 3b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  ; \..    INSERT 
150d0 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
150e0 45 53 20 28 4e 55 4c 4c 29 3b 20 5c 0d 0a 20 20  ES (NULL); \..  
150f0 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20    SELECT x FROM 
15100 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b 20 5c  t1 ORDER BY x; \
15110 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
15120 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(2) { \..    C
15130 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
15140 29 3b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54  ); \..    INSERT
15150 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c   INTO t1 (x) VAL
15160 55 45 53 20 28 3f 29 3b 20 5c 0d 0a 20 20 20 20  UES (?); \..    
15170 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
15180 20 4f 52 44 45 52 20 42 59 20 78 3b 20 5c 0d 0a   ORDER BY x; \..
15190 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73    }....  set res
151a0 75 6c 74 28 31 29 20 5b 6f 62 6a 65 63 74 20 69  ult(1) [object i
151b0 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74  nvoke System.Dat
151c0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
151d0 6f 6d 6d 61 6e 64 20 45 78 65 63 75 74 65 20 5c  ommand Execute \
151e0 0d 0a 20 20 20 20 20 20 22 74 68 69 73 20 77 69  ..      "this wi
151f0 6c 6c 20 6e 6f 74 20 65 78 65 63 75 74 65 22 20  ll not execute" 
15200 4e 6f 6e 65 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20  None null]....  
15210 73 65 74 20 72 65 73 75 6c 74 28 32 29 20 5b 6f  set result(2) [o
15220 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73  bject invoke Sys
15230 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
15240 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78  SQLiteCommand Ex
15250 65 63 75 74 65 20 5c 0d 0a 20 20 20 20 20 20 24  ecute \..      $
15260 73 71 6c 28 31 29 20 4e 6f 6e 51 75 65 72 79 20  sql(1) NonQuery 
15270 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  null]....  set r
15280 65 73 75 6c 74 28 33 29 20 5b 6f 62 6a 65 63 74  esult(3) [object
15290 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44   invoke System.D
152a0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
152b0 65 43 6f 6d 6d 61 6e 64 20 45 78 65 63 75 74 65  eCommand Execute
152c0 20 5c 0d 0a 20 20 20 20 20 20 24 73 71 6c 28 31   \..      $sql(1
152d0 29 20 53 63 61 6c 61 72 20 6e 75 6c 6c 5d 0d 0a  ) Scalar null]..
152e0 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 34  ..  set result(4
152f0 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ) [object invoke
15300 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
15310 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ite.SQLiteComman
15320 64 20 45 78 65 63 75 74 65 20 5c 0d 0a 20 20 20  d Execute \..   
15330 20 20 20 24 73 71 6c 28 31 29 20 52 65 61 64 65     $sql(1) Reade
15340 72 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 73 65 74  r null]....  set
15350 20 72 65 73 75 6c 74 28 35 29 20 5b 6f 62 6a 65   result(5) [obje
15360 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d  ct invoke System
15370 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
15380 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78 65 63 75  iteCommand Execu
15390 74 65 20 5c 0d 0a 20 20 20 20 20 20 22 74 68 69  te \..      "thi
153a0 73 20 77 69 6c 6c 20 6e 6f 74 20 65 78 65 63 75  s will not execu
153b0 74 65 22 20 4e 6f 6e 65 20 6e 75 6c 6c 20 31 5d  te" None null 1]
153c0 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
153d0 28 36 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  (6) [object invo
153e0 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ke System.Data.S
153f0 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d  QLite.SQLiteComm
15400 61 6e 64 20 45 78 65 63 75 74 65 20 5c 0d 0a 20  and Execute \.. 
15410 20 20 20 20 20 24 73 71 6c 28 32 29 20 4e 6f 6e       $sql(2) Non
15420 51 75 65 72 79 20 6e 75 6c 6c 20 31 5d 0d 0a 0d  Query null 1]...
15430 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 37 29  .  set result(7)
15440 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
15450 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
15460 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  te.SQLiteCommand
15470 20 45 78 65 63 75 74 65 20 5c 0d 0a 20 20 20 20   Execute \..    
15480 20 20 24 73 71 6c 28 32 29 20 53 63 61 6c 61 72    $sql(2) Scalar
15490 20 6e 75 6c 6c 20 31 5d 0d 0a 0d 0a 20 20 73 65   null 1]....  se
154a0 74 20 72 65 73 75 6c 74 28 38 29 20 5b 6f 62 6a  t result(8) [obj
154b0 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
154c0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
154d0 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78 65 63  LiteCommand Exec
154e0 75 74 65 20 5c 0d 0a 20 20 20 20 20 20 24 73 71  ute \..      $sq
154f0 6c 28 32 29 20 52 65 61 64 65 72 20 6e 75 6c 6c  l(2) Reader null
15500 20 31 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 72   1]....  list $r
15510 65 73 75 6c 74 28 31 29 20 24 72 65 73 75 6c 74  esult(1) $result
15520 28 32 29 20 24 72 65 73 75 6c 74 28 33 29 20 24  (2) $result(3) $
15530 72 65 73 75 6c 74 28 34 29 20 24 72 65 73 75 6c  result(4) $resul
15540 74 28 35 29 20 24 72 65 73 75 6c 74 28 36 29 20  t(5) $result(6) 
15550 5c 0d 0a 20 20 20 20 20 20 24 72 65 73 75 6c 74  \..      $result
15560 28 37 29 20 24 72 65 73 75 6c 74 28 38 29 0d 0a  (7) $result(8)..
15570 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
15580 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
15590 6e 20 72 65 73 75 6c 74 20 73 71 6c 0d 0a 7d 20  n result sql..} 
155a0 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
155b0 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 53 51  gle monoBug28 SQ
155c0 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
155d0 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20  .SQLite} -match 
155e0 72 65 67 65 78 70 20 5c 0d 0a 2d 72 65 73 75 6c  regexp \..-resul
155f0 74 20 7b 5e 5c 7b 5c 7d 20 31 20 53 79 73 74 65  t {^\{\} 1 Syste
15600 6d 23 44 42 4e 75 6c 6c 23 5c 64 2b 20 53 79 73  m#DBNull#\d+ Sys
15610 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 23  tem#Data#SQLite#
15620 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
15630 23 5c 64 2b 20 5c 7b 5c 7d 5c 0d 0a 31 20 31 20  #\d+ \{\}\..1 1 
15640 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69  System#Data#SQLi
15650 74 65 23 53 51 4c 69 74 65 44 61 74 61 52 65 61  te#SQLiteDataRea
15660 64 65 72 23 5c 64 2b 24 7d 7d 0d 0a 0d 0a 23 23  der#\d+$}}....##
15670 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15680 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
156a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
156b0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
156c0 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
156d0 61 74 61 2d 31 2e 35 33 20 7b 42 69 6e 64 41 6c  ata-1.53 {BindAl
156e0 6c 41 73 54 65 78 74 20 77 2f 44 61 74 65 54 69  lAsText w/DateTi
156f0 6d 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  me} -setup {..  
15700 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
15710 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 35 33 2e  eName data-1.53.
15720 64 62 5d 20 22 22 20 54 69 63 6b 73 20 55 74 63  db] "" Ticks Utc
15730 20 42 69 6e 64 41 6c 6c 41 73 54 65 78 74 0d 0a   BindAllAsText..
15740 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c  } -body {..  sql
15750 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52   execute $db "CR
15760 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29  EATE TABLE t1(x)
15770 3b 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 73 71  ;"....  list [sq
15780 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
15790 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
157a0 29 20 56 41 4c 55 45 53 28 3f 29 3b 22 20 5c 0d  ) VALUES(?);" \.
157b0 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
157c0 61 6d 31 20 44 61 74 65 54 69 6d 65 20 5b 73 65  am1 DateTime [se
157d0 74 20 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65  t dateTime [obje
157e0 63 74 20 69 6e 76 6f 6b 65 20 44 61 74 65 54 69  ct invoke DateTi
157f0 6d 65 20 50 61 72 73 65 20 5c 0d 0a 20 20 20 20  me Parse \..    
15800 20 20 22 32 30 30 30 2e 30 32 2e 32 39 20 31 33    "2000.02.29 13
15810 3a 35 39 3a 35 38 2e 31 32 33 34 35 36 37 5a 22  :59:58.1234567Z"
15820 5d 5d 5d 5d 20 5b 73 71 6c 20 65 78 65 63 75 74  ]]]] [sql execut
15830 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
15840 72 20 5c 0d 0a 20 20 20 20 20 20 2d 66 6f 72 6d  r \..      -form
15850 61 74 20 6c 69 73 74 20 24 64 62 20 22 53 45 4c  at list $db "SEL
15860 45 43 54 20 78 20 46 52 4f 4d 20 74 31 3b 22 5d  ECT x FROM t1;"]
15870 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
15880 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
15890 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
158a0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74   -nocomplain dat
158b0 65 54 69 6d 65 20 64 62 20 66 69 6c 65 4e 61 6d  eTime db fileNam
158c0 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
158d0 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
158e0 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
158f0 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
15900 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
15910 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c  a.SQLite} -resul
15920 74 20 5c 0d 0a 7b 31 20 36 33 30 38 37 34 30 30  t \..{1 63087400
15930 37 39 38 30 30 30 30 30 30 30 7d 7d 0d 0a 0d 0a  7980000000}}....
15940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
15990 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
159a0 20 64 61 74 61 2d 31 2e 35 34 20 7b 62 69 6e 64   data-1.54 {bind
159b0 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
159c0 74 6f 20 6f 6e 65 20 53 51 4c 69 74 65 43 6f 6e  to one SQLiteCon
159d0 6e 65 63 74 69 6f 6e 7d 20 2d 73 65 74 75 70 20  nection} -setup 
159e0 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  {..  set fileNam
159f0 65 20 64 61 74 61 2d 31 2e 35 34 2e 64 62 0d 0a  e data-1.54.db..
15a00 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
15a10 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
15a20 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
15a30 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
15a40 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
15a50 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
15a60 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
15a70 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ory] $fileName].
15a80 0a 0d 0a 20 20 73 65 74 20 73 71 6c 20 7b 20 5c  ...  set sql { \
15a90 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 4d 79 52  ..    SELECT MyR
15aa0 61 6e 64 6f 6d 28 29 3b 20 5c 0d 0a 20 20 7d 0d  andom(); \..  }.
15ab0 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
15ac0 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
15ad0 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
15ae0 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
15af0 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
15b00 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
15b10 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
15b20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15b30 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
15b40 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
15b50 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
15b60 75 62 6c 69 63 20 63 6c 61 73 73 20 54 65 73 74  ublic class Test
15b70 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75  ${id} : SQLiteFu
15b80 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d  nction..      {.
15b90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
15ba0 20 52 61 6e 64 6f 6d 20 72 61 6e 64 6f 6d 3b 0d   Random random;.
15bb0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
15bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
15c10 62 6c 69 63 20 54 65 73 74 24 7b 69 64 7d 28 29  blic Test${id}()
15c20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15c30 20 20 20 20 20 20 20 72 61 6e 64 6f 6d 20 3d 20         random = 
15c40 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b 0d 0a 20  new Random();.. 
15c50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
15c60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
15c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
15cb0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
15cc0 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49 6e  erride object In
15cd0 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20  voke(..         
15ce0 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61 72 67 73   object\[\] args
15cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
15d00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15d10 20 20 20 20 72 65 74 75 72 6e 20 72 61 6e 64 6f      return rando
15d20 6d 2e 4e 65 78 74 28 29 3b 0d 0a 20 20 20 20 20  m.Next();..     
15d30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15d90 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
15da0 20 6f 62 6a 65 63 74 20 44 6f 54 65 73 74 28 62   object DoTest(b
15db0 6f 6f 6c 20 62 69 6e 64 46 75 6e 63 74 69 6f 6e  ool bindFunction
15dc0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
15dd0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
15de0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
15df0 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
15e00 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
15e10 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
15e20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
15e30 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
15e40 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22  tFlagsProperty]"
15e50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
15e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
15e70 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
15e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
15e90 66 20 28 62 69 6e 64 46 75 6e 63 74 69 6f 6e 29  f (bindFunction)
15ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
15ec0 6f 6e 6e 65 63 74 69 6f 6e 2e 42 69 6e 64 46 75  onnection.BindFu
15ed0 6e 63 74 69 6f 6e 28 6e 65 77 20 53 51 4c 69 74  nction(new SQLit
15ee0 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
15ef0 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
15f00 20 20 20 20 20 22 4d 79 52 61 6e 64 6f 6d 22 2c       "MyRandom",
15f10 20 30 2c 20 46 75 6e 63 74 69 6f 6e 54 79 70 65   0, FunctionType
15f20 2e 53 63 61 6c 61 72 29 2c 20 6e 65 77 20 54 65  .Scalar), new Te
15f30 73 74 24 7b 69 64 7d 28 29 29 3b 0d 0a 20 20 20  st${id}());..   
15f40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15f50 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
15f60 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
15f70 6f 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53 51 4c  ommand = new SQL
15f80 69 74 65 43 6f 6d 6d 61 6e 64 28 22 24 7b 73 71  iteCommand("${sq
15f90 6c 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  l}",..          
15fa0 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
15fb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15fd0 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e 64 2e   return command.
15fe0 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 3b  ExecuteScalar();
15ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16000 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
16010 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16020 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16070 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
16080 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
16090 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
160a0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
160b0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
160c0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
160d0 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
160e0 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
160f0 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ors System.Data.
16100 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20  SQLite.dll].... 
16110 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
16120 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
16130 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
16140 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
16150 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
16160 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
16170 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
16180 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
16190 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
161a0 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
161b0 64 7d 20 44 6f 54 65 73 74 20 66 61 6c 73 65 0d  d} DoTest false.
161c0 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
161d0 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
161e0 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a  "]}] $result \..
161f0 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
16200 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
16210 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
16220 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
16230 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
16240 7b 69 64 7d 20 44 6f 54 65 73 74 20 74 72 75 65  {id} DoTest true
16250 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
16260 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
16270 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d  ""]}] $result \.
16280 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
16290 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
162a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
162b0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
162c0 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
162d0 24 7b 69 64 7d 20 44 6f 54 65 73 74 20 66 61 6c  ${id} DoTest fal
162e0 73 65 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  se..      } resu
162f0 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
16300 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
16310 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
16320 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
16330 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
16340 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
16350 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
16360 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
16370 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
16380 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
16390 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  s {eagle monoBug
163a0 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
163b0 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
163c0 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
163d0 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43  .SQLite compileC
163e0 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65  Sharp} -match re
163f0 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  gexp -result \..
16400 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
16410 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20  t \n \r\n] {^Ok 
16420 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
16430 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
16440 52 65 73 75 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b  Results#\d+\..\{
16450 5c 7d 20 31 20 5c 7b 53 79 73 74 65 6d 5c 2e 52  \} 1 \{System\.R
16460 65 66 6c 65 63 74 69 6f 6e 5c 2e 54 61 72 67 65  eflection\.Targe
16470 74 49 6e 76 6f 63 61 74 69 6f 6e 45 78 63 65 70  tInvocationExcep
16480 74 69 6f 6e 3a 20 45 78 63 65 70 74 69 6f 6e 20  tion: Exception 
16490 68 61 73 20 62 65 65 6e 5c 0d 0a 74 68 72 6f 77  has been\..throw
164a0 6e 20 62 79 20 74 68 65 20 74 61 72 67 65 74 20  n by the target 
164b0 6f 66 20 61 6e 20 69 6e 76 6f 63 61 74 69 6f 6e  of an invocation
164c0 5c 2e 20 2d 2d 2d 3e 5c 0d 0a 53 79 73 74 65 6d  \. --->\..System
164d0 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e  \.Data\.SQLite\.
164e0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a  SQLiteException:
164f0 20 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72   SQL logic error
16500 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
16510 62 61 73 65 0d 0a 6e 6f 20 73 75 63 68 20 66 75  base..no such fu
16520 6e 63 74 69 6f 6e 3a 20 4d 79 52 61 6e 64 6f 6d  nction: MyRandom
16530 2e 2a 5c 7d 20 30 20 28 3f 3a 2d 29 3f 5c 64 2b  .*\} 0 (?:-)?\d+
16540 20 31 5c 0d 0a 5c 7b 53 79 73 74 65 6d 5c 2e 52   1\..\{System\.R
16550 65 66 6c 65 63 74 69 6f 6e 5c 2e 54 61 72 67 65  eflection\.Targe
16560 74 49 6e 76 6f 63 61 74 69 6f 6e 45 78 63 65 70  tInvocationExcep
16570 74 69 6f 6e 3a 20 45 78 63 65 70 74 69 6f 6e 20  tion: Exception 
16580 68 61 73 20 62 65 65 6e 20 74 68 72 6f 77 6e 20  has been thrown 
16590 62 79 5c 0d 0a 74 68 65 20 74 61 72 67 65 74 20  by\..the target 
165a0 6f 66 20 61 6e 20 69 6e 76 6f 63 61 74 69 6f 6e  of an invocation
165b0 5c 2e 20 2d 2d 2d 3e 20 53 79 73 74 65 6d 5c 2e  \. ---> System\.
165c0 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51  Data\.SQLite\.SQ
165d0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20 53  LiteException: S
165e0 51 4c 5c 0d 0a 6c 6f 67 69 63 20 65 72 72 6f 72  QL\..logic error
165f0 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
16600 62 61 73 65 0d 0a 6e 6f 20 73 75 63 68 20 66 75  base..no such fu
16610 6e 63 74 69 6f 6e 3a 20 4d 79 52 61 6e 64 6f 6d  nction: MyRandom
16620 2e 2a 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23  .*\}$}]}....####
16630 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16640 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16650 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16660 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16670 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
16680 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
16690 61 2d 31 2e 35 35 20 7b 53 51 4c 69 74 65 43 6f  a-1.55 {SQLiteCo
166a0 6e 76 65 72 74 20 54 79 70 65 4e 61 6d 65 54 6f  nvert TypeNameTo
166b0 44 62 54 79 70 65 7d 20 2d 73 65 74 75 70 20 7b  DbType} -setup {
166c0 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
166d0 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 74 79 70  plain result typ
166e0 65 4e 61 6d 65 0d 0a 7d 20 2d 62 6f 64 79 20 7b  eName..} -body {
166f0 0d 0a 20 20 66 6f 72 65 61 63 68 20 74 79 70 65  ..  foreach type
16700 4e 61 6d 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  Name [list \..  
16710 20 20 20 20 42 49 47 49 4e 54 20 42 49 47 55 49      BIGINT BIGUI
16720 4e 54 20 42 49 4e 41 52 59 20 42 49 54 20 42 4c  NT BINARY BIT BL
16730 4f 42 20 42 4f 4f 4c 20 42 4f 4f 4c 45 41 4e 20  OB BOOL BOOLEAN 
16740 43 48 41 52 20 43 4c 4f 42 20 43 4f 55 4e 54 45  CHAR CLOB COUNTE
16750 52 20 43 55 52 52 45 4e 43 59 20 5c 0d 0a 20 20  R CURRENCY \..  
16760 20 20 20 20 44 41 54 45 20 44 41 54 45 54 49 4d      DATE DATETIM
16770 45 20 44 45 43 49 4d 41 4c 20 44 4f 55 42 4c 45  E DECIMAL DOUBLE
16780 20 46 4c 4f 41 54 20 47 45 4e 45 52 41 4c 20 47   FLOAT GENERAL G
16790 55 49 44 20 49 44 45 4e 54 49 54 59 20 49 4d 41  UID IDENTITY IMA
167a0 47 45 20 49 4e 54 20 49 4e 54 38 20 5c 0d 0a 20  GE INT INT8 \.. 
167b0 20 20 20 20 20 49 4e 54 31 36 20 49 4e 54 33 32       INT16 INT32
167c0 20 49 4e 54 36 34 20 49 4e 54 45 47 45 52 20 49   INT64 INTEGER I
167d0 4e 54 45 47 45 52 38 20 49 4e 54 45 47 45 52 31  NTEGER8 INTEGER1
167e0 36 20 49 4e 54 45 47 45 52 33 32 20 49 4e 54 45  6 INTEGER32 INTE
167f0 47 45 52 36 34 20 5c 0d 0a 20 20 20 20 20 20 4c  GER64 \..      L
16800 4f 47 49 43 41 4c 20 4c 4f 4e 47 20 4c 4f 4e 47  OGICAL LONG LONG
16810 43 48 41 52 20 4c 4f 4e 47 54 45 58 54 20 4c 4f  CHAR LONGTEXT LO
16820 4e 47 56 41 52 43 48 41 52 20 4d 45 4d 4f 20 4d  NGVARCHAR MEMO M
16830 4f 4e 45 59 20 4e 43 48 41 52 20 4e 4f 54 45 20  ONEY NCHAR NOTE 
16840 4e 54 45 58 54 20 5c 0d 0a 20 20 20 20 20 20 4e  NTEXT \..      N
16850 55 4d 42 45 52 20 4e 55 4d 45 52 49 43 20 4e 56  UMBER NUMERIC NV
16860 41 52 43 48 41 52 20 4f 4c 45 4f 42 4a 45 43 54  ARCHAR OLEOBJECT
16870 20 52 41 57 20 52 45 41 4c 20 53 49 4e 47 4c 45   RAW REAL SINGLE
16880 20 53 4d 41 4c 4c 44 41 54 45 20 53 4d 41 4c 4c   SMALLDATE SMALL
16890 49 4e 54 20 5c 0d 0a 20 20 20 20 20 20 53 4d 41  INT \..      SMA
168a0 4c 4c 55 49 4e 54 20 53 54 52 49 4e 47 20 54 45  LLUINT STRING TE
168b0 58 54 20 54 49 4d 45 20 54 49 4d 45 53 54 41 4d  XT TIME TIMESTAM
168c0 50 20 54 49 4e 59 49 4e 54 20 54 49 4e 59 53 49  P TINYINT TINYSI
168d0 4e 54 20 55 49 4e 54 20 55 49 4e 54 38 20 55 49  NT UINT UINT8 UI
168e0 4e 54 31 36 20 5c 0d 0a 20 20 20 20 20 20 55 49  NT16 \..      UI
168f0 4e 54 33 32 20 55 49 4e 54 36 34 20 55 4c 4f 4e  NT32 UINT64 ULON
16900 47 20 55 4e 49 51 55 45 49 44 45 4e 54 49 46 49  G UNIQUEIDENTIFI
16910 45 52 20 55 4e 53 49 47 4e 45 44 49 4e 54 45 47  ER UNSIGNEDINTEG
16920 45 52 20 55 4e 53 49 47 4e 45 44 49 4e 54 45 47  ER UNSIGNEDINTEG
16930 45 52 38 20 5c 0d 0a 20 20 20 20 20 20 55 4e 53  ER8 \..      UNS
16940 49 47 4e 45 44 49 4e 54 45 47 45 52 31 36 20 55  IGNEDINTEGER16 U
16950 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52 33 32  NSIGNEDINTEGER32
16960 20 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52   UNSIGNEDINTEGER
16970 36 34 20 56 41 52 42 49 4e 41 52 59 20 56 41 52  64 VARBINARY VAR
16980 43 48 41 52 20 5c 0d 0a 20 20 20 20 20 20 56 41  CHAR \..      VA
16990 52 43 48 41 52 32 20 59 45 53 4e 4f 5d 20 7b 0d  RCHAR2 YESNO] {.
169a0 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
169b0 75 6c 74 20 5b 6c 69 73 74 20 24 74 79 70 65 4e  ult [list $typeN
169c0 61 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ame [object invo
169d0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
169e0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..        
169f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16a00 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  te.SQLiteConvert
16a10 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70   TypeNameToDbTyp
16a20 65 20 6e 75 6c 6c 20 24 74 79 70 65 4e 61 6d 65  e null $typeName
16a30 20 4e 6f 6e 65 5d 5d 0d 0a 20 20 7d 0d 0a 20 20   None]]..  }..  
16a40 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  set result..} -c
16a50 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65  leanup {..  unse
16a60 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
16a70 73 75 6c 74 20 74 79 70 65 4e 61 6d 65 0d 0a 7d  sult typeName..}
16a80 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
16a90 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61  agle System.Data
16aa0 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
16ab0 20 7b 7b 42 49 47 49 4e 54 20 49 6e 74 36 34 7d   {{BIGINT Int64}
16ac0 20 7b 42 49 47 55 49 4e 54 5c 0d 0a 55 49 6e 74   {BIGUINT\..UInt
16ad0 36 34 7d 20 7b 42 49 4e 41 52 59 20 42 69 6e 61  64} {BINARY Bina
16ae0 72 79 7d 20 7b 42 49 54 20 42 6f 6f 6c 65 61 6e  ry} {BIT Boolean
16af0 7d 20 7b 42 4c 4f 42 20 42 69 6e 61 72 79 7d 20  } {BLOB Binary} 
16b00 7b 42 4f 4f 4c 20 42 6f 6f 6c 65 61 6e 7d 20 7b  {BOOL Boolean} {
16b10 42 4f 4f 4c 45 41 4e 5c 0d 0a 42 6f 6f 6c 65 61  BOOLEAN\..Boolea
16b20 6e 7d 20 7b 43 48 41 52 20 41 6e 73 69 53 74 72  n} {CHAR AnsiStr
16b30 69 6e 67 46 69 78 65 64 4c 65 6e 67 74 68 7d 20  ingFixedLength} 
16b40 7b 43 4c 4f 42 20 53 74 72 69 6e 67 7d 20 7b 43  {CLOB String} {C
16b50 4f 55 4e 54 45 52 20 49 6e 74 36 34 7d 20 7b 43  OUNTER Int64} {C
16b60 55 52 52 45 4e 43 59 5c 0d 0a 44 65 63 69 6d 61  URRENCY\..Decima
16b70 6c 7d 20 7b 44 41 54 45 20 44 61 74 65 54 69 6d  l} {DATE DateTim
16b80 65 7d 20 7b 44 41 54 45 54 49 4d 45 20 44 61 74  e} {DATETIME Dat
16b90 65 54 69 6d 65 7d 20 7b 44 45 43 49 4d 41 4c 20  eTime} {DECIMAL 
16ba0 44 65 63 69 6d 61 6c 7d 20 7b 44 4f 55 42 4c 45  Decimal} {DOUBLE
16bb0 20 44 6f 75 62 6c 65 7d 5c 0d 0a 7b 46 4c 4f 41   Double}\..{FLOA
16bc0 54 20 44 6f 75 62 6c 65 7d 20 7b 47 45 4e 45 52  T Double} {GENER
16bd0 41 4c 20 42 69 6e 61 72 79 7d 20 7b 47 55 49 44  AL Binary} {GUID
16be0 20 47 75 69 64 7d 20 7b 49 44 45 4e 54 49 54 59   Guid} {IDENTITY
16bf0 20 49 6e 74 36 34 7d 20 7b 49 4d 41 47 45 20 42   Int64} {IMAGE B
16c00 69 6e 61 72 79 7d 5c 0d 0a 7b 49 4e 54 20 49 6e  inary}\..{INT In
16c10 74 33 32 7d 20 7b 49 4e 54 38 20 53 42 79 74 65  t32} {INT8 SByte
16c20 7d 20 7b 49 4e 54 31 36 20 49 6e 74 31 36 7d 20  } {INT16 Int16} 
16c30 7b 49 4e 54 33 32 20 49 6e 74 33 32 7d 20 7b 49  {INT32 Int32} {I
16c40 4e 54 36 34 20 49 6e 74 36 34 7d 20 7b 49 4e 54  NT64 Int64} {INT
16c50 45 47 45 52 5c 0d 0a 49 6e 74 36 34 7d 20 7b 49  EGER\..Int64} {I
16c60 4e 54 45 47 45 52 38 20 53 42 79 74 65 7d 20 7b  NTEGER8 SByte} {
16c70 49 4e 54 45 47 45 52 31 36 20 49 6e 74 31 36 7d  INTEGER16 Int16}
16c80 20 7b 49 4e 54 45 47 45 52 33 32 20 49 6e 74 33   {INTEGER32 Int3
16c90 32 7d 20 7b 49 4e 54 45 47 45 52 36 34 20 49 6e  2} {INTEGER64 In
16ca0 74 36 34 7d 5c 0d 0a 7b 4c 4f 47 49 43 41 4c 20  t64}\..{LOGICAL 
16cb0 42 6f 6f 6c 65 61 6e 7d 20 7b 4c 4f 4e 47 20 49  Boolean} {LONG I
16cc0 6e 74 36 34 7d 20 7b 4c 4f 4e 47 43 48 41 52 20  nt64} {LONGCHAR 
16cd0 53 74 72 69 6e 67 7d 20 7b 4c 4f 4e 47 54 45 58  String} {LONGTEX
16ce0 54 20 53 74 72 69 6e 67 7d 20 7b 4c 4f 4e 47 56  T String} {LONGV
16cf0 41 52 43 48 41 52 5c 0d 0a 53 74 72 69 6e 67 7d  ARCHAR\..String}
16d00 20 7b 4d 45 4d 4f 20 53 74 72 69 6e 67 7d 20 7b   {MEMO String} {
16d10 4d 4f 4e 45 59 20 44 65 63 69 6d 61 6c 7d 20 7b  MONEY Decimal} {
16d20 4e 43 48 41 52 20 53 74 72 69 6e 67 46 69 78 65  NCHAR StringFixe
16d30 64 4c 65 6e 67 74 68 7d 20 7b 4e 4f 54 45 20 53  dLength} {NOTE S
16d40 74 72 69 6e 67 7d 5c 0d 0a 7b 4e 54 45 58 54 20  tring}\..{NTEXT 
16d50 53 74 72 69 6e 67 7d 20 7b 4e 55 4d 42 45 52 20  String} {NUMBER 
16d60 44 65 63 69 6d 61 6c 7d 20 7b 4e 55 4d 45 52 49  Decimal} {NUMERI
16d70 43 20 44 65 63 69 6d 61 6c 7d 20 7b 4e 56 41 52  C Decimal} {NVAR
16d80 43 48 41 52 20 53 74 72 69 6e 67 7d 20 7b 4f 4c  CHAR String} {OL
16d90 45 4f 42 4a 45 43 54 5c 0d 0a 42 69 6e 61 72 79  EOBJECT\..Binary
16da0 7d 20 7b 52 41 57 20 42 69 6e 61 72 79 7d 20 7b  } {RAW Binary} {
16db0 52 45 41 4c 20 44 6f 75 62 6c 65 7d 20 7b 53 49  REAL Double} {SI
16dc0 4e 47 4c 45 20 53 69 6e 67 6c 65 7d 20 7b 53 4d  NGLE Single} {SM
16dd0 41 4c 4c 44 41 54 45 20 44 61 74 65 54 69 6d 65  ALLDATE DateTime
16de0 7d 5c 0d 0a 7b 53 4d 41 4c 4c 49 4e 54 20 49 6e  }\..{SMALLINT In
16df0 74 31 36 7d 20 7b 53 4d 41 4c 4c 55 49 4e 54 20  t16} {SMALLUINT 
16e00 55 49 6e 74 31 36 7d 20 7b 53 54 52 49 4e 47 20  UInt16} {STRING 
16e10 53 74 72 69 6e 67 7d 20 7b 54 45 58 54 20 53 74  String} {TEXT St
16e20 72 69 6e 67 7d 20 7b 54 49 4d 45 5c 0d 0a 44 61  ring} {TIME\..Da
16e30 74 65 54 69 6d 65 7d 20 7b 54 49 4d 45 53 54 41  teTime} {TIMESTA
16e40 4d 50 20 44 61 74 65 54 69 6d 65 7d 20 7b 54 49  MP DateTime} {TI
16e50 4e 59 49 4e 54 20 42 79 74 65 7d 20 7b 54 49 4e  NYINT Byte} {TIN
16e60 59 53 49 4e 54 20 53 42 79 74 65 7d 20 7b 55 49  YSINT SByte} {UI
16e70 4e 54 20 55 49 6e 74 33 32 7d 5c 0d 0a 7b 55 49  NT UInt32}\..{UI
16e80 4e 54 38 20 42 79 74 65 7d 20 7b 55 49 4e 54 31  NT8 Byte} {UINT1
16e90 36 20 55 49 6e 74 31 36 7d 20 7b 55 49 4e 54 33  6 UInt16} {UINT3
16ea0 32 20 55 49 6e 74 33 32 7d 20 7b 55 49 4e 54 36  2 UInt32} {UINT6
16eb0 34 20 55 49 6e 74 36 34 7d 20 7b 55 4c 4f 4e 47  4 UInt64} {ULONG
16ec0 20 55 49 6e 74 36 34 7d 5c 0d 0a 7b 55 4e 49 51   UInt64}\..{UNIQ
16ed0 55 45 49 44 45 4e 54 49 46 49 45 52 20 47 75 69  UEIDENTIFIER Gui
16ee0 64 7d 20 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45  d} {UNSIGNEDINTE
16ef0 47 45 52 20 55 49 6e 74 36 34 7d 20 7b 55 4e 53  GER UInt64} {UNS
16f00 49 47 4e 45 44 49 4e 54 45 47 45 52 38 20 42 79  IGNEDINTEGER8 By
16f10 74 65 7d 5c 0d 0a 7b 55 4e 53 49 47 4e 45 44 49  te}\..{UNSIGNEDI
16f20 4e 54 45 47 45 52 31 36 20 55 49 6e 74 31 36 7d  NTEGER16 UInt16}
16f30 20 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45   {UNSIGNEDINTEGE
16f40 52 33 32 20 55 49 6e 74 33 32 7d 20 7b 55 4e 53  R32 UInt32} {UNS
16f50 49 47 4e 45 44 49 4e 54 45 47 45 52 36 34 5c 0d  IGNEDINTEGER64\.
16f60 0a 55 49 6e 74 36 34 7d 20 7b 56 41 52 42 49 4e  .UInt64} {VARBIN
16f70 41 52 59 20 42 69 6e 61 72 79 7d 20 7b 56 41 52  ARY Binary} {VAR
16f80 43 48 41 52 20 41 6e 73 69 53 74 72 69 6e 67 7d  CHAR AnsiString}
16f90 20 7b 56 41 52 43 48 41 52 32 20 41 6e 73 69 53   {VARCHAR2 AnsiS
16fa0 74 72 69 6e 67 7d 20 7b 59 45 53 4e 4f 5c 0d 0a  tring} {YESNO\..
16fb0 42 6f 6f 6c 65 61 6e 7d 7d 7d 0d 0a 0d 0a 23 23  Boolean}}}....##
16fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0d 0a 0d  #############...
17010 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
17020 61 74 61 2d 31 2e 35 36 20 7b 74 6f 74 79 70 65  ata-1.56 {totype
17030 20 65 78 74 65 6e 73 69 6f 6e 7d 20 2d 73 65 74   extension} -set
17040 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
17050 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
17060 74 61 2d 31 2e 35 36 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.56.db]..} -
17070 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f  body {..  set co
17080 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
17090 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 73 65  onnection]..  se
170a0 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
170b0 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  ...  $connection
170c0 20 45 6e 61 62 6c 65 45 78 74 65 6e 73 69 6f 6e   EnableExtension
170d0 73 20 74 72 75 65 0d 0a 20 20 24 63 6f 6e 6e 65  s true..  $conne
170e0 63 74 69 6f 6e 20 4c 6f 61 64 45 78 74 65 6e 73  ction LoadExtens
170f0 69 6f 6e 20 5b 67 65 74 43 6f 72 65 42 69 6e 61  ion [getCoreBina
17100 72 79 46 69 6c 65 4e 61 6d 65 5d 20 73 71 6c 69  ryFileName] sqli
17110 74 65 33 5f 74 6f 74 79 70 65 5f 69 6e 69 74 0d  te3_totype_init.
17120 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
17130 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
17140 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
17150 20 24 64 62 20 22 53 45 4c 45 43 54 20 74 6f 69   $db "SELECT toi
17160 6e 74 65 67 65 72 28 27 31 27 29 3b 22 5d 0d 0a  nteger('1');"]..
17170 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
17180 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
17190 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
171a0 62 20 22 53 45 4c 45 43 54 20 74 6f 69 6e 74 65  b "SELECT tointe
171b0 67 65 72 28 27 31 78 27 29 3b 22 5d 0d 0a 20 20  ger('1x');"]..  
171c0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
171d0 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
171e0 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
171f0 22 53 45 4c 45 43 54 20 74 6f 72 65 61 6c 28 27  "SELECT toreal('
17200 31 2e 30 31 27 29 3b 22 5d 0d 0a 20 20 6c 61 70  1.01');"]..  lap
17210 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
17220 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
17230 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45  e scalar $db "SE
17240 4c 45 43 54 20 74 6f 72 65 61 6c 28 27 31 2e 30  LECT toreal('1.0
17250 78 27 29 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20  x');"]....  set 
17260 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
17270 75 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43 6f  up {..  freeDbCo
17280 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e  nnection....  un
17290 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
172a0 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f  result connectio
172b0 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  n....  cleanupDb
172c0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
172d0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
172e0 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  n db fileName..}
172f0 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d   -constraints \.
17300 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32  .{eagle monoBug2
17310 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
17320 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
17330 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
17340 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d  Lite} -result \.
17350 0a 7b 31 20 7b 7d 20 31 2e 30 31 20 7b 7d 7d 7d  .{1 {} 1.01 {}}}
17360 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
17370 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
173a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
173b0 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
173c0 74 65 73 74 20 64 61 74 61 2d 31 2e 35 37 20 7b  test data-1.57 {
173d0 72 65 67 65 78 70 20 65 78 74 65 6e 73 69 6f 6e  regexp extension
173e0 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
173f0 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
17400 61 6d 65 20 64 61 74 61 2d 31 2e 35 37 2e 64 62  ame data-1.57.db
17410 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
17420 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
17430 6e 20 70 61 74 74 65 72 6e 20 72 65 73 75 6c 74  n pattern result
17440 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63  ....  set connec
17450 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65  tion [getDbConne
17460 63 74 69 6f 6e 5d 0d 0a 20 20 73 65 74 20 72 65  ction]..  set re
17470 73 75 6c 74 28 31 29 20 5b 6c 69 73 74 5d 0d 0a  sult(1) [list]..
17480 0d 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  ..  $connection 
17490 45 6e 61 62 6c 65 45 78 74 65 6e 73 69 6f 6e 73  EnableExtensions
174a0 20 74 72 75 65 0d 0a 20 20 24 63 6f 6e 6e 65 63   true..  $connec
174b0 74 69 6f 6e 20 4c 6f 61 64 45 78 74 65 6e 73 69  tion LoadExtensi
174c0 6f 6e 20 5b 67 65 74 43 6f 72 65 42 69 6e 61 72  on [getCoreBinar
174d0 79 46 69 6c 65 4e 61 6d 65 5d 20 73 71 6c 69 74  yFileName] sqlit
174e0 65 33 5f 72 65 67 65 78 70 5f 69 6e 69 74 0d 0a  e3_regexp_init..
174f0 0d 0a 20 20 73 65 74 20 70 61 74 74 65 72 6e 28  ..  set pattern(
17500 31 29 20 7b 5e 5c 64 2b 20 5b 41 2d 5a 5d 7b 31  1) {^\d+ [A-Z]{1
17510 2c 33 7d 24 7d 3b 20 23 20 76 61 6c 69 64 0d 0a  ,3}$}; # valid..
17520 20 20 73 65 74 20 70 61 74 74 65 72 6e 28 32 29    set pattern(2)
17530 20 7b 5e 5c 64 2b 20 5b 43 5d 28 24 7d 3b 20 23   {^\d+ [C]($}; #
17540 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 6c 61   invalid....  la
17550 70 70 65 6e 64 20 72 65 73 75 6c 74 28 31 29 20  ppend result(1) 
17560 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71  [catch {..    sq
17570 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
17580 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 53  te scalar $db "S
17590 45 4c 45 43 54 20 52 45 47 45 58 50 28 27 24 70  ELECT REGEXP('$p
175a0 61 74 74 65 72 6e 28 31 29 27 2c 20 27 31 20 41  attern(1)', '1 A
175b0 42 27 29 3b 22 0d 0a 20 20 7d 20 72 65 73 75 6c  B');"..  } resul
175c0 74 28 32 29 5d 20 24 72 65 73 75 6c 74 28 32 29  t(2)] $result(2)
175d0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
175e0 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68 20 7b  sult(1) [catch {
175f0 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74  ..    sql execut
17600 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
17610 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 52 45  r $db "SELECT RE
17620 47 45 58 50 28 27 24 70 61 74 74 65 72 6e 28 32  GEXP('$pattern(2
17630 29 27 2c 20 27 31 20 41 42 27 29 3b 22 0d 0a 20  )', '1 AB');".. 
17640 20 7d 20 72 65 73 75 6c 74 28 32 29 5d 20 5b 73   } result(2)] [s
17650 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69 6e 64  tring trim [lind
17660 65 78 20 5b 73 70 6c 69 74 20 24 72 65 73 75 6c  ex [split $resul
17670 74 28 32 29 20 5c 6e 5d 20 31 5d 5d 0d 0a 0d 0a  t(2) \n] 1]]....
17680 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
17690 28 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  (1) [catch {..  
176a0 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65    sql execute -e
176b0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
176c0 62 20 22 53 45 4c 45 43 54 20 27 31 20 41 42 27  b "SELECT '1 AB'
176d0 20 52 45 47 45 58 50 20 27 24 70 61 74 74 65 72   REGEXP '$patter
176e0 6e 28 31 29 27 3b 22 0d 0a 20 20 7d 20 72 65 73  n(1)';"..  } res
176f0 75 6c 74 28 32 29 5d 20 24 72 65 73 75 6c 74 28  ult(2)] $result(
17700 32 29 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  2)....  lappend 
17710 72 65 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68  result(1) [catch
17720 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63   {..    sql exec
17730 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
17740 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20  lar $db "SELECT 
17750 27 31 20 41 42 27 20 52 45 47 45 58 50 20 27 24  '1 AB' REGEXP '$
17760 70 61 74 74 65 72 6e 28 32 29 27 3b 22 0d 0a 20  pattern(2)';".. 
17770 20 7d 20 72 65 73 75 6c 74 28 32 29 5d 20 5b 73   } result(2)] [s
17780 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69 6e 64  tring trim [lind
17790 65 78 20 5b 73 70 6c 69 74 20 24 72 65 73 75 6c  ex [split $resul
177a0 74 28 32 29 20 5c 6e 5d 20 31 5d 5d 0d 0a 0d 0a  t(2) \n] 1]]....
177b0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
177c0 28 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  (1) [catch {..  
177d0 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65    sql execute -e
177e0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
177f0 62 20 22 53 45 4c 45 43 54 20 52 45 47 45 58 50  b "SELECT REGEXP
17800 28 27 24 70 61 74 74 65 72 6e 28 31 29 27 2c 20  ('$pattern(1)', 
17810 27 32 27 29 3b 22 0d 0a 20 20 7d 20 72 65 73 75  '2');"..  } resu
17820 6c 74 28 32 29 5d 20 24 72 65 73 75 6c 74 28 32  lt(2)] $result(2
17830 29 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  )....  lappend r
17840 65 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68 20  esult(1) [catch 
17850 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75  {..    sql execu
17860 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
17870 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 52  ar $db "SELECT R
17880 45 47 45 58 50 28 27 24 70 61 74 74 65 72 6e 28  EGEXP('$pattern(
17890 32 29 27 2c 20 27 32 27 29 3b 22 0d 0a 20 20 7d  2)', '2');"..  }
178a0 20 72 65 73 75 6c 74 28 32 29 5d 20 5b 73 74 72   result(2)] [str
178b0 69 6e 67 20 74 72 69 6d 20 5b 6c 69 6e 64 65 78  ing trim [lindex
178c0 20 5b 73 70 6c 69 74 20 24 72 65 73 75 6c 74 28   [split $result(
178d0 32 29 20 5c 6e 5d 20 31 5d 5d 0d 0a 0d 0a 20 20  2) \n] 1]]....  
178e0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 28 31  lappend result(1
178f0 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ) [catch {..    
17900 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
17910 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
17920 22 53 45 4c 45 43 54 20 27 32 27 20 52 45 47 45  "SELECT '2' REGE
17930 58 50 20 27 24 70 61 74 74 65 72 6e 28 31 29 27  XP '$pattern(1)'
17940 3b 22 0d 0a 20 20 7d 20 72 65 73 75 6c 74 28 32  ;"..  } result(2
17950 29 5d 20 24 72 65 73 75 6c 74 28 32 29 0d 0a 0d  )] $result(2)...
17960 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
17970 74 28 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20  t(1) [catch {.. 
17980 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d     sql execute -
17990 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
179a0 64 62 20 22 53 45 4c 45 43 54 20 27 32 27 20 52  db "SELECT '2' R
179b0 45 47 45 58 50 20 27 24 70 61 74 74 65 72 6e 28  EGEXP '$pattern(
179c0 32 29 27 3b 22 0d 0a 20 20 7d 20 72 65 73 75 6c  2)';"..  } resul
179d0 74 28 32 29 5d 20 5b 73 74 72 69 6e 67 20 74 72  t(2)] [string tr
179e0 69 6d 20 5b 6c 69 6e 64 65 78 20 5b 73 70 6c 69  im [lindex [spli
179f0 74 20 24 72 65 73 75 6c 74 28 32 29 20 5c 6e 5d  t $result(2) \n]
17a00 20 31 5d 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65   1]]....  set re
17a10 73 75 6c 74 28 31 29 0d 0a 7d 20 2d 63 6c 65 61  sult(1)..} -clea
17a20 6e 75 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43  nup {..  freeDbC
17a30 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
17a40 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
17a50 20 70 61 74 74 65 72 6e 20 72 65 73 75 6c 74 20   pattern result 
17a60 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  connection....  
17a70 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
17a80 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
17a90 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20 66 69  nocomplain db fi
17aa0 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
17ab0 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
17ac0 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
17ad0 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
17ae0 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
17af0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
17b00 72 65 73 75 6c 74 20 5c 0d 0a 7b 30 20 31 20 31  result \..{0 1 1
17b10 20 7b 75 6e 6d 61 74 63 68 65 64 20 27 28 27 7d   {unmatched '('}
17b20 20 30 20 31 20 31 20 7b 75 6e 6d 61 74 63 68 65   0 1 1 {unmatche
17b30 64 20 27 28 27 7d 20 30 20 30 20 31 20 7b 75 6e  d '('} 0 0 1 {un
17b40 6d 61 74 63 68 65 64 20 27 28 27 7d 20 30 20 30  matched '('} 0 0
17b50 20 31 5c 0d 0a 7b 75 6e 6d 61 74 63 68 65 64 20   1\..{unmatched 
17b60 27 28 27 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  '('}}}....######
17b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17bb0 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 65 70  #########....rep
17bc0 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63  ortSQLiteResourc
17bd0 65 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  es $test_channel
17be0 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
17bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17c30 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
17c40 74 65 73 74 20 64 61 74 61 2d 31 2e 35 38 20 7b  test data-1.58 {
17c50 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
17c60 2e 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 20 6d  .ReleaseMemory m
17c70 65 74 68 6f 64 7d 20 2d 73 65 74 75 70 20 7b 0d  ethod} -setup {.
17c80 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
17c90 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
17ca0 35 38 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  58.db]..} -body 
17cb0 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  {..  set result 
17cc0 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 65 74 20  [list]....  set 
17cd0 6e 46 72 65 65 20 30 3b 20 73 65 74 20 72 65 73  nFree 0; set res
17ce0 65 74 4f 6b 20 66 61 6c 73 65 3b 20 73 65 74 20  etOk false; set 
17cf0 6e 4c 61 72 67 65 73 74 20 30 0d 0a 20 20 73 65  nLargest 0..  se
17d00 74 20 63 6f 64 65 20 5b 6f 62 6a 65 63 74 20 69  t code [object i
17d10 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 53  nvoke \..      S
17d20 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
17d30 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
17d40 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  on ReleaseMemory
17d50 20 5c 0d 0a 20 20 20 20 20 20 2d 31 20 74 72 75   \..      -1 tru
17d60 65 20 74 72 75 65 20 6e 46 72 65 65 20 72 65 73  e true nFree res
17d70 65 74 4f 6b 20 6e 4c 61 72 67 65 73 74 5d 0d 0a  etOk nLargest]..
17d80 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
17d90 6c 74 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  lt [list $code $
17da0 6e 46 72 65 65 20 24 72 65 73 65 74 4f 6b 20 24  nFree $resetOk $
17db0 6e 4c 61 72 67 65 73 74 5d 0d 0a 0d 0a 20 20 73  nLargest]....  s
17dc0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
17dd0 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
17de0 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63  x);"..  sql exec
17df0 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
17e00 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
17e10 45 53 28 52 41 4e 44 4f 4d 42 4c 4f 42 28 31 30  ES(RANDOMBLOB(10
17e20 34 38 35 37 36 29 29 3b 22 0d 0a 0d 0a 20 20 73  48576));"....  s
17e30 65 74 20 6e 46 72 65 65 20 30 3b 20 73 65 74 20  et nFree 0; set 
17e40 72 65 73 65 74 4f 6b 20 66 61 6c 73 65 3b 20 73  resetOk false; s
17e50 65 74 20 6e 4c 61 72 67 65 73 74 20 30 0d 0a 20  et nLargest 0.. 
17e60 20 73 65 74 20 63 6f 64 65 20 5b 6f 62 6a 65 63   set code [objec
17e70 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20  t invoke \..    
17e80 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
17e90 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
17ea0 63 74 69 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d  ction ReleaseMem
17eb0 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 2d 31 20  ory \..      -1 
17ec0 74 72 75 65 20 74 72 75 65 20 6e 46 72 65 65 20  true true nFree 
17ed0 72 65 73 65 74 4f 6b 20 6e 4c 61 72 67 65 73 74  resetOk nLargest
17ee0 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65  ]....  tputs $te
17ef0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17f00 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
17f10 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 72 65 6c  "---- memory rel
17f20 65 61 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e  eased by SQLite.
17f30 2e 2e 20 22 20 24 6e 46 72 65 65 20 22 20 62 79  .. " $nFree " by
17f40 74 65 73 5c 6e 22 5d 0d 0a 0d 0a 20 20 6c 61 70  tes\n"]....  lap
17f50 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73  pend result [lis
17f60 74 20 24 63 6f 64 65 20 24 6e 46 72 65 65 20 24  t $code $nFree $
17f70 72 65 73 65 74 4f 6b 20 24 6e 4c 61 72 67 65 73  resetOk $nLarges
17f80 74 5d 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  t]....  cleanupD
17f90 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 63  b $fileName..  c
17fa0 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
17fb0 65 63 74 6f 72 69 65 73 20 24 74 65 73 74 5f 63  ectories $test_c
17fc0 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20  hannel true.... 
17fd0 20 73 65 74 20 6e 46 72 65 65 20 30 3b 20 73 65   set nFree 0; se
17fe0 74 20 72 65 73 65 74 4f 6b 20 66 61 6c 73 65 3b  t resetOk false;
17ff0 20 73 65 74 20 6e 4c 61 72 67 65 73 74 20 30 0d   set nLargest 0.
18000 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 6f 62 6a  .  set code [obj
18010 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20  ect invoke \..  
18020 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
18030 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
18040 6e 65 63 74 69 6f 6e 20 52 65 6c 65 61 73 65 4d  nection ReleaseM
18050 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 2d  emory \..      -
18060 31 20 74 72 75 65 20 74 72 75 65 20 6e 46 72 65  1 true true nFre
18070 65 20 72 65 73 65 74 4f 6b 20 6e 4c 61 72 67 65  e resetOk nLarge
18080 73 74 5d 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24  st]....  tputs $
18090 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
180a0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
180b0 20 20 22 2d 2d 2d 2d 20 6c 61 72 67 65 73 74 20    "---- largest 
180c0 66 72 65 65 20 53 51 4c 69 74 65 20 68 65 61 70  free SQLite heap
180d0 20 62 6c 6f 63 6b 2e 2e 2e 20 22 20 24 6e 4c 61   block... " $nLa
180e0 72 67 65 73 74 20 22 20 62 79 74 65 73 5c 6e 22  rgest " bytes\n"
180f0 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
18100 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 63 6f 64  esult [list $cod
18110 65 20 24 6e 46 72 65 65 20 24 72 65 73 65 74 4f  e $nFree $resetO
18120 6b 20 24 6e 4c 61 72 67 65 73 74 5d 0d 0a 7d 20  k $nLargest]..} 
18130 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
18140 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
18150 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
18160 63 6f 6d 70 6c 61 69 6e 20 6e 4c 61 72 67 65 73  complain nLarges
18170 74 20 72 65 73 65 74 4f 6b 20 6e 46 72 65 65 20  t resetOk nFree 
18180 63 6f 64 65 20 72 65 73 75 6c 74 20 64 62 20 66  code result db f
18190 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
181a0 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d  traints {eagle m
181b0 6f 6e 6f 42 75 67 32 38 20 63 6f 6e 66 69 67 75  onoBug28 configu
181c0 72 61 74 69 6f 6e 2e 52 65 6c 65 61 73 65 20 63  ration.Release c
181d0 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
181e0 6c 65 2e 44 41 54 41 5c 0d 0a 53 51 4c 69 74 65  le.DATA\..SQLite
181f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
18200 69 74 65 7d 20 2d 6d 61 74 63 68 20 72 65 67 65  ite} -match rege
18210 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 5c 7b 42  xp -result {^\{B
18220 75 73 79 20 30 20 46 61 6c 73 65 20 30 5c 7d 20  usy 0 False 0\} 
18230 5c 7b 42 75 73 79 5c 0d 0a 5c 64 2b 20 46 61 6c  \{Busy\..\d+ Fal
18240 73 65 20 30 5c 7d 20 5c 7b 4f 6b 20 30 20 54 72  se 0\} \{Ok 0 Tr
18250 75 65 20 5c 64 2b 5c 7d 24 7d 7d 0d 0a 0d 0a 23  ue \d+\}$}}....#
18260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
182a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
182b0 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
182c0 64 61 74 61 2d 31 2e 35 39 20 7b 70 65 72 63 65  data-1.59 {perce
182d0 6e 74 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e 7d  ntile extension}
182e0 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
182f0 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
18300 6d 65 20 64 61 74 61 2d 31 2e 35 39 2e 64 62 5d  me data-1.59.db]
18310 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
18320 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67  et connection [g
18330 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d  etDbConnection].
18340 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c  .  set result [l
18350 69 73 74 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65  ist]....  $conne
18360 63 74 69 6f 6e 20 45 6e 61 62 6c 65 45 78 74 65  ction EnableExte
18370 6e 73 69 6f 6e 73 20 74 72 75 65 0d 0a 20 20 24  nsions true..  $
18380 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45  connection LoadE
18390 78 74 65 6e 73 69 6f 6e 20 5b 67 65 74 43 6f 72  xtension [getCor
183a0 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d  eBinaryFileName]
183b0 20 73 71 6c 69 74 65 33 5f 70 65 72 63 65 6e 74   sqlite3_percent
183c0 69 6c 65 5f 69 6e 69 74 0d 0a 0d 0a 20 20 6c 61  ile_init....  la
183d0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
183e0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
183f0 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
18400 29 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  );"]..  lappend 
18410 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
18420 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
18430 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
18440 29 2c 28 32 29 2c 28 33 29 2c 28 34 29 3b 22 5d  ),(2),(3),(4);"]
18450 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
18460 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
18470 24 64 62 20 22 53 45 4c 45 43 54 20 70 65 72 63  $db "SELECT perc
18480 65 6e 74 69 6c 65 28 78 2c 32 35 29 20 46 52 4f  entile(x,25) FRO
18490 4d 20 74 31 22 5d 0d 0a 0d 0a 20 20 6c 61 70 70  M t1"]....  lapp
184a0 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
184b0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
184c0 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
184d0 20 20 20 20 20 22 53 45 4c 45 43 54 20 70 65 72       "SELECT per
184e0 63 65 6e 74 69 6c 65 28 78 2c 32 35 29 20 46 52  centile(x,25) FR
184f0 4f 4d 20 74 31 22 5d 0d 0a 0d 0a 20 20 73 65 74  OM t1"]....  set
18500 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
18510 6e 75 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43  nup {..  freeDbC
18520 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
18530 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
18540 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74 69   result connecti
18550 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  on....  cleanupD
18560 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
18570 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
18580 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  in db fileName..
18590 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
185a0 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  ..{eagle monoBug
185b0 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
185c0 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
185d0 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
185e0 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c  QLite} -result \
185f0 0d 0a 7b 30 20 34 20 30 20 31 2e 37 35 7d 7d 0d  ..{0 4 0 1.75}}.
18600 0a 0d 0a 23 23 23 23 23 23 23 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 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
18660 65 73 74 20 64 61 74 61 2d 31 2e 36 30 20 7b 70  est data-1.60 {p
18670 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 79  er-connection ty
18680 70 65 20 6d 61 70 70 69 6e 67 73 7d 20 2d 73 65  pe mappings} -se
18690 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
186a0 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
186b0 61 74 61 2d 31 2e 36 30 2e 64 62 5d 20 22 22 20  ata-1.60.db] "" 
186c0 22 22 20 22 22 20 55 73 65 43 6f 6e 6e 65 63 74  "" "" UseConnect
186d0 69 6f 6e 54 79 70 65 73 0d 0a 7d 20 2d 62 6f 64  ionTypes..} -bod
186e0 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65  y {..  set conne
186f0 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
18700 65 63 74 69 6f 6e 5d 0d 0a 20 20 73 65 74 20 72  ection]..  set r
18710 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
18720 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
18730 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64   [sql execute $d
18740 62 20 5c 0d 0a 20 20 20 20 20 20 22 43 52 45 41  b \..      "CREA
18750 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 44 41  TE TABLE t1(x DA
18760 54 45 2c 20 79 20 4d 59 44 41 54 45 29 3b 22 5d  TE, y MYDATE);"]
18770 0d 0a 0d 0a 20 20 73 65 74 20 64 61 74 65 54 69  ....  set dateTi
18780 6d 65 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74  me [clock format
18790 20 5b 63 6c 6f 63 6b 20 73 63 61 6e 20 22 32 30   [clock scan "20
187a0 31 34 2d 30 32 2d 30 31 20 31 32 3a 33 34 3a 35  14-02-01 12:34:5
187b0 36 5a 22 5d 20 5c 0d 0a 20 20 20 20 20 20 2d 66  6Z"] \..      -f
187c0 6f 72 6d 61 74 20 79 79 79 79 4d 4d 64 64 48 48  ormat yyyyMMddHH
187d0 6d 6d 73 73 20 2d 67 6d 74 20 74 72 75 65 5d 0d  mmss -gmt true].
187e0 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
187f0 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
18800 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73   $db [appendArgs
18810 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52   \..      "INSER
18820 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
18830 20 56 41 4c 55 45 53 28 27 22 20 24 64 61 74 65   VALUES('" $date
18840 54 69 6d 65 20 22 27 2c 20 27 22 20 24 64 61 74  Time "', '" $dat
18850 65 54 69 6d 65 20 22 27 29 3b 22 5d 5d 0d 0a 0d  eTime "');"]]...
18860 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
18870 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
18880 76 65 72 62 61 74 69 6d 20 2d 65 78 65 63 75 74  verbatim -execut
18890 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
188a0 20 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 2d   list \..      -
188b0 64 61 74 65 74 69 6d 65 66 6f 72 6d 61 74 20 5b  datetimeformat [
188c0 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
188d0 74 5d 20 24 64 62 20 22 53 45 4c 45 43 54 20 78  t] $db "SELECT x
188e0 2c 20 79 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a  , y FROM t1;"]..
188f0 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
18900 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  lt [$connection 
18910 43 6c 65 61 72 54 79 70 65 4d 61 70 70 69 6e 67  ClearTypeMapping
18920 73 5d 3b 20 23 20 30 0d 0a 20 20 6c 61 70 70 65  s]; # 0..  lappe
18930 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e  nd result [$conn
18940 65 63 74 69 6f 6e 20 41 64 64 54 79 70 65 4d 61  ection AddTypeMa
18950 70 70 69 6e 67 20 4d 59 44 41 54 45 20 44 61 74  pping MYDATE Dat
18960 65 54 69 6d 65 20 66 61 6c 73 65 5d 3b 20 23 20  eTime false]; # 
18970 30 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  0..  lappend res
18980 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e  ult [$connection
18990 20 41 64 64 54 79 70 65 4d 61 70 70 69 6e 67 20   AddTypeMapping 
189a0 4d 59 44 41 54 45 20 44 61 74 65 54 69 6d 65 20  MYDATE DateTime 
189b0 74 72 75 65 5d 3b 20 23 20 31 0d 0a 20 20 6c 61  true]; # 1..  la
189c0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63  ppend result [$c
189d0 6f 6e 6e 65 63 74 69 6f 6e 20 41 64 64 54 79 70  onnection AddTyp
189e0 65 4d 61 70 70 69 6e 67 20 4d 59 44 41 54 45 20  eMapping MYDATE 
189f0 44 61 74 65 54 69 6d 65 20 66 61 6c 73 65 5d 3b  DateTime false];
18a00 20 23 20 31 0d 0a 20 20 6c 61 70 70 65 6e 64 20   # 1..  lappend 
18a10 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74  result [$connect
18a20 69 6f 6e 20 41 64 64 54 79 70 65 4d 61 70 70 69  ion AddTypeMappi
18a30 6e 67 20 4d 59 44 41 54 45 20 44 61 74 65 54 69  ng MYDATE DateTi
18a40 6d 65 20 74 72 75 65 5d 3b 20 23 20 32 0d 0a 20  me true]; # 2.. 
18a50 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
18a60 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 43 6c 65  [$connection Cle
18a70 61 72 54 79 70 65 4d 61 70 70 69 6e 67 73 5d 3b  arTypeMappings];
18a80 20 23 20 32 0d 0a 20 20 6c 61 70 70 65 6e 64 20   # 2..  lappend 
18a90 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74  result [$connect
18aa0 69 6f 6e 20 41 64 64 54 79 70 65 4d 61 70 70 69  ion AddTypeMappi
18ab0 6e 67 20 4d 59 44 41 54 45 20 44 61 74 65 54 69  ng MYDATE DateTi
18ac0 6d 65 20 74 72 75 65 5d 3b 20 23 20 30 0d 0a 0d  me true]; # 0...
18ad0 0a 20 20 73 65 74 20 74 79 70 65 4d 61 70 70 69  .  set typeMappi
18ae0 6e 67 73 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e  ngs [$connection
18af0 20 47 65 74 54 79 70 65 4d 61 70 70 69 6e 67 73   GetTypeMappings
18b00 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 66 6f  ]....  object fo
18b10 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69  reach -alias pai
18b20 72 20 24 74 79 70 65 4d 61 70 70 69 6e 67 73 20  r $typeMappings 
18b30 7b 0d 0a 20 20 20 20 73 65 74 20 74 79 70 65 4d  {..    set typeM
18b40 61 70 70 69 6e 67 20 5b 24 70 61 69 72 20 56 61  apping [$pair Va
18b50 6c 75 65 5d 0d 0a 20 20 20 20 6c 61 70 70 65 6e  lue]..    lappen
18b60 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 5b  d result [list [
18b70 24 70 61 69 72 20 4b 65 79 5d 20 5b 65 6e 75 6d  $pair Key] [enum
18b80 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 24 74 79  erableToList $ty
18b90 70 65 4d 61 70 70 69 6e 67 5d 5d 0d 0a 20 20 7d  peMapping]]..  }
18ba0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
18bb0 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
18bc0 65 20 2d 76 65 72 62 61 74 69 6d 20 2d 65 78 65  e -verbatim -exe
18bd0 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72  cute reader -for
18be0 6d 61 74 20 6c 69 73 74 20 5c 0d 0a 20 20 20 20  mat list \..    
18bf0 20 20 2d 64 61 74 65 74 69 6d 65 66 6f 72 6d 61    -datetimeforma
18c00 74 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f  t [getDateTimeFo
18c10 72 6d 61 74 5d 20 24 64 62 20 22 53 45 4c 45 43  rmat] $db "SELEC
18c20 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 3b 22  T x, y FROM t1;"
18c30 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
18c40 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
18c50 0a 20 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  .  freeDbConnect
18c60 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ion....  unset -
18c70 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 79 70 65 4d  nocomplain typeM
18c80 61 70 70 69 6e 67 20 74 79 70 65 4d 61 70 70 69  apping typeMappi
18c90 6e 67 73 20 70 61 69 72 20 72 65 73 75 6c 74 20  ngs pair result 
18ca0 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20  connection....  
18cb0 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
18cc0 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
18cd0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 65 54  nocomplain dateT
18ce0 69 6d 65 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ime db fileName.
18cf0 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
18d00 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
18d10 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
18d20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
18d30 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
18d40 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20  SQLite} -result 
18d50 5c 0d 0a 7b 30 20 31 20 7b 7b 32 30 31 34 2d 30  \..{0 1 {{2014-0
18d60 32 2d 30 31 20 31 32 3a 33 34 3a 35 36 7d 20 32  2-01 12:34:56} 2
18d70 30 31 34 30 32 30 31 31 32 33 34 35 36 7d 20 30  0140201123456} 0
18d80 20 30 20 31 20 31 20 32 20 32 20 30 20 7b 4d 59   0 1 1 2 2 0 {MY
18d90 44 41 54 45 20 7b 4d 59 44 41 54 45 5c 0d 0a 44  DATE {MYDATE\..D
18da0 61 74 65 54 69 6d 65 20 54 72 75 65 7d 7d 20 7b  ateTime True}} {
18db0 7b 32 30 31 34 2d 30 32 2d 30 31 20 31 32 3a 33  {2014-02-01 12:3
18dc0 34 3a 35 36 7d 20 7b 32 30 31 34 2d 30 32 2d 30  4:56} {2014-02-0
18dd0 31 20 31 32 3a 33 34 3a 35 36 7d 7d 7d 7d 0d 0a  1 12:34:56}}}}..
18de0 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
18df0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18e30 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
18e40 73 74 20 64 61 74 61 2d 31 2e 36 31 20 7b 53 45  st data-1.61 {SE
18e50 4c 45 43 54 20 77 69 74 68 6f 75 74 20 54 59 50  LECT without TYP
18e60 45 53 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ES} -setup {..  
18e70 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
18e80 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 31 2e  eName data-1.61.
18e90 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
18ea0 20 20 73 65 74 20 76 61 6c 75 65 73 20 5b 6c 69    set values [li
18eb0 73 74 20 4e 55 4c 4c 20 31 20 27 6f 6e 65 27 20  st NULL 1 'one' 
18ec0 31 2e 30 20 58 27 30 31 27 5d 0d 0a 20 20 73 71  1.0 X'01']..  sq
18ed0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
18ee0 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
18ef0 2c 20 79 29 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65  , y);"....  fore
18f00 61 63 68 20 78 20 24 76 61 6c 75 65 73 20 7b 0d  ach x $values {.
18f10 0a 20 20 20 20 66 6f 72 65 61 63 68 20 79 20 24  .    foreach y $
18f20 76 61 6c 75 65 73 20 7b 0d 0a 20 20 20 20 20 20  values {..      
18f30 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
18f40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
18f50 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52 54           "INSERT
18f60 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
18f70 56 41 4c 55 45 53 28 22 20 24 78 20 22 2c 20 22  VALUES(" $x ", "
18f80 20 24 79 20 22 29 3b 22 5d 0d 0a 20 20 20 20 7d   $y ");"]..    }
18f90 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65  ..  }....  sql e
18fa0 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
18fb0 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c  reader -format l
18fc0 69 73 74 20 2d 61 6c 6c 6f 77 6e 75 6c 6c 20 74  ist -allownull t
18fd0 72 75 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  rue $db \..     
18fe0 20 22 53 45 4c 45 43 54 20 72 6f 77 49 64 2c 20   "SELECT rowId, 
18ff0 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44  x, y FROM t1 ORD
19000 45 52 20 42 59 20 72 6f 77 49 64 3b 22 0d 0a 7d  ER BY rowId;"..}
19010 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
19020 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
19030 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
19040 6f 63 6f 6d 70 6c 61 69 6e 20 79 20 78 20 76 61  ocomplain y x va
19050 6c 75 65 73 20 64 62 20 66 69 6c 65 4e 61 6d 65  lues db fileName
19060 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
19070 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
19080 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
19090 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
190a0 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
190b0 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
190c0 20 5c 0d 0a 7b 31 20 7b 7d 20 7b 7d 20 32 20 7b   \..{1 {} {} 2 {
190d0 7d 20 31 20 33 20 7b 7d 20 6f 6e 65 20 34 20 7b  } 1 3 {} one 4 {
190e0 7d 20 31 20 35 20 7b 7d 20 31 20 36 20 31 20 7b  } 1 5 {} 1 6 1 {
190f0 7d 20 37 20 31 20 31 20 38 20 31 20 6f 6e 65 20  } 7 1 1 8 1 one 
19100 39 20 31 20 31 20 31 30 20 31 20 31 20 31 31 20  9 1 1 10 1 1 11 
19110 6f 6e 65 5c 0d 0a 7b 7d 20 31 32 20 6f 6e 65 20  one\..{} 12 one 
19120 31 20 31 33 20 6f 6e 65 20 6f 6e 65 20 31 34 20  1 13 one one 14 
19130 6f 6e 65 20 31 20 31 35 20 6f 6e 65 20 31 20 31  one 1 15 one 1 1
19140 36 20 31 20 7b 7d 20 31 37 20 31 20 31 20 31 38  6 1 {} 17 1 1 18
19150 20 31 20 6f 6e 65 20 31 39 20 31 20 31 20 32 30   1 one 19 1 1 20
19160 20 31 20 31 5c 0d 0a 32 31 20 31 20 7b 7d 20 32   1 1\..21 1 {} 2
19170 32 20 31 20 31 20 32 33 20 31 20 6f 6e 65 20 32  2 1 1 23 1 one 2
19180 34 20 31 20 31 20 32 35 20 31 20 31 7d 7d 0d 0a  4 1 1 25 1 1}}..
19190 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
191a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
191e0 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
191f0 73 74 20 64 61 74 61 2d 31 2e 36 32 20 7b 53 45  st data-1.62 {SE
19200 4c 45 43 54 20 77 69 74 68 20 54 59 50 45 53 7d  LECT with TYPES}
19210 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
19220 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
19230 6d 65 20 64 61 74 61 2d 31 2e 36 32 2e 64 62 5d  me data-1.62.db]
19240 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
19250 65 74 20 76 61 6c 75 65 73 20 5b 6c 69 73 74 20  et values [list 
19260 4e 55 4c 4c 20 31 20 27 6f 6e 65 27 20 31 2e 30  NULL 1 'one' 1.0
19270 20 58 27 30 31 27 5d 0d 0a 20 20 73 71 6c 20 65   X'01']..  sql e
19280 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41  xecute $db "CREA
19290 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  TE TABLE t1(x, y
192a0 29 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68  );"....  foreach
192b0 20 78 20 24 76 61 6c 75 65 73 20 7b 0d 0a 20 20   x $values {..  
192c0 20 20 66 6f 72 65 61 63 68 20 79 20 24 76 61 6c    foreach y $val
192d0 75 65 73 20 7b 0d 0a 20 20 20 20 20 20 73 71 6c  ues {..      sql
192e0 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70   execute $db [ap
192f0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
19300 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e        "INSERT IN
19310 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
19320 55 45 53 28 22 20 24 78 20 22 2c 20 22 20 24 79  UES(" $x ", " $y
19330 20 22 29 3b 22 5d 0d 0a 20 20 20 20 7d 0d 0a 20   ");"]..    }.. 
19340 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63   }....  sql exec
19350 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
19360 64 65 72 20 2d 66 6f 72 6d 61 74 20 6c 69 73 74  der -format list
19370 20 2d 61 6c 6c 6f 77 6e 75 6c 6c 20 74 72 75 65   -allownull true
19380 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 54   $db \..      "T
19390 59 50 45 53 20 49 4e 54 45 47 45 52 2c 20 49 4e  YPES INTEGER, IN
193a0 54 45 47 45 52 2c 20 52 45 41 4c 3b 20 53 45 4c  TEGER, REAL; SEL
193b0 45 43 54 20 72 6f 77 49 64 2c 20 78 2c 20 79 20  ECT rowId, x, y 
193c0 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
193d0 20 72 6f 77 49 64 3b 22 0d 0a 7d 20 2d 63 6c 65   rowId;"..} -cle
193e0 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
193f0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
19400 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
19410 6c 61 69 6e 20 79 20 78 20 76 61 6c 75 65 73 20  lain y x values 
19420 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
19430 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b  constraints \..{
19440 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20  eagle monoBug28 
19450 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
19460 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
19470 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
19480 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b  te} -result \..{
19490 31 20 7b 7d 20 7b 7d 20 32 20 7b 7d 20 31 20 33  1 {} {} 2 {} 1 3
194a0 20 7b 7d 20 30 20 34 20 7b 7d 20 31 20 35 20 7b   {} 0 4 {} 1 5 {
194b0 7d 20 30 20 36 20 31 20 7b 7d 20 37 20 31 20 31  } 0 6 1 {} 7 1 1
194c0 20 38 20 31 20 30 20 39 20 31 20 31 20 31 30 20   8 1 0 9 1 1 10 
194d0 31 20 30 20 31 31 20 30 20 7b 7d 20 31 32 5c 0d  1 0 11 0 {} 12\.
194e0 0a 30 20 31 20 31 33 20 30 20 30 20 31 34 20 30  .0 1 13 0 0 14 0
194f0 20 31 20 31 35 20 30 20 30 20 31 36 20 31 20 7b   1 15 0 0 16 1 {
19500 7d 20 31 37 20 31 20 31 20 31 38 20 31 20 30 20  } 17 1 1 18 1 0 
19510 31 39 20 31 20 31 20 32 30 20 31 20 30 20 32 31  19 1 1 20 1 0 21
19520 20 30 20 7b 7d 20 32 32 20 30 20 31 20 32 33 5c   0 {} 22 0 1 23\
19530 0d 0a 30 20 30 20 32 34 20 30 20 31 20 32 35 20  ..0 0 24 0 1 25 
19540 30 20 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  0 0}}....#######
19550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19590 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
195a0 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
195b0 2e 36 33 20 7b 53 51 4c 69 74 65 44 61 74 61 52  .63 {SQLiteDataR
195c0 65 61 64 65 72 20 48 61 73 52 6f 77 73 20 70 72  eader HasRows pr
195d0 6f 70 65 72 74 79 7d 20 2d 73 65 74 75 70 20 7b  operty} -setup {
195e0 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
195f0 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
19600 2e 36 33 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .63.db]..} -body
19610 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
19620 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45  e $db {..    CRE
19630 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
19640 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
19650 4c 45 20 74 32 28 78 29 3b 0d 0a 20 20 20 20 49  LE t2(x);..    I
19660 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 28 78  NSERT INTO t2 (x
19670 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20  ) VALUES(1);..  
19680 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
19690 33 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  3(x);..    INSER
196a0 54 20 49 4e 54 4f 20 74 33 20 28 78 29 20 56 41  T INTO t3 (x) VA
196b0 4c 55 45 53 28 31 29 3b 0d 0a 20 20 20 20 49 4e  LUES(1);..    IN
196c0 53 45 52 54 20 49 4e 54 4f 20 74 33 20 28 78 29  SERT INTO t3 (x)
196d0 20 56 41 4c 55 45 53 28 32 29 3b 0d 0a 20 20 7d   VALUES(2);..  }
196e0 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72  ....  set reader
196f0 28 31 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65  (1) [sql execute
19700 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
19710 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
19720 64 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  der -alias \..  
19730 20 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20      $db "SELECT 
19740 2a 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a  * FROM t1;"]....
19750 20 20 73 65 74 20 72 65 61 64 65 72 28 32 29 20    set reader(2) 
19760 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
19770 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
19780 72 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20  rmat datareader 
19790 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..      
197a0 24 64 62 20 22 53 45 4c 45 43 54 20 2a 20 46 52  $db "SELECT * FR
197b0 4f 4d 20 74 32 3b 22 5d 0d 0a 0d 0a 20 20 73 65  OM t2;"]....  se
197c0 74 20 72 65 61 64 65 72 28 33 29 20 5b 73 71 6c  t reader(3) [sql
197d0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
197e0 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
197f0 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69   datareader -ali
19800 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20  as \..      $db 
19810 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
19820 33 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 6e 6f  3;"]....  set no
19830 52 6f 77 20 22 2a 3a 20 4e 6f 20 63 75 72 72 65  Row "*: No curre
19840 6e 74 20 72 6f 77 2a 22 0d 0a 0d 0a 20 20 6c 69  nt row*"....  li
19850 73 74 20 5b 24 72 65 61 64 65 72 28 31 29 20 48  st [$reader(1) H
19860 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72  asRows] [$reader
19870 28 32 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72  (2) HasRows] [$r
19880 65 61 64 65 72 28 33 29 20 48 61 73 52 6f 77 73  eader(3) HasRows
19890 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61  ] \..      [$rea
198a0 64 65 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72  der(1) Read] [$r
198b0 65 61 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b  eader(2) Read] [
198c0 24 72 65 61 64 65 72 28 33 29 20 52 65 61 64 5d  $reader(3) Read]
198d0 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64   \..      [$read
198e0 65 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b  er(1) HasRows] [
198f0 24 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f  $reader(2) HasRo
19900 77 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20  ws] [$reader(3) 
19910 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20  HasRows] \..    
19920 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65    [catch {$reade
19930 72 28 31 29 20 49 74 65 6d 20 78 7d 20 65 72 72  r(1) Item x} err
19940 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63  or] [string matc
19950 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d  h $noRow $error]
19960 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68   \..      [catch
19970 20 7b 24 72 65 61 64 65 72 28 32 29 20 49 74 65   {$reader(2) Ite
19980 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72  m x} error] [str
19990 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77  ing match $noRow
199a0 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20   $error] \..    
199b0 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65    [catch {$reade
199c0 72 28 33 29 20 49 74 65 6d 20 78 7d 20 65 72 72  r(3) Item x} err
199d0 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63  or] [string matc
199e0 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d  h $noRow $error]
199f0 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64   \..      [$read
19a00 65 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b  er(1) HasRows] [
19a10 24 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f  $reader(2) HasRo
19a20 77 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20  ws] [$reader(3) 
19a30 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20  HasRows] \..    
19a40 20 20 5b 24 72 65 61 64 65 72 28 31 29 20 52 65    [$reader(1) Re
19a50 61 64 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20  ad] [$reader(2) 
19a60 52 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28 33  Read] [$reader(3
19a70 29 20 52 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20  ) Read] \..     
19a80 20 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73   [$reader(1) Has
19a90 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32  Rows] [$reader(2
19aa0 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61  ) HasRows] [$rea
19ab0 64 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20  der(3) HasRows] 
19ac0 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
19ad0 7b 24 72 65 61 64 65 72 28 31 29 20 49 74 65 6d  {$reader(1) Item
19ae0 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
19af0 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
19b00 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
19b10 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72   [catch {$reader
19b20 28 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f  (2) Item x} erro
19b30 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  r] [string match
19b40 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20   $noRow $error] 
19b50 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
19b60 7b 24 72 65 61 64 65 72 28 33 29 20 49 74 65 6d  {$reader(3) Item
19b70 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
19b80 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
19b90 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
19ba0 20 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73   [$reader(1) Has
19bb0 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32  Rows] [$reader(2
19bc0 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61  ) HasRows] [$rea
19bd0 64 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20  der(3) HasRows] 
19be0 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65  \..      [$reade
19bf0 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61  r(1) Read] [$rea
19c00 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72  der(2) Read] [$r
19c10 65 61 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c  eader(3) Read] \
19c20 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72  ..      [$reader
19c30 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72  (1) HasRows] [$r
19c40 65 61 64 65 72 28 32 29 20 48 61 73 52 6f 77 73  eader(2) HasRows
19c50 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 48 61  ] [$reader(3) Ha
19c60 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20  sRows] \..      
19c70 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
19c80 31 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  1) Item x} error
19c90 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
19ca0 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c  $noRow $error] \
19cb0 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
19cc0 24 72 65 61 64 65 72 28 32 29 20 49 74 65 6d 20  $reader(2) Item 
19cd0 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
19ce0 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
19cf0 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
19d00 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
19d10 33 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  3) Item x} error
19d20 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
19d30 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 0d 0a  $noRow $error]..
19d40 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
19d50 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
19d60 6e 20 72 65 61 64 65 72 0d 0a 0d 0a 20 20 63 6c  n reader....  cl
19d70 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
19d80 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
19d90 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72 20 6e  complain error n
19da0 6f 52 6f 77 20 64 62 20 66 69 6c 65 4e 61 6d 65  oRow db fileName
19db0 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
19dc0 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
19dd0 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
19de0 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
19df0 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
19e00 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
19e10 20 5c 0d 0a 7b 46 61 6c 73 65 20 54 72 75 65 20   \..{False True 
19e20 54 72 75 65 20 46 61 6c 73 65 20 54 72 75 65 20  True False True 
19e30 54 72 75 65 20 46 61 6c 73 65 20 54 72 75 65 20  True False True 
19e40 54 72 75 65 20 31 20 54 72 75 65 20 30 20 46 61  True 1 True 0 Fa
19e50 6c 73 65 20 30 20 46 61 6c 73 65 20 46 61 6c 73  lse 0 False Fals
19e60 65 5c 0d 0a 54 72 75 65 20 54 72 75 65 20 46 61  e\..True True Fa
19e70 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20 46  lse False True F
19e80 61 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20  alse False True 
19e90 31 20 54 72 75 65 20 31 20 54 72 75 65 20 30 20  1 True 1 True 0 
19ea0 46 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73  False False Fals
19eb0 65 5c 0d 0a 54 72 75 65 20 46 61 6c 73 65 20 46  e\..True False F
19ec0 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65  alse False False
19ed0 20 46 61 6c 73 65 20 46 61 6c 73 65 20 31 20 54   False False 1 T
19ee0 72 75 65 20 31 20 54 72 75 65 20 31 20 54 72 75  rue 1 True 1 Tru
19ef0 65 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  e}}....#########
19f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f40 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
19f50 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36  t {test data-1.6
19f60 34 20 7b 53 51 4c 69 74 65 44 61 74 61 52 65 61  4 {SQLiteDataRea
19f70 64 65 72 20 73 74 69 63 6b 79 20 48 61 73 52 6f  der sticky HasRo
19f80 77 73 20 70 72 6f 70 65 72 74 79 7d 20 2d 73 65  ws property} -se
19f90 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
19fa0 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
19fb0 61 74 61 2d 31 2e 36 34 2e 64 62 5d 20 22 22 20  ata-1.64.db] "" 
19fc0 22 22 20 22 22 20 53 74 69 63 6b 79 48 61 73 52  "" "" StickyHasR
19fd0 6f 77 73 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  ows..} -body {..
19fe0 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
19ff0 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20  b {..    CREATE 
1a000 54 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20  TABLE t1(x);..  
1a010 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1a020 32 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  2(x);..    INSER
1a030 54 20 49 4e 54 4f 20 74 32 20 28 78 29 20 56 41  T INTO t2 (x) VA
1a040 4c 55 45 53 28 31 29 3b 0d 0a 20 20 20 20 43 52  LUES(1);..    CR
1a050 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 29  EATE TABLE t3(x)
1a060 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
1a070 54 4f 20 74 33 20 28 78 29 20 56 41 4c 55 45 53  TO t3 (x) VALUES
1a080 28 31 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  (1);..    INSERT
1a090 20 49 4e 54 4f 20 74 33 20 28 78 29 20 56 41 4c   INTO t3 (x) VAL
1a0a0 55 45 53 28 32 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a  UES(2);..  }....
1a0b0 20 20 73 65 74 20 72 65 61 64 65 72 28 31 29 20    set reader(1) 
1a0c0 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
1a0d0 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
1a0e0 72 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20  rmat datareader 
1a0f0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..      
1a100 24 64 62 20 22 53 45 4c 45 43 54 20 2a 20 46 52  $db "SELECT * FR
1a110 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65  OM t1;"]....  se
1a120 74 20 72 65 61 64 65 72 28 32 29 20 5b 73 71 6c  t reader(2) [sql
1a130 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
1a140 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
1a150 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69   datareader -ali
1a160 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20  as \..      $db 
1a170 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1a180 32 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  2;"]....  set re
1a190 61 64 65 72 28 33 29 20 5b 73 71 6c 20 65 78 65  ader(3) [sql exe
1a1a0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
1a1b0 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74  ader -format dat
1a1c0 61 72 65 61 64 65 72 20 2d 61 6c 69 61 73 20 5c  areader -alias \
1a1d0 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53 45 4c  ..      $db "SEL
1a1e0 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 22 5d  ECT * FROM t3;"]
1a1f0 0d 0a 0d 0a 20 20 73 65 74 20 6e 6f 52 6f 77 20  ....  set noRow 
1a200 22 2a 3a 20 4e 6f 20 63 75 72 72 65 6e 74 20 72  "*: No current r
1a210 6f 77 2a 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b  ow*"....  list [
1a220 24 72 65 61 64 65 72 28 31 29 20 48 61 73 52 6f  $reader(1) HasRo
1a230 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20  ws] [$reader(2) 
1a240 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65  HasRows] [$reade
1a250 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d  r(3) HasRows] \.
1a260 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28  .      [$reader(
1a270 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61 64 65  1) Read] [$reade
1a280 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72 65 61  r(2) Read] [$rea
1a290 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c 0d 0a  der(3) Read] \..
1a2a0 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31        [$reader(1
1a2b0 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61  ) HasRows] [$rea
1a2c0 64 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d 20  der(2) HasRows] 
1a2d0 5b 24 72 65 61 64 65 72 28 33 29 20 48 61 73 52  [$reader(3) HasR
1a2e0 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63  ows] \..      [c
1a2f0 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 31 29  atch {$reader(1)
1a300 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20   Item x} error] 
1a310 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e  [string match $n
1a320 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a  oRow $error] \..
1a330 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1a340 65 61 64 65 72 28 32 29 20 49 74 65 6d 20 78 7d  eader(2) Item x}
1a350 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1a360 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1a370 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63  ror] \..      [c
1a380 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 33 29  atch {$reader(3)
1a390 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20   Item x} error] 
1a3a0 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e  [string match $n
1a3b0 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a  oRow $error] \..
1a3c0 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31        [$reader(1
1a3d0 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61  ) HasRows] [$rea
1a3e0 64 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d 20  der(2) HasRows] 
1a3f0 5b 24 72 65 61 64 65 72 28 33 29 20 48 61 73 52  [$reader(3) HasR
1a400 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ows] \..      [$
1a410 72 65 61 64 65 72 28 31 29 20 52 65 61 64 5d 20  reader(1) Read] 
1a420 5b 24 72 65 61 64 65 72 28 32 29 20 52 65 61 64  [$reader(2) Read
1a430 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 52 65  ] [$reader(3) Re
1a440 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72  ad] \..      [$r
1a450 65 61 64 65 72 28 31 29 20 48 61 73 52 6f 77 73  eader(1) HasRows
1a460 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 48 61  ] [$reader(2) Ha
1a470 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28  sRows] [$reader(
1a480 33 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20  3) HasRows] \.. 
1a490 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65       [catch {$re
1a4a0 61 64 65 72 28 31 29 20 49 74 65 6d 20 78 7d 20  ader(1) Item x} 
1a4b0 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d  error] [string m
1a4c0 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72  atch $noRow $err
1a4d0 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61  or] \..      [ca
1a4e0 74 63 68 20 7b 24 72 65 61 64 65 72 28 32 29 20  tch {$reader(2) 
1a4f0 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b  Item x} error] [
1a500 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f  string match $no
1a510 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20  Row $error] \.. 
1a520 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65       [catch {$re
1a530 61 64 65 72 28 33 29 20 49 74 65 6d 20 78 7d 20  ader(3) Item x} 
1a540 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d  error] [string m
1a550 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72  atch $noRow $err
1a560 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72  or] \..      [$r
1a570 65 61 64 65 72 28 31 29 20 48 61 73 52 6f 77 73  eader(1) HasRows
1a580 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 48 61  ] [$reader(2) Ha
1a590 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28  sRows] [$reader(
1a5a0 33 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20  3) HasRows] \.. 
1a5b0 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31 29       [$reader(1)
1a5c0 20 52 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28   Read] [$reader(
1a5d0 32 29 20 52 65 61 64 5d 20 5b 24 72 65 61 64 65  2) Read] [$reade
1a5e0 72 28 33 29 20 52 65 61 64 5d 20 5c 0d 0a 20 20  r(3) Read] \..  
1a5f0 20 20 20 20 5b 24 72 65 61 64 65 72 28 31 29 20      [$reader(1) 
1a600 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65  HasRows] [$reade
1a610 72 28 32 29 20 48 61 73 52 6f 77 73 5d 20 5b 24  r(2) HasRows] [$
1a620 72 65 61 64 65 72 28 33 29 20 48 61 73 52 6f 77  reader(3) HasRow
1a630 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  s] \..      [cat
1a640 63 68 20 7b 24 72 65 61 64 65 72 28 31 29 20 49  ch {$reader(1) I
1a650 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1a660 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1a670 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ow $error] \..  
1a680 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61      [catch {$rea
1a690 64 65 72 28 32 29 20 49 74 65 6d 20 78 7d 20 65  der(2) Item x} e
1a6a0 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61  rror] [string ma
1a6b0 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f  tch $noRow $erro
1a6c0 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  r] \..      [cat
1a6d0 63 68 20 7b 24 72 65 61 64 65 72 28 33 29 20 49  ch {$reader(3) I
1a6e0 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1a6f0 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1a700 6f 77 20 24 65 72 72 6f 72 5d 0d 0a 7d 20 2d 63  ow $error]..} -c
1a710 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65  leanup {..  unse
1a720 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
1a730 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  ader....  cleanu
1a740 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
1a750 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
1a760 6c 61 69 6e 20 65 72 72 6f 72 20 6e 6f 52 6f 77  lain error noRow
1a770 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
1a780 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
1a790 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
1a7a0 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
1a7b0 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
1a7c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a7d0 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  ite} -result \..
1a7e0 7b 46 61 6c 73 65 20 54 72 75 65 20 54 72 75 65  {False True True
1a7f0 20 46 61 6c 73 65 20 54 72 75 65 20 54 72 75 65   False True True
1a800 20 46 61 6c 73 65 20 54 72 75 65 20 54 72 75 65   False True True
1a810 20 31 20 54 72 75 65 20 30 20 46 61 6c 73 65 20   1 True 0 False 
1a820 30 20 46 61 6c 73 65 20 46 61 6c 73 65 5c 0d 0a  0 False False\..
1a830 54 72 75 65 20 54 72 75 65 20 46 61 6c 73 65 20  True True False 
1a840 46 61 6c 73 65 20 54 72 75 65 20 46 61 6c 73 65  False True False
1a850 20 54 72 75 65 20 54 72 75 65 20 31 20 54 72 75   True True 1 Tru
1a860 65 20 31 20 54 72 75 65 20 30 20 46 61 6c 73 65  e 1 True 0 False
1a870 20 46 61 6c 73 65 20 54 72 75 65 5c 0d 0a 54 72   False True\..Tr
1a880 75 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20 46  ue False False F
1a890 61 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20  alse False True 
1a8a0 54 72 75 65 20 31 20 54 72 75 65 20 31 20 54 72  True 1 True 1 Tr
1a8b0 75 65 20 31 20 54 72 75 65 7d 7d 0d 0a 0d 0a 23  ue 1 True}}....#
1a8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1a910 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1a920 64 61 74 61 2d 31 2e 36 35 20 7b 53 51 4c 69 74  data-1.65 {SQLit
1a930 65 44 61 74 61 52 65 61 64 65 72 20 53 74 65 70  eDataReader Step
1a940 43 6f 75 6e 74 20 70 72 6f 70 65 72 74 79 7d 20  Count property} 
1a950 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
1a960 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
1a970 65 20 64 61 74 61 2d 31 2e 36 35 2e 64 62 5d 0d  e data-1.65.db].
1a980 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
1a990 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d  l execute $db {.
1a9a0 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1a9b0 45 20 74 31 28 78 29 3b 0d 0a 20 20 20 20 43 52  E t1(x);..    CR
1a9c0 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 29  EATE TABLE t2(x)
1a9d0 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
1a9e0 54 4f 20 74 32 20 28 78 29 20 56 41 4c 55 45 53  TO t2 (x) VALUES
1a9f0 28 31 29 3b 0d 0a 20 20 20 20 43 52 45 41 54 45  (1);..    CREATE
1aa00 20 54 41 42 4c 45 20 74 33 28 78 29 3b 0d 0a 20   TABLE t3(x);.. 
1aa10 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1aa20 33 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  3 (x) VALUES(1);
1aa30 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
1aa40 4f 20 74 33 20 28 78 29 20 56 41 4c 55 45 53 28  O t3 (x) VALUES(
1aa50 32 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  2);..  }....  se
1aa60 74 20 72 65 61 64 65 72 28 31 29 20 5b 73 71 6c  t reader(1) [sql
1aa70 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
1aa80 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
1aa90 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69   datareader -ali
1aaa0 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20  as \..      $db 
1aab0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1aac0 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  1;"]....  set re
1aad0 61 64 65 72 28 32 29 20 5b 73 71 6c 20 65 78 65  ader(2) [sql exe
1aae0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
1aaf0 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74  ader -format dat
1ab00 61 72 65 61 64 65 72 20 2d 61 6c 69 61 73 20 5c  areader -alias \
1ab10 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53 45 4c  ..      $db "SEL
1ab20 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 22 5d  ECT * FROM t2;"]
1ab30 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72  ....  set reader
1ab40 28 33 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65  (3) [sql execute
1ab50 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
1ab60 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
1ab70 64 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  der -alias \..  
1ab80 20 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20      $db "SELECT 
1ab90 2a 20 46 52 4f 4d 20 74 33 3b 22 5d 0d 0a 0d 0a  * FROM t3;"]....
1aba0 20 20 73 65 74 20 6e 6f 52 6f 77 20 22 2a 3a 20    set noRow "*: 
1abb0 4e 6f 20 63 75 72 72 65 6e 74 20 72 6f 77 2a 22  No current row*"
1abc0 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b 24 72 65 61  ....  list [$rea
1abd0 64 65 72 28 31 29 20 53 74 65 70 43 6f 75 6e 74  der(1) StepCount
1abe0 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 53 74  ] [$reader(2) St
1abf0 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65  epCount] [$reade
1ac00 72 28 33 29 20 53 74 65 70 43 6f 75 6e 74 5d 20  r(3) StepCount] 
1ac10 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65  \..      [$reade
1ac20 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61  r(1) Read] [$rea
1ac30 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72  der(2) Read] [$r
1ac40 65 61 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c  eader(3) Read] \
1ac50 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72  ..      [$reader
1ac60 28 31 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b  (1) StepCount] [
1ac70 24 72 65 61 64 65 72 28 32 29 20 53 74 65 70 43  $reader(2) StepC
1ac80 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 33  ount] [$reader(3
1ac90 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5c 0d 0a  ) StepCount] \..
1aca0 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1acb0 65 61 64 65 72 28 31 29 20 49 74 65 6d 20 78 7d  eader(1) Item x}
1acc0 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1acd0 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1ace0 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63  ror] \..      [c
1acf0 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 32 29  atch {$reader(2)
1ad00 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20   Item x} error] 
1ad10 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e  [string match $n
1ad20 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a  oRow $error] \..
1ad30 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1ad40 65 61 64 65 72 28 33 29 20 49 74 65 6d 20 78 7d  eader(3) Item x}
1ad50 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1ad60 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1ad70 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ror] \..      [$
1ad80 72 65 61 64 65 72 28 31 29 20 53 74 65 70 43 6f  reader(1) StepCo
1ad90 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 32 29  unt] [$reader(2)
1ada0 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65   StepCount] [$re
1adb0 61 64 65 72 28 33 29 20 53 74 65 70 43 6f 75 6e  ader(3) StepCoun
1adc0 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65  t] \..      [$re
1add0 61 64 65 72 28 31 29 20 52 65 61 64 5d 20 5b 24  ader(1) Read] [$
1ade0 72 65 61 64 65 72 28 32 29 20 52 65 61 64 5d 20  reader(2) Read] 
1adf0 5b 24 72 65 61 64 65 72 28 33 29 20 52 65 61 64  [$reader(3) Read
1ae00 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61  ] \..      [$rea
1ae10 64 65 72 28 31 29 20 53 74 65 70 43 6f 75 6e 74  der(1) StepCount
1ae20 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 53 74  ] [$reader(2) St
1ae30 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65  epCount] [$reade
1ae40 72 28 33 29 20 53 74 65 70 43 6f 75 6e 74 5d 20  r(3) StepCount] 
1ae50 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1ae60 7b 24 72 65 61 64 65 72 28 31 29 20 49 74 65 6d  {$reader(1) Item
1ae70 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1ae80 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1ae90 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1aea0 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72   [catch {$reader
1aeb0 28 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f  (2) Item x} erro
1aec0 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  r] [string match
1aed0 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20   $noRow $error] 
1aee0 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1aef0 7b 24 72 65 61 64 65 72 28 33 29 20 49 74 65 6d  {$reader(3) Item
1af00 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1af10 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1af20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1af30 20 5b 24 72 65 61 64 65 72 28 31 29 20 53 74 65   [$reader(1) Ste
1af40 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65 72  pCount] [$reader
1af50 28 32 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b  (2) StepCount] [
1af60 24 72 65 61 64 65 72 28 33 29 20 53 74 65 70 43  $reader(3) StepC
1af70 6f 75 6e 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  ount] \..      [
1af80 24 72 65 61 64 65 72 28 31 29 20 52 65 61 64 5d  $reader(1) Read]
1af90 20 5b 24 72 65 61 64 65 72 28 32 29 20 52 65 61   [$reader(2) Rea
1afa0 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 52  d] [$reader(3) R
1afb0 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ead] \..      [$
1afc0 72 65 61 64 65 72 28 31 29 20 53 74 65 70 43 6f  reader(1) StepCo
1afd0 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 32 29  unt] [$reader(2)
1afe0 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65   StepCount] [$re
1aff0 61 64 65 72 28 33 29 20 53 74 65 70 43 6f 75 6e  ader(3) StepCoun
1b000 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  t] \..      [cat
1b010 63 68 20 7b 24 72 65 61 64 65 72 28 31 29 20 49  ch {$reader(1) I
1b020 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1b030 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1b040 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ow $error] \..  
1b050 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61      [catch {$rea
1b060 64 65 72 28 32 29 20 49 74 65 6d 20 78 7d 20 65  der(2) Item x} e
1b070 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61  rror] [string ma
1b080 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f  tch $noRow $erro
1b090 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  r] \..      [cat
1b0a0 63 68 20 7b 24 72 65 61 64 65 72 28 33 29 20 49  ch {$reader(3) I
1b0b0 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1b0c0 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1b0d0 6f 77 20 24 65 72 72 6f 72 5d 0d 0a 7d 20 2d 63  ow $error]..} -c
1b0e0 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65  leanup {..  unse
1b0f0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
1b100 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  ader....  cleanu
1b110 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
1b120 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
1b130 6c 61 69 6e 20 65 72 72 6f 72 20 6e 6f 52 6f 77  lain error noRow
1b140 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
1b150 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
1b160 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
1b170 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
1b180 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
1b190 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1b1a0 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  ite} -result \..
1b1b0 7b 30 20 31 20 31 20 46 61 6c 73 65 20 54 72 75  {0 1 1 False Tru
1b1c0 65 20 54 72 75 65 20 30 20 31 20 31 20 31 20 54  e True 0 1 1 1 T
1b1d0 72 75 65 20 30 20 46 61 6c 73 65 20 30 20 46 61  rue 0 False 0 Fa
1b1e0 6c 73 65 20 30 20 31 20 31 20 46 61 6c 73 65 20  lse 0 1 1 False 
1b1f0 46 61 6c 73 65 20 54 72 75 65 20 30 20 31 5c 0d  False True 0 1\.
1b200 0a 32 20 31 20 54 72 75 65 20 31 20 54 72 75 65  .2 1 True 1 True
1b210 20 30 20 46 61 6c 73 65 20 30 20 31 20 32 20 46   0 False 0 1 2 F
1b220 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65  alse False False
1b230 20 30 20 31 20 32 20 31 20 54 72 75 65 20 31 20   0 1 2 1 True 1 
1b240 54 72 75 65 20 31 20 54 72 75 65 7d 7d 0d 0a 0d  True 1 True}}...
1b250 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1b260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2a0 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
1b2b0 74 20 64 61 74 61 2d 31 2e 36 36 20 7b 53 51 4c  t data-1.66 {SQL
1b2c0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 65  iteConnection.Se
1b2d0 74 43 68 75 6e 6b 53 69 7a 65 20 64 65 66 61 75  tChunkSize defau
1b2e0 6c 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  lt} -setup {..  
1b2f0 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
1b300 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 36 2e  eName data-1.66.
1b310 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
1b320 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
1b330 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20  b {..    CREATE 
1b340 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b 0d  TABLE t1(a, b);.
1b350 0a 20 20 7d 0d 0a 0d 0a 20 20 66 69 6c 65 20 73  .  }....  file s
1b360 69 7a 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ize [file join [
1b370 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
1b380 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
1b390 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
1b3a0 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
1b3b0 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
1b3c0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 20   -nocomplain db 
1b3d0 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
1b3e0 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67  straints \..{eag
1b3f0 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
1b400 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
1b410 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
1b420 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d  tem.Data.SQLite}
1b430 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 32 30 34   -result \..{204
1b440 38 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  8}}....#########
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 23 23  ################
1b480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b490 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
1b4a0 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36  t {test data-1.6
1b4b0 37 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  7 {SQLiteConnect
1b4c0 69 6f 6e 2e 53 65 74 43 68 75 6e 6b 53 69 7a 65  ion.SetChunkSize
1b4d0 20 6d 65 74 68 6f 64 7d 20 2d 73 65 74 75 70 20   method} -setup 
1b4e0 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
1b4f0 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
1b500 31 2e 36 37 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  1.67.db]..} -bod
1b510 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65  y {..  set conne
1b520 63 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e  ction [getDbConn
1b530 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 6c 61 70  ection]....  lap
1b540 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f  pend result [$co
1b550 6e 6e 65 63 74 69 6f 6e 20 53 65 74 43 68 75 6e  nnection SetChun
1b560 6b 53 69 7a 65 20 5b 65 78 70 72 20 7b 33 32 20  kSize [expr {32 
1b570 2a 20 31 30 32 34 7d 5d 5d 0d 0a 0d 0a 20 20 73  * 1024}]]....  s
1b580 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b  ql execute $db {
1b590 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
1b5a0 4c 45 20 74 31 28 61 2c 20 62 29 3b 0d 0a 20 20  LE t1(a, b);..  
1b5b0 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  }....  lappend r
1b5c0 65 73 75 6c 74 20 5b 66 69 6c 65 20 73 69 7a 65  esult [file size
1b5d0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1b5e0 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
1b5f0 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  y] $fileName]]..
1b600 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
1b610 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
1b620 61 6d 65 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43  ame....  freeDbC
1b630 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75  onnection....  u
1b640 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1b650 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74 69   result connecti
1b660 6f 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  on db fileName..
1b670 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
1b680 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  ..{eagle monoBug
1b690 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
1b6a0 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
1b6b0 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
1b6c0 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c  QLite} -result \
1b6d0 0d 0a 7b 4f 6b 20 33 32 37 36 38 7d 7d 0d 0a 0d  ..{Ok 32768}}...
1b6e0 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1b6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b730 0d 0a 0d 0a 72 65 70 6f 72 74 53 51 4c 69 74 65  ....reportSQLite
1b740 52 65 73 6f 75 72 63 65 73 20 24 74 65 73 74 5f  Resources $test_
1b750 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 23 23 23 23 23  channel....#####
1b760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b7a0 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
1b7b0 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73  nSQLiteTestFiles
1b7c0 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 53 51 4c  Epilogue..runSQL
1b7d0 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d  iteTestEpilogue.
1b7e0 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65  .runTestEpilogue
1b7f0 0d 0a                                            ..