System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5937b662574201dfa54193495d2e553dcc03f1b8:


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 4c 69 62 72 61 72 79 0d 0a 70 61 63 6b 61 67  eLibrary..packag
0150: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 54  e require EagleT
0160: 65 73 74 0d 0a 0d 0a 72 75 6e 54 65 73 74 50 72  est....runTestPr
0170: 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23 23 23  ologue....######
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 0d 0a 0d 0a 70 61 63  #########....pac
01d0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 53 79 73  kage require Sys
01e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
01f0: 54 65 73 74 0d 0a 72 75 6e 53 51 4c 69 74 65 54  Test..runSQLiteT
0200: 65 73 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23  estPrologue....#
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0260: 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20 53 65 74  ..#..# NOTE: Set
0270: 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73  up the variables
0280: 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
0290: 68 65 20 76 61 72 69 6f 75 73 20 66 69 6c 65 73  he various files
02a0: 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
02b0: 0d 0a 23 20 20 20 20 20 20 20 74 65 73 74 73 20  ..#       tests 
02c0: 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 23  in this file...#
02d0: 0d 0a 73 65 74 20 74 65 73 74 45 78 65 46 69 6c  ..set testExeFil
02e0: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
02f0: 61 6d 65 20 74 65 73 74 2e 65 78 65 5d 0d 0a 73  ame test.exe]..s
0300: 65 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69  et testLinqExeFi
0310: 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  le [getBuildFile
0320: 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78  Name testlinq.ex
0330: 65 5d 0d 0a 73 65 74 20 74 65 73 74 4c 69 6e 71  e]..set testLinq
0340: 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  OutFile [file na
0350: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
0360: 6f 69 6e 20 24 70 61 74 68 20 74 65 73 74 6c 69  oin $path testli
0370: 6e 71 2e 6f 75 74 5d 5d 0d 0a 73 65 74 20 6e 6f  nq.out]]..set no
0380: 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20  rthwindEfDbFile 
0390: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
03a0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c   [file join [fil
03b0: 65 20 64 69 72 6e 61 6d 65 20 24 70 61 74 68 5d  e dirname $path]
03c0: 20 5c 0d 0a 20 20 20 20 74 65 73 74 6c 69 6e 71   \..    testlinq
03d0: 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d   northwindEF.db]
03e0: 5d 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20  ]....#..# NOTE: 
03f0: 53 65 74 75 70 20 74 68 65 20 74 65 73 74 20 63  Setup the test c
0400: 6f 6e 73 74 72 61 69 6e 74 73 20 73 70 65 63 69  onstraints speci
0410: 66 69 63 20 74 6f 20 74 68 65 20 74 65 73 74 73  fic to the tests
0420: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a   in this file...
0430: 23 0d 0a 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e  #..if {![haveCon
0440: 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 5b 66 69  straint file_[fi
0450: 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78 65  le tail $testExe
0460: 46 69 6c 65 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  File]]} then {..
0470: 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $
0480: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te
0490: 73 74 45 78 65 46 69 6c 65 0d 0a 7d 0d 0a 0d 0a  stExeFile..}....
04a0: 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
04b0: 61 69 6e 74 20 66 69 6c 65 5f 5b 66 69 6c 65 20  aint file_[file 
04c0: 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78  tail $testLinqEx
04d0: 65 46 69 6c 65 5d 5d 7d 20 74 68 65 6e 20 7b 0d  eFile]]} then {.
04e0: 0a 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20  .  checkForFile 
04f0: 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel $t
0500: 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 0d 0a  estLinqExeFile..
0510: 7d 0d 0a 0d 0a 69 66 20 7b 21 5b 68 61 76 65 43  }....if {![haveC
0520: 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 5b  onstraint file_[
0530: 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68  file tail $north
0540: 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 7d 20  windEfDbFile]]} 
0550: 74 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63 6b 46  then {..  checkF
0560: 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha
0570: 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45  nnel $northwindE
0580: 66 44 62 46 69 6c 65 0d 0a 7d 0d 0a 0d 0a 69 66  fDbFile..}....if
0590: 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
05a0: 6e 74 20 66 69 6c 65 5f 5b 66 69 6c 65 20 74 61  nt file_[file ta
05b0: 69 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46  il $testLinqOutF
05c0: 69 6c 65 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile]]} then {.. 
05d0: 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t
05e0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes
05f0: 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 7d 0d  tLinqOutFile..}.
0600: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
0610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0650: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
0660: 65 73 74 20 62 61 73 69 63 2d 31 2e 31 20 7b 75  est basic-1.1 {u
0670: 6e 69 74 20 74 65 73 74 73 20 66 72 6f 6d 20 74  nit tests from t
0680: 68 65 20 27 74 65 73 74 27 20 70 72 6f 6a 65 63  he 'test' projec
0690: 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 63  t} -setup {..  c
06a0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
06b0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69  e [file join [fi
06c0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 65 73 74  le dirname $test
06d0: 45 78 65 46 69 6c 65 5d 20 54 65 73 74 2e 64 62  ExeFile] Test.db
06e0: 33 5d 7d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  3]}..} -body {..
06f0: 20 20 73 65 74 20 6f 75 74 70 75 74 20 22 22 0d    set output "".
0700: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
0710: 61 74 63 68 20 7b 0d 0a 20 20 20 20 74 65 73 74  atch {..    test
0720: 43 6c 72 45 78 65 63 20 24 74 65 73 74 45 78 65  ClrExec $testExe
0730: 46 69 6c 65 20 5b 6c 69 73 74 20 2d 65 76 65 6e  File [list -even
0740: 74 66 6c 61 67 73 20 57 61 69 74 20 2d 64 69 72  tflags Wait -dir
0750: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 5b 66  ectory \..    [f
0760: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 65 73  ile dirname $tes
0770: 74 45 78 65 46 69 6c 65 5d 20 2d 73 74 64 6f 75  tExeFile] -stdou
0780: 74 20 6f 75 74 70 75 74 20 2d 73 75 63 63 65 73  t output -succes
0790: 73 20 30 5d 20 2d 61 75 74 6f 52 75 6e 0d 0a 20  s 0] -autoRun.. 
07a0: 20 7d 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 74   } error]....  t
07b0: 6c 6f 67 20 22 2d 2d 2d 2d 20 42 45 47 49 4e 20  log "---- BEGIN 
07c0: 53 54 44 4f 55 54 20 4f 55 54 50 55 54 5c 6e 22  STDOUT OUTPUT\n"
07d0: 0d 0a 20 20 74 6c 6f 67 20 24 6f 75 74 70 75 74  ..  tlog $output
07e0: 0d 0a 20 20 74 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d  ..  tlog "\n----
07f0: 20 45 4e 44 20 53 54 44 4f 55 54 20 4f 55 54 50   END STDOUT OUTP
0800: 55 54 5c 6e 22 0d 0a 0d 0a 20 20 6c 69 73 74 20  UT\n"....  list 
0810: 24 63 6f 64 65 20 5b 65 78 70 72 20 7b 24 63 6f  $code [expr {$co
0820: 64 65 20 3d 3d 20 30 20 3f 20 22 22 20 3a 20 24  de == 0 ? "" : $
0830: 65 72 72 6f 72 7d 5d 0d 0a 7d 20 2d 63 6c 65 61  error}]..} -clea
0840: 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d  nup {..  unset -
0850: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 64 65 20  nocomplain code 
0860: 6f 75 74 70 75 74 20 65 72 72 6f 72 0d 0a 7d 20  output error..} 
0870: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
0880: 67 6c 65 20 66 69 6c 65 5f 74 65 73 74 2e 65 78  gle file_test.ex
0890: 65 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 7b 7d  e} -result {0 {}
08a0: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
08b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
08c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
08d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
08e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
08f0: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
0900: 20 7b 74 65 73 74 20 62 61 73 69 63 2d 31 2e 32   {test basic-1.2
0910: 20 7b 75 6e 69 74 20 74 65 73 74 73 20 66 72 6f   {unit tests fro
0920: 6d 20 74 68 65 20 27 74 65 73 74 6c 69 6e 71 27  m the 'testlinq'
0930: 20 70 72 6f 6a 65 63 74 7d 20 2d 73 65 74 75 70   project} -setup
0940: 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54   {..  #..  # NOT
0950: 45 3a 20 52 65 2d 63 6f 70 79 20 74 68 65 20 72  E: Re-copy the r
0960: 65 66 65 72 65 6e 63 65 20 64 61 74 61 62 61 73  eference databas
0970: 65 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  e file used for 
0980: 74 68 69 73 20 75 6e 69 74 20 74 65 73 74 20 74  this unit test t
0990: 6f 20 74 68 65 0d 0a 20 20 23 20 20 20 20 20 20  o the..  #      
09a0: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
09b0: 20 69 6e 20 63 61 73 65 20 69 74 20 68 61 73 20   in case it has 
09c0: 62 65 65 6e 20 63 68 61 6e 67 65 64 20 62 79 20  been changed by 
09d0: 61 20 70 72 65 76 69 6f 75 73 20 74 65 73 74 20  a previous test 
09e0: 72 75 6e 2e 0d 0a 20 20 23 0d 0a 20 20 66 69 6c  run...  #..  fil
09f0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 6e  e copy -force $n
0a00: 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65  orthwindEfDbFile
0a10: 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69 6c 65 20   \..      [file 
0a20: 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69  join [getBuildDi
0a30: 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74  rectory] [file t
0a40: 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66  ail $northwindEf
0a50: 44 62 46 69 6c 65 5d 5d 0d 0a 0d 0a 20 20 23 0d  DbFile]]....  #.
0a60: 0a 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 6e 65  .  # NOTE: We ne
0a70: 65 64 20 74 6f 20 6d 61 6b 65 20 31 30 30 25 20  ed to make 100% 
0a80: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63 6f  sure that the co
0a90: 6e 73 6f 6c 65 20 6f 75 74 70 75 74 20 65 6e 63  nsole output enc
0aa0: 6f 64 69 6e 67 20 69 73 20 74 68 65 0d 0a 20 20  oding is the..  
0ab0: 23 20 20 20 20 20 20 20 73 61 6d 65 20 61 73 20  #       same as 
0ac0: 77 68 65 6e 20 74 68 65 20 27 74 65 73 74 6c 69  when the 'testli
0ad0: 6e 71 2e 6f 75 74 27 20 66 69 6c 65 20 77 61 73  nq.out' file was
0ae0: 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 23 0d 0a   created...  #..
0af0: 20 20 73 65 74 20 73 61 76 65 64 45 6e 63 6f 64    set savedEncod
0b00: 69 6e 67 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ing [object invo
0b10: 6b 65 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75  ke Console Outpu
0b20: 74 45 6e 63 6f 64 69 6e 67 5d 0d 0a 20 20 73 65  tEncoding]..  se
0b30: 74 20 65 6e 63 6f 64 69 6e 67 20 5b 6f 62 6a 65  t encoding [obje
0b40: 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d  ct invoke System
0b50: 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 47  .Text.Encoding G
0b60: 65 74 45 6e 63 6f 64 69 6e 67 20 57 69 6e 64 6f  etEncoding Windo
0b70: 77 73 2d 31 32 35 32 5d 0d 0a 0d 0a 20 20 6f 62  ws-1252]....  ob
0b80: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 73  ject invoke Cons
0b90: 6f 6c 65 20 4f 75 74 70 75 74 45 6e 63 6f 64 69  ole OutputEncodi
0ba0: 6e 67 20 24 65 6e 63 6f 64 69 6e 67 0d 0a 7d 20  ng $encoding..} 
0bb0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 6f  -body {..  set o
0bc0: 75 74 70 75 74 20 22 22 0d 0a 0d 0a 20 20 73 65  utput ""....  se
0bd0: 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 0d  t code [catch {.
0be0: 0a 20 20 20 20 74 65 73 74 43 6c 72 45 78 65 63  .    testClrExec
0bf0: 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c   $testLinqExeFil
0c00: 65 20 5b 6c 69 73 74 20 2d 65 76 65 6e 74 66 6c  e [list -eventfl
0c10: 61 67 73 20 57 61 69 74 20 2d 64 69 72 65 63 74  ags Wait -direct
0c20: 6f 72 79 20 5c 0d 0a 20 20 20 20 5b 66 69 6c 65  ory \..    [file
0c30: 20 64 69 72 6e 61 6d 65 20 24 74 65 73 74 4c 69   dirname $testLi
0c40: 6e 71 45 78 65 46 69 6c 65 5d 20 2d 73 74 64 6f  nqExeFile] -stdo
0c50: 75 74 20 6f 75 74 70 75 74 20 2d 73 75 63 63 65  ut output -succe
0c60: 73 73 20 30 5d 0d 0a 20 20 7d 20 65 72 72 6f 72  ss 0]..  } error
0c70: 5d 0d 0a 0d 0a 20 20 74 6c 6f 67 20 22 2d 2d 2d  ]....  tlog "---
0c80: 2d 20 42 45 47 49 4e 20 53 54 44 4f 55 54 20 4f  - BEGIN STDOUT O
0c90: 55 54 50 55 54 5c 6e 22 0d 0a 20 20 74 6c 6f 67  UTPUT\n"..  tlog
0ca0: 20 24 6f 75 74 70 75 74 0d 0a 20 20 74 6c 6f 67   $output..  tlog
0cb0: 20 22 5c 6e 2d 2d 2d 2d 20 45 4e 44 20 53 54 44   "\n---- END STD
0cc0: 4f 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 0d  OUT OUTPUT\n"...
0cd0: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 5b 73  .  list $code [s
0ce0: 74 72 69 6e 67 20 65 71 75 61 6c 20 24 6f 75 74  tring equal $out
0cf0: 70 75 74 20 5b 72 65 61 64 46 69 6c 65 20 24 74  put [readFile $t
0d00: 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d  estLinqOutFile]]
0d10: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
0d20: 7b 24 63 6f 64 65 20 3d 3d 20 30 20 3f 20 22 22  {$code == 0 ? ""
0d30: 20 3a 20 24 65 72 72 6f 72 7d 5d 0d 0a 7d 20 2d   : $error}]..} -
0d40: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74  cleanup {..  cat
0d50: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
0d60: 65 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75 74  e Console Output
0d70: 45 6e 63 6f 64 69 6e 67 20 24 73 61 76 65 64 45  Encoding $savedE
0d80: 6e 63 6f 64 69 6e 67 7d 0d 0a 0d 0a 20 20 75 6e  ncoding}....  un
0d90: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
0da0: 63 6f 64 65 20 6f 75 74 70 75 74 20 65 72 72 6f  code output erro
0db0: 72 20 73 61 76 65 64 45 6e 63 6f 64 69 6e 67 20  r savedEncoding 
0dc0: 65 6e 63 6f 64 69 6e 67 0d 0a 7d 20 2d 63 6f 6e  encoding..} -con
0dd0: 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67  straints \..{eag
0de0: 6c 65 20 6d 6f 6e 6f 54 6f 44 6f 20 66 69 6c 65  le monoToDo file
0df0: 5f 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 66 69  _testlinq.exe fi
0e00: 6c 65 5f 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64  le_northwindEF.d
0e10: 62 20 66 69 6c 65 5f 74 65 73 74 6c 69 6e 71 2e  b file_testlinq.
0e20: 6f 75 74 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20  out} \..-result 
0e30: 7b 30 20 54 72 75 65 20 7b 7d 7d 7d 0d 0a 0d 0a  {0 True {}}}....
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0e90: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
0ea0: 20 62 61 73 69 63 2d 31 2e 33 20 7b 53 45 4c 45   basic-1.3 {SELE
0eb0: 43 54 20 73 63 61 6c 61 72 2f 72 65 61 64 65 72  CT scalar/reader
0ec0: 2c 20 43 52 45 41 54 45 2c 20 49 4e 53 45 52 54  , CREATE, INSERT
0ed0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
0ee0: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
0ef0: 61 6d 65 20 62 61 73 69 63 2d 31 2e 33 2e 64 62  ame basic-1.3.db
0f00: 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
0f10: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
0f20: 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
0f30: 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
0f40: 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
0f50: 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  ar $db \..      
0f60: 22 53 45 4c 45 43 54 20 73 71 6c 69 74 65 5f 73  "SELECT sqlite_s
0f70: 6f 75 72 63 65 5f 69 64 28 29 3b 22 5d 0d 0a 0d  ource_id();"]...
0f80: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
0f90: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
0fa0: 20 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52   t1(x INTEGER PR
0fb0: 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79  IMARY KEY ASC, y
0fc0: 2c 20 7a 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78  , z);"..  sql ex
0fd0: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
0fe0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 2c  T INTO t1 (x, y,
0ff0: 20 7a 29 20 56 41 4c 55 45 53 28 31 2c 20 27 66   z) VALUES(1, 'f
1000: 6f 6f 27 2c 20 31 32 33 34 29 3b 22 0d 0a 0d 0a  oo', 1234);"....
1010: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65    sql execute -e
1020: 78 65 63 75 74 65 20 72 65 61 64 65 72 20 24 64  xecute reader $d
1030: 62 20 22 53 45 4c 45 43 54 20 78 2c 20 79 2c 20  b "SELECT x, y, 
1040: 7a 20 46 52 4f 4d 20 74 31 3b 22 0d 0a 0d 0a 20  z FROM t1;".... 
1050: 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c   foreach name [l
1060: 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  sort [array name
1070: 73 20 72 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20  s rows]] {..    
1080: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
1090: 6c 69 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73  list $name $rows
10a0: 28 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d  ($name)]..  }...
10b0: 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d  .  set result..}
10c0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
10d0: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
10e0: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
10f0: 6f 63 6f 6d 70 6c 61 69 6e 20 6e 61 6d 65 20 72  ocomplain name r
1100: 6f 77 73 20 72 65 73 75 6c 74 20 64 62 20 66 69  ows result db fi
1110: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
1120: 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
1130: 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
1140: 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
1150: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
1160: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c  m.Data.SQLite} \
1170: 0d 0a 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  ..-match regexp 
1180: 2d 72 65 73 75 6c 74 20 7b 5e 5c 7b 5c 64 7b 34  -result {^\{\d{4
1190: 7d 2d 5c 64 7b 32 7d 2d 5c 64 7b 32 7d 20 5c 64  }-\d{2}-\d{2} \d
11a0: 7b 32 7d 3a 5c 64 7b 32 7d 3a 5c 64 7b 32 7d 20  {2}:\d{2}:\d{2} 
11b0: 5b 30 2d 39 61 2d 66 5d 7b 34 30 7d 5c 7d 5c 0d  [0-9a-f]{40}\}\.
11c0: 0a 5c 7b 31 20 5c 7b 5c 7b 78 20 31 5c 7d 20 5c  .\{1 \{\{x 1\} \
11d0: 7b 79 20 66 6f 6f 5c 7d 20 5c 7b 7a 20 31 32 33  {y foo\} \{z 123
11e0: 34 5c 7d 5c 7d 5c 7d 20 5c 7b 63 6f 75 6e 74 20  4\}\}\} \{count 
11f0: 31 5c 7d 20 5c 7b 6e 61 6d 65 73 20 5c 7b 78 20  1\} \{names \{x 
1200: 79 20 7a 5c 7d 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23  y z\}\}$}}....##
1210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1250: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1260: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 62  .runTest {test b
1270: 61 73 69 63 2d 31 2e 34 20 7b 47 65 74 53 63 68  asic-1.4 {GetSch
1280: 65 6d 61 20 77 69 74 68 20 52 65 73 65 72 76 65  ema with Reserve
1290: 64 57 6f 72 64 73 7d 20 2d 73 65 74 75 70 20 7b  dWords} -setup {
12a0: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
12b0: 20 66 69 6c 65 4e 61 6d 65 20 62 61 73 69 63 2d   fileName basic-
12c0: 31 2e 34 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  1.4.db]..} -body
12d0: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
12e0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
12f0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
1300: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
1310: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
1320: 65 20 6a 6f 69 6e 20 5b 67 65 74 54 65 6d 70 6f  e join [getTempo
1330: 72 61 72 79 50 61 74 68 5d 20 62 61 73 69 63 2d  raryPath] basic-
1340: 31 2e 34 2e 64 62 5d 0d 0a 0d 0a 20 20 75 6e 73  1.4.db]....  uns
1350: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
1360: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
1370: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
1380: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
1390: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
13a0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0d  ng System.Data;.
13b0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
13c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a  m.Data.SQLite;..
13d0: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
13e0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
13f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
1400: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
1410: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
1420: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1430: 69 63 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  ic DataTable Get
1440: 52 65 73 65 72 76 65 64 57 6f 72 64 73 28 29 0d  ReservedWords().
1450: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1460: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
1470: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
1480: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
1490: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
14a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14b0: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
14c0: 61 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a  ataSource};"))..
14d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14e0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
14f0: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
1500: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1510: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74  n connection.Get
1520: 53 63 68 65 6d 61 28 22 52 65 73 65 72 76 65 64  Schema("Reserved
1530: 57 6f 72 64 73 22 29 3b 0d 0a 20 20 20 20 20 20  Words");..      
1540: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1560: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
1570: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
1580: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
1590: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
15a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
15b0: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 72 65 73 75      }..  }] resu
15c0: 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65  lts errors Syste
15d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
15e0: 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  l]....  list $co
15f0: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
1600: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
1610: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
1620: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
1630: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
1640: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
1650: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
1660: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
1670: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
1680: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 52 65 73  Test${id} GetRes
1690: 65 72 76 65 64 57 6f 72 64 73 0d 0a 20 20 20 20  ervedWords..    
16a0: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
16b0: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
16c0: 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61  $result..} -clea
16d0: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
16e0: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  Db $fileName..  
16f0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1700: 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73  n result results
1710: 20 65 72 72 6f 72 73 20 63 6f 64 65 20 64 61 74   errors code dat
1720: 61 53 6f 75 72 63 65 20 69 64 20 64 62 20 66 69  aSource id db fi
1730: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
1740: 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
1750: 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
1760: 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
1770: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
1780: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c  m.Data.SQLite} \
1790: 0d 0a 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  ..-match regexp 
17a0: 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 20 53 79 73  -result {^Ok Sys
17b0: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
17c0: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
17d0: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 5c  ults#\d+ \{\} 0\
17e0: 0d 0a 53 79 73 74 65 6d 23 44 61 74 61 23 44 61  ..System#Data#Da
17f0: 74 61 54 61 62 6c 65 23 5c 64 2b 24 7d 7d 0d 0a  taTable#\d+$}}..
1800: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
1810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1850: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
1860: 73 74 20 62 61 73 69 63 2d 31 2e 35 20 7b 47 65  st basic-1.5 {Ge
1870: 74 53 63 68 65 6d 61 20 77 69 74 68 20 46 6f 72  tSchema with For
1880: 65 69 67 6e 4b 65 79 73 7d 20 2d 73 65 74 75 70  eignKeys} -setup
1890: 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
18a0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 62 61 73 69  et fileName basi
18b0: 63 2d 31 2e 35 2e 64 62 5d 0d 0a 7d 20 2d 62 6f  c-1.5.db]..} -bo
18c0: 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63  dy {..  sql exec
18d0: 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43  ute $db {..    C
18e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 0d  REATE TABLE t1(.
18f0: 0a 20 20 20 20 20 20 78 20 49 4e 54 45 47 45 52  .      x INTEGER
1900: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d   REFERENCES t2 M
1910: 41 54 43 48 20 46 55 4c 4c 0d 0a 20 20 20 20 20  ATCH FULL..     
1920: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44   ON UPDATE SET D
1930: 45 46 41 55 4c 54 20 4f 4e 20 44 45 4c 45 54 45  EFAULT ON DELETE
1940: 20 43 41 53 43 41 44 45 0d 0a 20 20 20 20 20 20   CASCADE..      
1950: 44 45 46 41 55 4c 54 20 31 0d 0a 20 20 20 20 29  DEFAULT 1..    )
1960: 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20  ;..  }....  sql 
1970: 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45  execute $db "CRE
1980: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 49  ATE TABLE t2(x I
1990: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
19a0: 53 20 74 33 29 3b 22 0d 0a 0d 0a 20 20 73 65 74  S t3);"....  set
19b0: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
19c0: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
19d0: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
19e0: 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
19f0: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
1a00: 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d  etTemporaryPath]
1a10: 20 62 61 73 69 63 2d 31 2e 35 2e 64 62 5d 0d 0a   basic-1.5.db]..
1a20: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
1a30: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
1a40: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
1a50: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
1a60: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
1a70: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
1a80: 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75 73 69 6e  .Data;..    usin
1a90: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
1aa0: 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  Lite;....    nam
1ab0: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
1ac0: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
1ad0: 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20     public class 
1ae0: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
1af0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
1b00: 69 63 20 73 74 61 74 69 63 20 44 61 74 61 52 6f  ic static DataRo
1b10: 77 43 6f 6c 6c 65 63 74 69 6f 6e 20 47 65 74 46  wCollection GetF
1b20: 6f 72 65 69 67 6e 4b 65 79 73 28 29 0d 0a 20 20  oreignKeys()..  
1b30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b40: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
1b50: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
1b60: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
1b70: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
1b90: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
1ba0: 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a 20 20 20  Source};"))..   
1bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bc0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
1bd0: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
1be0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
1bf0: 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 53 63 68  onnection.GetSch
1c00: 65 6d 61 28 22 46 6f 72 65 69 67 6e 4b 65 79 73  ema("ForeignKeys
1c10: 22 29 2e 52 6f 77 73 3b 0d 0a 20 20 20 20 20 20  ").Rows;..      
1c20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1c40: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
1c50: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
1c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
1c70: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
1c80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
1c90: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 72 65 73 75      }..  }] resu
1ca0: 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65  lts errors Syste
1cb0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1cc0: 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  l]....  list $co
1cd0: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
1ce0: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
1cf0: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
1d00: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
1d10: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
1d20: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
1d30: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
1d40: 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69      set rows [li
1d50: 73 74 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  st]..        set
1d60: 20 66 6f 72 65 69 67 6e 4b 65 79 73 20 5b 6f 62   foreignKeys [ob
1d70: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
1d80: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
1d90: 69 64 7d 20 47 65 74 46 6f 72 65 69 67 6e 4b 65  id} GetForeignKe
1da0: 79 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f  ys]....        o
1db0: 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61  bject foreach -a
1dc0: 6c 69 61 73 20 66 6f 72 65 69 67 6e 4b 65 79 20  lias foreignKey 
1dd0: 24 66 6f 72 65 69 67 6e 4b 65 79 73 20 7b 0d 0a  $foreignKeys {..
1de0: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
1df0: 64 20 72 6f 77 73 20 5b 6c 69 73 74 20 5c 0d 0a  d rows [list \..
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$
1e10: 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20  foreignKey Item 
1e20: 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54 41 4c  CONSTRAINT_CATAL
1e30: 4f 47 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  OG] \..         
1e40: 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65       [$foreignKe
1e50: 79 20 49 74 65 6d 20 43 4f 4e 53 54 52 41 49 4e  y Item CONSTRAIN
1e60: 54 5f 4e 41 4d 45 5d 20 5c 0d 0a 20 20 20 20 20  T_NAME] \..     
1e70: 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69           [$forei
1e80: 67 6e 4b 65 79 20 49 74 65 6d 20 54 41 42 4c 45  gnKey Item TABLE
1e90: 5f 43 41 54 41 4c 4f 47 5d 20 5c 0d 0a 20 20 20  _CATALOG] \..   
1ea0: 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72             [$for
1eb0: 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 54 41 42  eignKey Item TAB
1ec0: 4c 45 5f 4e 41 4d 45 5d 20 5c 0d 0a 20 20 20 20  LE_NAME] \..    
1ed0: 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65            [$fore
1ee0: 69 67 6e 4b 65 79 20 49 74 65 6d 20 43 4f 4e 53  ignKey Item CONS
1ef0: 54 52 41 49 4e 54 5f 54 59 50 45 5d 20 5c 0d 0a  TRAINT_TYPE] \..
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24                [$
1f10: 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20  foreignKey Item 
1f20: 49 53 5f 44 45 46 45 52 52 41 42 4c 45 5d 20 5c  IS_DEFERRABLE] \
1f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f40: 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65  [$foreignKey Ite
1f50: 6d 20 49 4e 49 54 49 41 4c 4c 59 5f 44 45 46 45  m INITIALLY_DEFE
1f60: 52 52 45 44 5d 20 5c 0d 0a 20 20 20 20 20 20 20  RRED] \..       
1f70: 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e         [$foreign
1f80: 4b 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 46 52  Key Item FKEY_FR
1f90: 4f 4d 5f 43 4f 4c 55 4d 4e 5d 20 5c 0d 0a 20 20  OM_COLUMN] \..  
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f              [$fo
1fb0: 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b  reignKey Item FK
1fc0: 45 59 5f 54 4f 5f 43 41 54 41 4c 4f 47 5d 20 5c  EY_TO_CATALOG] \
1fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fe0: 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65  [$foreignKey Ite
1ff0: 6d 20 46 4b 45 59 5f 54 4f 5f 54 41 42 4c 45 5d  m FKEY_TO_TABLE]
2000: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
2010: 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49    [$foreignKey I
2020: 74 65 6d 20 46 4b 45 59 5f 54 4f 5f 43 4f 4c 55  tem FKEY_TO_COLU
2030: 4d 4e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  MN] \..         
2040: 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65       [$foreignKe
2050: 79 20 49 74 65 6d 20 46 4b 45 59 5f 46 52 4f 4d  y Item FKEY_FROM
2060: 5f 4f 52 44 49 4e 41 4c 5f 50 4f 53 49 54 49 4f  _ORDINAL_POSITIO
2070: 4e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  N] \..          
2080: 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79      [$foreignKey
2090: 20 49 74 65 6d 20 46 4b 45 59 5f 4f 4e 5f 55 50   Item FKEY_ON_UP
20a0: 44 41 54 45 5d 20 5c 0d 0a 20 20 20 20 20 20 20  DATE] \..       
20b0: 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e         [$foreign
20c0: 4b 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 4f 4e  Key Item FKEY_ON
20d0: 5f 44 45 4c 45 54 45 5d 20 5c 0d 0a 20 20 20 20  _DELETE] \..    
20e0: 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65            [$fore
20f0: 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45 59  ignKey Item FKEY
2100: 5f 4d 41 54 43 48 5d 5d 0d 0a 20 20 20 20 20 20  _MATCH]]..      
2110: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
2120: 65 74 20 72 6f 77 73 0d 0a 20 20 20 20 20 20 7d  et rows..      }
2130: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
2140: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
2150: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
2160: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
2170: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
2180: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
2190: 20 72 65 73 75 6c 74 20 72 6f 77 73 20 66 6f 72   result rows for
21a0: 65 69 67 6e 4b 65 79 20 66 6f 72 65 69 67 6e 4b  eignKey foreignK
21b0: 65 79 73 20 72 65 73 75 6c 74 73 20 65 72 72 6f  eys results erro
21c0: 72 73 20 63 6f 64 65 20 5c 0d 0a 20 20 20 20 20  rs code \..     
21d0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 64   dataSource id d
21e0: 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
21f0: 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
2200: 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
2210: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
2220: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
2230: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2240: 65 7d 20 5c 0d 0a 2d 6d 61 74 63 68 20 72 65 67  e} \..-match reg
2250: 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b  exp -result {^Ok
2260: 20 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23   System#CodeDom#
2270: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
2280: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
2290: 7d 20 30 5c 0d 0a 5c 7b 5c 7b 6d 61 69 6e 20 46  } 0\..\{\{main F
22a0: 4b 5f 74 31 5f 30 20 6d 61 69 6e 20 74 31 20 5c  K_t1_0 main t1 \
22b0: 7b 46 4f 52 45 49 47 4e 20 4b 45 59 5c 7d 20 46  {FOREIGN KEY\} F
22c0: 61 6c 73 65 20 46 61 6c 73 65 20 78 20 6d 61 69  alse False x mai
22d0: 6e 20 74 32 20 5c 7b 5c 7d 20 30 20 5c 7b 53 45  n t2 \{\} 0 \{SE
22e0: 54 5c 0d 0a 44 45 46 41 55 4c 54 5c 7d 20 43 41  T\..DEFAULT\} CA
22f0: 53 43 41 44 45 20 4e 4f 4e 45 5c 7d 20 5c 7b 6d  SCADE NONE\} \{m
2300: 61 69 6e 20 46 4b 5f 74 32 5f 30 20 6d 61 69 6e  ain FK_t2_0 main
2310: 20 74 32 20 5c 7b 46 4f 52 45 49 47 4e 20 4b 45   t2 \{FOREIGN KE
2320: 59 5c 7d 20 46 61 6c 73 65 20 46 61 6c 73 65 20  Y\} False False 
2330: 78 5c 0d 0a 6d 61 69 6e 20 74 33 20 5c 7b 5c 7d  x\..main t3 \{\}
2340: 20 30 20 5c 7b 4e 4f 20 41 43 54 49 4f 4e 5c 7d   0 \{NO ACTION\}
2350: 20 5c 7b 4e 4f 20 41 43 54 49 4f 4e 5c 7d 20 4e   \{NO ACTION\} N
2360: 4f 4e 45 5c 7d 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23  ONE\}\}$}}....##
2370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
23c0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 62  .runTest {test b
23d0: 61 73 69 63 2d 31 2e 36 20 7b 53 51 4c 49 54 45  asic-1.6 {SQLITE
23e0: 5f 46 43 4e 54 4c 5f 57 49 4e 33 32 5f 41 56 5f  _FCNTL_WIN32_AV_
23f0: 52 45 54 52 59 7d 20 2d 73 65 74 75 70 20 7b 0d  RETRY} -setup {.
2400: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
2410: 66 69 6c 65 4e 61 6d 65 20 62 61 73 69 63 2d 31  fileName basic-1
2420: 2e 36 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20  .6.db]..} -body 
2430: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
2440: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
2450: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
2460: 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20   NextId]..  set 
2470: 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65  dataSource [file
2480: 20 6a 6f 69 6e 20 5b 67 65 74 54 65 6d 70 6f 72   join [getTempor
2490: 61 72 79 50 61 74 68 5d 20 62 61 73 69 63 2d 31  aryPath] basic-1
24a0: 2e 36 2e 64 62 5d 0d 0a 0d 0a 20 20 75 6e 73 65  .6.db]....  unse
24b0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
24c0: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
24d0: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
24e0: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
24f0: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
2500: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0d 0a  g System.Data;..
2510: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
2520: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d  .Data.SQLite;...
2530: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
2540: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
2550: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
2560: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
2570: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
2580: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2590: 63 20 62 6f 6f 6c 20 54 65 73 74 53 65 74 41 76  c bool TestSetAv
25a0: 52 65 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  Retry(..        
25b0: 20 20 72 65 66 20 69 6e 74 20 63 6f 75 6e 74 2c    ref int count,
25c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
25d0: 69 6e 74 20 69 6e 74 65 72 76 61 6c 0d 0a 20 20  int interval..  
25e0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2600: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
2610: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
2620: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
2630: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
2640: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
2650: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
2660: 72 63 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20  rce};"))..      
2670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2680: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
2690: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
26a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
26b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 65       // NOTE: Se
26c0: 74 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  t the requested 
26d0: 72 65 74 72 79 20 70 61 72 61 6d 65 74 65 72 20  retry parameter 
26e0: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  values...       
26f0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2700: 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
2710: 69 6f 6e 2e 53 65 74 41 76 52 65 74 72 79 28 72  ion.SetAvRetry(r
2720: 65 66 20 63 6f 75 6e 74 2c 20 72 65 66 20 69 6e  ef count, ref in
2730: 74 65 72 76 61 6c 29 20 21 3d 20 30 29 0d 0a 20  terval) != 0).. 
2740: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2750: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2760: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2770: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2780: 45 3a 20 51 75 65 72 79 20 74 68 65 20 72 65 74  E: Query the ret
2790: 72 79 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c  ry parameter val
27a0: 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ues...          
27b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
27c0: 20 20 69 6e 74 20 6e 65 77 43 6f 75 6e 74 20 3d    int newCount =
27d0: 20 2d 31 3b 20 69 6e 74 20 6e 65 77 49 6e 74 65   -1; int newInte
27e0: 72 76 61 6c 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20  rval = -1;....  
27f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
2800: 6e 6e 65 63 74 69 6f 6e 2e 53 65 74 41 76 52 65  nnection.SetAvRe
2810: 74 72 79 28 72 65 66 20 6e 65 77 43 6f 75 6e 74  try(ref newCount
2820: 2c 20 72 65 66 20 6e 65 77 49 6e 74 65 72 76 61  , ref newInterva
2830: 6c 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20  l) != 0)..      
2840: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2850: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
2860: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2870: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61       // NOTE: Ma
2880: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 74 72  ke sure the retr
2890: 79 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75  y parameter valu
28a0: 65 73 20 77 65 72 65 20 73 65 74 2e 0d 0a 20 20  es were set...  
28b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
28c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28d0: 20 28 6e 65 77 43 6f 75 6e 74 20 3d 3d 20 63 6f   (newCount == co
28e0: 75 6e 74 20 26 26 20 6e 65 77 49 6e 74 65 72 76  unt && newInterv
28f0: 61 6c 20 3d 3d 20 69 6e 74 65 72 76 61 6c 29 3b  al == interval);
2900: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
2910: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2920: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2930: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
2940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2950: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
2960: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
2970: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
2980: 20 7d 5d 20 72 65 73 75 6c 74 73 20 65 72 72 6f   }] results erro
2990: 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  rs System.Data.S
29a0: 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  QLite.dll]....  
29b0: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
29c0: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
29d0: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
29e0: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
29f0: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
2a00: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
2a10: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
2a20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set 
2a30: 73 61 76 65 64 43 6f 75 6e 74 20 2d 31 3b 20 73  savedCount -1; s
2a40: 65 74 20 73 61 76 65 64 49 6e 74 65 72 76 61 6c  et savedInterval
2a50: 20 2d 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f   -1....        o
2a60: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
2a70: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
2a80: 7b 69 64 7d 20 54 65 73 74 53 65 74 41 76 52 65  {id} TestSetAvRe
2a90: 74 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  try \..         
2aa0: 20 20 20 73 61 76 65 64 43 6f 75 6e 74 20 73 61     savedCount sa
2ab0: 76 65 64 49 6e 74 65 72 76 61 6c 0d 0a 0d 0a 20  vedInterval.... 
2ac0: 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74         set count
2ad0: 20 35 3b 20 73 65 74 20 69 6e 74 65 72 76 61 6c   5; set interval
2ae0: 20 35 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f   50....        o
2af0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
2b00: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
2b10: 7b 69 64 7d 20 54 65 73 74 53 65 74 41 76 52 65  {id} TestSetAvRe
2b20: 74 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  try \..         
2b30: 20 20 20 63 6f 75 6e 74 20 69 6e 74 65 72 76 61     count interva
2b40: 6c 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  l..      } resul
2b50: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
2b60: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a   ""]}] $result..
2b70: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
2b80: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2b90: 20 73 61 76 65 64 43 6f 75 6e 74 5d 7d 20 74 68   savedCount]} th
2ba0: 65 6e 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  en {..    #..   
2bb0: 20 23 20 4e 4f 54 45 3a 20 52 65 73 74 6f 72 65   # NOTE: Restore
2bc0: 20 74 68 65 20 73 61 76 65 64 20 72 65 74 72 79   the saved retry
2bd0: 20 63 6f 75 6e 74 2c 20 69 66 20 70 6f 73 73 69   count, if possi
2be0: 62 6c 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  ble...    #..   
2bf0: 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..      
2c00: 73 65 74 20 69 6e 74 65 72 76 61 6c 20 2d 31 0d  set interval -1.
2c10: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  .      object in
2c20: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
2c30: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 54 65 73  d}.Test${id} Tes
2c40: 74 53 65 74 41 76 52 65 74 72 79 20 73 61 76 65  tSetAvRetry save
2c50: 64 43 6f 75 6e 74 20 69 6e 74 65 72 76 61 6c 0d  dCount interval.
2c60: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20  .    }..  }.... 
2c70: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
2c80: 73 20 73 61 76 65 64 49 6e 74 65 72 76 61 6c 5d  s savedInterval]
2c90: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 23 0d  } then {..    #.
2ca0: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 73  .    # NOTE: Res
2cb0: 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20 72  tore the saved r
2cc0: 65 74 72 79 20 69 6e 74 65 72 76 61 6c 2c 20 69  etry interval, i
2cd0: 66 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20  f possible...   
2ce0: 20 23 0d 0a 20 20 20 20 63 61 74 63 68 20 7b 0d   #..    catch {.
2cf0: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74  .      set count
2d00: 20 2d 31 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63   -1..      objec
2d10: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
2d20: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
2d30: 20 54 65 73 74 53 65 74 41 76 52 65 74 72 79 20   TestSetAvRetry 
2d40: 63 6f 75 6e 74 20 73 61 76 65 64 49 6e 74 65 72  count savedInter
2d50: 76 61 6c 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  val..    }..  }.
2d60: 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
2d70: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
2d80: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
2d90: 72 65 73 75 6c 74 20 63 6f 75 6e 74 20 69 6e 74  result count int
2da0: 65 72 76 61 6c 20 73 61 76 65 64 43 6f 75 6e 74  erval savedCount
2db0: 20 73 61 76 65 64 49 6e 74 65 72 76 61 6c 20 72   savedInterval r
2dc0: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
2dd0: 65 72 72 6f 72 73 20 63 6f 64 65 20 64 61 74 61  errors code data
2de0: 53 6f 75 72 63 65 20 69 64 20 64 62 20 66 69 6c  Source id db fil
2df0: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
2e00: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
2e10: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
2e20: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
2e30: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
2e40: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d  .Data.SQLite} \.
2e50: 0a 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d  .-match regexp -
2e60: 72 65 73 75 6c 74 20 7b 5e 4f 6b 20 53 79 73 74  result {^Ok Syst
2e70: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
2e80: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
2e90: 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 5c 0d  lts#\d+ \{\} 0\.
2ea0: 0a 54 72 75 65 24 7d 7d 0d 0a 0d 0a 23 23 23 23  .True$}}....####
2eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ef0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
2f00: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 62 61 73  unTest {test bas
2f10: 69 63 2d 31 2e 37 20 7b 70 72 6f 70 65 72 6c 79  ic-1.7 {properly
2f20: 20 63 6c 6f 73 65 64 20 64 61 74 61 62 61 73 65   closed database
2f30: 20 66 69 6c 65 20 28 6e 6f 6e 2d 71 75 65 72 79   file (non-query
2f40: 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  )} -setup {..  s
2f50: 65 74 20 66 69 6c 65 4e 61 6d 65 20 62 61 73 69  et fileName basi
2f60: 63 2d 31 2e 37 2e 64 62 0d 0a 7d 20 2d 62 6f 64  c-1.7.db..} -bod
2f70: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
2f80: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
2f90: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
2fa0: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
2fb0: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
2fc0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 54 65 6d 70  le join [getTemp
2fd0: 6f 72 61 72 79 50 61 74 68 5d 20 24 66 69 6c 65  oraryPath] $file
2fe0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
2ff0: 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42 45 47 49  ql { \..    BEGI
3000: 4e 20 45 58 43 4c 55 53 49 56 45 20 54 52 41 4e  N EXCLUSIVE TRAN
3010: 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20 20 20 20  SACTION; \..    
3020: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
3030: 78 20 49 4e 54 45 47 45 52 29 3b 20 5c 0d 0a 20  x INTEGER); \.. 
3040: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3050: 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
3060: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 2a   \..    SELECT *
3070: 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a 20 20 7d   FROM t1; \..  }
3080: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
3090: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
30a0: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
30b0: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
30c0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
30d0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
30e0: 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75 73  em.Data;..    us
30f0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
3100: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
3110: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
3120: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
3130: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73       public clas
3140: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
3150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
3160: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
3170: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
3180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73   {..          us
3190: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65  ing (SQLiteConne
31a0: 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
31b0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
31c0: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
31d0: 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f          "Data So
31e0: 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63  urce=${dataSourc
31f0: 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20 20 20  e};"))..        
3200: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3210: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
3220: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
3230: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
3240: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
3250: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d  = new SQLiteComm
3260: 61 6e 64 28 22 24 7b 73 71 6c 7d 22 2c 0d 0a 20  and("${sql}",.. 
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
3280: 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20  onnection))..   
3290: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32a0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
32b0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
32c0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
32d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
32e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
32f0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
3300: 5d 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  ] results errors
3310: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
3320: 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69  ite.dll]....  li
3330: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code $result
3340: 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  s \..      [expr
3350: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65   {[info exists e
3360: 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73  rrors] ? $errors
3370: 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20   : ""}] \..     
3380: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
3390: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
33a0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
33b0: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
33c0: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
33d0: 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65  Main..      } re
33e0: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
33f0: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
3400: 74 20 5c 0d 0a 20 20 20 20 20 20 5b 63 6c 6f 73  t \..      [clos
3410: 65 20 5b 6f 70 65 6e 20 24 64 61 74 61 53 6f 75  e [open $dataSou
3420: 72 63 65 20 52 44 4f 4e 4c 59 20 30 20 22 22 20  rce RDONLY 0 "" 
3430: 2d 73 68 61 72 65 20 4e 6f 6e 65 5d 5d 0d 0a 7d  -share None]]..}
3440: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
3450: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
3460: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
3470: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
3480: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
3490: 63 6f 64 65 20 73 71 6c 20 64 61 74 61 53 6f 75  code sql dataSou
34a0: 72 63 65 20 69 64 20 64 62 20 66 69 6c 65 4e 61  rce id db fileNa
34b0: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
34c0: 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
34d0: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
34e0: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
34f0: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
3500: 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 6d  ta.SQLite} \..-m
3510: 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73  atch regexp -res
3520: 75 6c 74 20 7b 5e 4f 6b 20 53 79 73 74 65 6d 23  ult {^Ok System#
3530: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
3540: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
3550: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 5c 0d 0a 5c 7b  #\d+ \{\} 0\..\{
3560: 5c 7d 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23  \} \{\}$}}....##
3570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
35c0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 62  .runTest {test b
35d0: 61 73 69 63 2d 31 2e 38 20 7b 70 72 6f 70 65 72  asic-1.8 {proper
35e0: 6c 79 20 63 6c 6f 73 65 64 20 64 61 74 61 62 61  ly closed databa
35f0: 73 65 20 66 69 6c 65 20 28 72 65 61 64 65 72 20  se file (reader 
3600: 23 31 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  #1)} -setup {.. 
3610: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 62 61   set fileName ba
3620: 73 69 63 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62  sic-1.8.db..} -b
3630: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
3640: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
3650: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
3660: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
3670: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
3680: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 54 65  file join [getTe
3690: 6d 70 6f 72 61 72 79 50 61 74 68 5d 20 24 66 69  mporaryPath] $fi
36a0: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74  leName]....  set
36b0: 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42 45   sql { \..    BE
36c0: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 20 54 52  GIN EXCLUSIVE TR
36d0: 41 4e 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20 20  ANSACTION; \..  
36e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
36f0: 31 28 78 20 49 4e 54 45 47 45 52 29 3b 20 5c 0d  1(x INTEGER); \.
3700: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3710: 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
3720: 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54  ); \..    SELECT
3730: 20 2a 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a 20   * FROM t1; \.. 
3740: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
3750: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
3760: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
3770: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
3780: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
3790: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
37a0: 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20  stem.Data;..    
37b0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
37c0: 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20  a.SQLite;....   
37d0: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
37e0: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
37f0: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c  .      public cl
3800: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
3810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3820: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
3830: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
3840: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3850: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
3860: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
3870: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
3880: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
3890: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
38a0: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
38b0: 72 63 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20  rce};"))..      
38c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38d0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
38e0: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
38f0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3900: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
3910: 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  d = new SQLiteCo
3920: 6d 6d 61 6e 64 28 22 24 7b 73 71 6c 7d 22 2c 0d  mmand("${sql}",.
3930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3940: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d 0a 20   connection)).. 
3950: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3960: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
3970: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
3980: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
3990: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
39a0: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
39b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
39d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
39e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
39f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3a00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3a10: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
3a20: 20 7d 0d 0a 20 20 7d 5d 20 72 65 73 75 6c 74 73   }..  }] results
3a30: 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44   errors System.D
3a40: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d  ata.SQLite.dll].
3a50: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
3a60: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
3a70: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
3a80: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
3a90: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
3aa0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
3ab0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
3ac0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
3ad0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
3ae0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
3af0: 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20  t${id} Main..   
3b00: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
3b10: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
3b20: 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20   $result \..    
3b30: 20 20 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20 24    [close [open $
3b40: 64 61 74 61 53 6f 75 72 63 65 20 52 44 4f 4e 4c  dataSource RDONL
3b50: 59 20 30 20 22 22 20 2d 73 68 61 72 65 20 4e 6f  Y 0 "" -share No
3b60: 6e 65 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ne]]..} -cleanup
3b70: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
3b80: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
3b90: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
3ba0: 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20   result results 
3bb0: 65 72 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20  errors code sql 
3bc0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 64 62  dataSource id db
3bd0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
3be0: 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61  nstraints \..{ea
3bf0: 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
3c00: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
3c10: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
3c20: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
3c30: 7d 20 5c 0d 0a 2d 6d 61 74 63 68 20 72 65 67 65  } \..-match rege
3c40: 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 20  xp -result {^Ok 
3c50: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
3c60: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
3c70: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
3c80: 20 30 5c 0d 0a 5c 7b 5c 7d 20 5c 7b 5c 7d 24 7d   0\..\{\} \{\}$}
3c90: 7d 0d 0a 0d 0a 23 23 23 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 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
3cf0: 7b 74 65 73 74 20 62 61 73 69 63 2d 31 2e 39 20  {test basic-1.9 
3d00: 7b 70 72 6f 70 65 72 6c 79 20 63 6c 6f 73 65 64  {properly closed
3d10: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 28   database file (
3d20: 72 65 61 64 65 72 20 23 32 29 7d 20 2d 73 65 74  reader #2)} -set
3d30: 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65  up {..  set file
3d40: 4e 61 6d 65 20 62 61 73 69 63 2d 31 2e 39 2e 64  Name basic-1.9.d
3d50: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
3d60: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
3d70: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
3d80: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
3d90: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
3da0: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
3db0: 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61   [getTemporaryPa
3dc0: 74 68 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  th] $fileName]..
3dd0: 0d 0a 20 20 73 65 74 20 73 71 6c 20 7b 20 5c 0d  ..  set sql { \.
3de0: 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43 4c 55  .    BEGIN EXCLU
3df0: 53 49 56 45 20 54 52 41 4e 53 41 43 54 49 4f 4e  SIVE TRANSACTION
3e00: 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  ; \..    CREATE 
3e10: 54 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47  TABLE t1(x INTEG
3e20: 45 52 29 3b 20 5c 0d 0a 20 20 20 20 49 4e 53 45  ER); \..    INSE
3e30: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
3e40: 41 4c 55 45 53 28 31 29 3b 20 5c 0d 0a 20 20 20  ALUES(1); \..   
3e50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3e60: 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75  1; \..  }....  u
3e70: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
3e80: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
3e90: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
3ea0: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
3eb0: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
3ec0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
3ed0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
3ee0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
3ef0: 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ....    namespac
3f00: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d  e _Dynamic${id}.
3f10: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
3f20: 62 6c 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  blic class Test$
3f30: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
3f40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3f50: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
3f60: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3f70: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3f80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
3f90: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
3fa0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
3fb0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3fc0: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
3fd0: 64 61 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d  dataSource};")).
3fe0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
3ff0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
4000: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
4010: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4020: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
4030: 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53   command = new S
4040: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 22 24 7b  QLiteCommand("${
4050: 73 71 6c 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  sql}",..        
4060: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
4070: 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
4080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4090: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
40a0: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
40b0: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
40c0: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 0d 0a  ExecuteReader(..
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 20 20 43 6f 6d 6d 61 6e 64 42 65 68 61 76 69 6f    CommandBehavio
40f0: 72 2e 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  r.CloseConnectio
4100: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
4110: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4120: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
4130: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
4140: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4150: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4160: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
4170: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
4180: 7d 5d 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  }] results error
4190: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
41a0: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
41b0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
41c0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
41d0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
41e0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
41f0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
4200: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
4210: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
4220: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
4230: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
4240: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
4250: 20 4d 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72   Main..      } r
4260: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
4270: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
4280: 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b 63 6c 6f  lt \..      [clo
4290: 73 65 20 5b 6f 70 65 6e 20 24 64 61 74 61 53 6f  se [open $dataSo
42a0: 75 72 63 65 20 52 44 4f 4e 4c 59 20 30 20 22 22  urce RDONLY 0 ""
42b0: 20 2d 73 68 61 72 65 20 4e 6f 6e 65 5d 5d 0d 0a   -share None]]..
42c0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
42d0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
42e0: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
42f0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
4300: 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  t results errors
4310: 20 63 6f 64 65 20 73 71 6c 20 64 61 74 61 53 6f   code sql dataSo
4320: 75 72 63 65 20 69 64 20 64 62 20 66 69 6c 65 4e  urce id db fileN
4330: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
4340: 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
4350: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
4360: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
4370: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
4380: 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d  ata.SQLite} \..-
4390: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65  match regexp -re
43a0: 73 75 6c 74 20 7b 5e 4f 6b 20 53 79 73 74 65 6d  sult {^Ok System
43b0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
43c0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
43d0: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 5c 0d 0a 5c  s#\d+ \{\} 0\..\
43e0: 7b 5c 7d 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 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 23 23 23 23 23 23 23 23 23  ################
4430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
4440: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
4450: 62 61 73 69 63 2d 31 2e 31 30 20 7b 43 68 61 6e  basic-1.10 {Chan
4460: 67 65 73 20 70 72 6f 70 65 72 74 79 7d 20 2d 73  ges property} -s
4470: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
4480: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
4490: 62 61 73 69 63 2d 31 2e 31 30 2e 64 62 5d 0d 0a  basic-1.10.db]..
44a0: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
44b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a   connection [obj
44c0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
44d0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62  s +NonPublic -ob
44e0: 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73  jectflags +NoDis
44f0: 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 49 6e  pose \..      In
4500: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
4510: 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ive.connections 
4520: 49 74 65 6d 20 24 64 62 5d 0d 0a 0d 0a 20 20 73  Item $db]....  s
4530: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
4540: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
4550: 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
4560: 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45 52  BLE t1(x INTEGER
4570: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
4580: 2c 20 79 2c 20 7a 29 3b 22 0d 0a 0d 0a 20 20 73  , y, z);"....  s
4590: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
45a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
45b0: 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28  x, y, z) VALUES(
45c0: 31 2c 20 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b  1, 'foo', 1234);
45d0: 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  "..  sql execute
45e0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
45f0: 4f 20 74 31 20 28 78 2c 20 79 2c 20 7a 29 20 56  O t1 (x, y, z) V
4600: 41 4c 55 45 53 28 32 2c 20 27 62 61 72 27 2c 20  ALUES(2, 'bar', 
4610: 35 36 37 38 29 3b 22 0d 0a 20 20 6c 61 70 70 65  5678);"..  lappe
4620: 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63  nd result [objec
4630: 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63  t invoke $connec
4640: 74 69 6f 6e 20 43 68 61 6e 67 65 73 5d 0d 0a 0d  tion Changes]...
4650: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
4660: 64 62 20 22 55 50 44 41 54 45 20 74 31 20 53 45  db "UPDATE t1 SE
4670: 54 20 79 20 3d 20 27 66 6f 6f 62 61 72 27 3b 22  T y = 'foobar';"
4680: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
4690: 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  lt [object invok
46a0: 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 43 68  e $connection Ch
46b0: 61 6e 67 65 73 5d 0d 0a 0d 0a 20 20 73 71 6c 20  anges]....  sql 
46c0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
46d0: 20 72 65 61 64 65 72 20 24 64 62 20 22 53 45 4c   reader $db "SEL
46e0: 45 43 54 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d  ECT x, y, z FROM
46f0: 20 74 31 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64   t1;"..  lappend
4700: 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20   result [object 
4710: 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69  invoke $connecti
4720: 6f 6e 20 43 68 61 6e 67 65 73 5d 0d 0a 0d 0a 20  on Changes].... 
4730: 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c   foreach name [l
4740: 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b 61  sort -integer [a
4750: 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73 20  rray names rows 
4760: 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d  -regexp {^\d+$}]
4770: 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64  ] {..    lappend
4780: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e   result [list $n
4790: 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65 29  ame $rows($name)
47a0: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ]..  }....  set 
47b0: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
47c0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
47d0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
47e0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
47f0: 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73  in name rows res
4800: 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ult connection d
4810: 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
4820: 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
4830: 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
4840: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
4850: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
4860: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
4870: 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 31  e} \..-result {1
4880: 20 32 20 32 20 7b 31 20 7b 7b 78 20 31 7d 20 7b   2 2 {1 {{x 1} {
4890: 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20 31 32 33  y foobar} {z 123
48a0: 34 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b  4}}} {2 {{x 2} {
48b0: 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20 35 36 37  y foobar} {z 567
48c0: 38 7d 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  8}}}}}....######
48d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
48e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
48f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4910: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
4920: 54 65 73 74 20 7b 74 65 73 74 20 62 61 73 69 63  Test {test basic
4930: 2d 31 2e 31 31 20 7b 4c 61 73 74 49 6e 73 65 72  -1.11 {LastInser
4940: 74 52 6f 77 49 64 20 70 72 6f 70 65 72 74 79 7d  tRowId property}
4950: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
4960: 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
4970: 6d 65 20 62 61 73 69 63 2d 31 2e 31 31 2e 64 62  me basic-1.11.db
4980: 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ]..} -body {..  
4990: 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b  set connection [
49a0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
49b0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
49c0: 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f  -objectflags +No
49d0: 44 69 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20  Dispose \..     
49e0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
49f0: 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f  Active.connectio
4a00: 6e 73 20 49 74 65 6d 20 24 64 62 5d 0d 0a 0d 0a  ns Item $db]....
4a10: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
4a20: 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  st]....  sql exe
4a30: 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45  cute $db "CREATE
4a40: 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45   TABLE t1(x INTE
4a50: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
4a60: 41 53 43 2c 20 79 2c 20 7a 29 3b 22 0d 0a 0d 0a  ASC, y, z);"....
4a70: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
4a80: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
4a90: 74 32 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t2(x INTEGER PRI
4aa0: 4d 41 52 59 20 4b 45 59 20 41 55 54 4f 49 4e 43  MARY KEY AUTOINC
4ab0: 52 45 4d 45 4e 54 2c 20 79 2c 20 7a 29 3b 22 0d  REMENT, y, z);".
4ac0: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
4ad0: 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  t [object invoke
4ae0: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73   $connection Las
4af0: 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d  tInsertRowId]...
4b00: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
4b10: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
4b20: 74 31 20 28 78 2c 20 79 2c 20 7a 29 20 56 41 4c  t1 (x, y, z) VAL
4b30: 55 45 53 28 31 2c 20 27 66 6f 6f 27 2c 20 31 32  UES(1, 'foo', 12
4b40: 33 34 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64  34);"..  lappend
4b50: 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20   result [object 
4b60: 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69  invoke $connecti
4b70: 6f 6e 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77  on LastInsertRow
4b80: 49 64 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  Id]....  sql exe
4b90: 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
4ba0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 2c 20   INTO t1 (x, y, 
4bb0: 7a 29 20 56 41 4c 55 45 53 28 32 2c 20 27 62 61  z) VALUES(2, 'ba
4bc0: 72 27 2c 20 35 36 37 38 29 3b 22 0d 0a 20 20 6c  r', 5678);"..  l
4bd0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f  append result [o
4be0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f  bject invoke $co
4bf0: 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e 73  nnection LastIns
4c00: 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20 73  ertRowId]....  s
4c10: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
4c20: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 20  UPDATE t1 SET y 
4c30: 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a 20 20  = 'foobar';"..  
4c40: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
4c50: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
4c60: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
4c70: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
4c80: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
4c90: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
4ca0: 28 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 66  (y, z) VALUES('f
4cb0: 6f 6f 27 2c 20 31 32 33 34 29 3b 22 0d 0a 20 20  oo', 1234);"..  
4cc0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
4cd0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
4ce0: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
4cf0: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
4d00: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
4d10: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
4d20: 28 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 62  (y, z) VALUES('b
4d30: 61 72 27 2c 20 35 36 37 38 29 3b 22 0d 0a 20 20  ar', 5678);"..  
4d40: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
4d50: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c
4d60: 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e  onnection LastIn
4d70: 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20  sertRowId]....  
4d80: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
4d90: 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20 79  "UPDATE t2 SET y
4da0: 20 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a 20   = 'foobar';".. 
4db0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
4dc0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $
4dd0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49  connection LastI
4de0: 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20  nsertRowId].... 
4df0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78   sql execute -ex
4e00: 65 63 75 74 65 20 72 65 61 64 65 72 20 24 64 62  ecute reader $db
4e10: 20 22 53 45 4c 45 43 54 20 78 2c 20 79 2c 20 7a   "SELECT x, y, z
4e20: 20 46 52 4f 4d 20 74 31 3b 22 0d 0a 20 20 6c 61   FROM t1;"..  la
4e30: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62  ppend result [ob
4e40: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e  ject invoke $con
4e50: 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e 73 65  nection LastInse
4e60: 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20 66 6f  rtRowId]....  fo
4e70: 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72  reach name [lsor
4e80: 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61  t -integer [arra
4e90: 79 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d 72 65  y names rows -re
4ea0: 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b  gexp {^\d+$}]] {
4eb0: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
4ec0: 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65  sult [list $name
4ed0: 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a   $rows($name)]..
4ee0: 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65    }....  sql exe
4ef0: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
4f00: 61 64 65 72 20 24 64 62 20 22 53 45 4c 45 43 54  ader $db "SELECT
4f10: 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20 74 32   x, y, z FROM t2
4f20: 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ;"..  lappend re
4f30: 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  sult [object inv
4f40: 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  oke $connection 
4f50: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d  LastInsertRowId]
4f60: 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 6e 61  ....  foreach na
4f70: 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67  me [lsort -integ
4f80: 65 72 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  er [array names 
4f90: 72 6f 77 73 20 2d 72 65 67 65 78 70 20 7b 5e 5c  rows -regexp {^\
4fa0: 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61  d+$}]] {..    la
4fb0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69  ppend result [li
4fc0: 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73 28 24  st $name $rows($
4fd0: 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  name)]..  }.... 
4fe0: 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
4ff0: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
5000: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
5010: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
5020: 6f 6d 70 6c 61 69 6e 20 6e 61 6d 65 20 72 6f 77  omplain name row
5030: 73 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74  s result connect
5040: 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ion db fileName.
5050: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
5060: 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
5070: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
5080: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
5090: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
50a0: 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73 75  SQLite} \..-resu
50b0: 6c 74 20 7b 30 20 31 20 32 20 32 20 31 20 32 20  lt {0 1 2 2 1 2 
50c0: 32 20 32 20 7b 31 20 7b 7b 78 20 31 7d 20 7b 79  2 2 {1 {{x 1} {y
50d0: 20 66 6f 6f 62 61 72 7d 20 7b 7a 20 31 32 33 34   foobar} {z 1234
50e0: 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b 79  }}} {2 {{x 2} {y
50f0: 20 66 6f 6f 62 61 72 7d 5c 0d 0a 7b 7a 20 35 36   foobar}\..{z 56
5100: 37 38 7d 7d 7d 20 32 20 7b 31 20 7b 7b 78 20 31  78}}} 2 {1 {{x 1
5110: 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20  } {y foobar} {z 
5120: 31 32 33 34 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32  1234}}} {2 {{x 2
5130: 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20  } {y foobar} {z 
5140: 35 36 37 38 7d 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23  5678}}}}}....###
5150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5190: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
51a0: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 62 61  runTest {test ba
51b0: 73 69 63 2d 31 2e 31 32 20 7b 44 61 74 65 54 69  sic-1.12 {DateTi
51c0: 6d 65 20 75 73 69 6e 67 20 55 6e 69 78 20 65 70  me using Unix ep
51d0: 6f 63 68 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  och} -setup {.. 
51e0: 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
51f0: 6c 65 4e 61 6d 65 20 62 61 73 69 63 2d 31 2e 31  leName basic-1.1
5200: 32 2e 64 62 5d 20 22 22 20 22 22 20 22 44 61 74  2.db] "" "" "Dat
5210: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 55 6e 69 78  eTimeFormat=Unix
5220: 45 70 6f 63 68 3b 22 0d 0a 7d 20 2d 62 6f 64 79  Epoch;"..} -body
5230: 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74   {..  set result
5240: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c   [list]....  sql
5250: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52   execute $db "CR
5260: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
5270: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
5280: 4b 45 59 20 41 53 43 2c 20 79 20 44 41 54 45 54  KEY ASC, y DATET
5290: 49 4d 45 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78  IME);"..  sql ex
52a0: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
52b0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
52c0: 20 56 41 4c 55 45 53 28 31 2c 20 31 33 30 32 38   VALUES(1, 13028
52d0: 32 35 36 30 30 29 3b 22 0d 0a 20 20 73 71 6c 20  25600);"..  sql 
52e0: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
52f0: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
5300: 79 29 20 56 41 4c 55 45 53 28 32 2c 20 31 33 33  y) VALUES(2, 133
5310: 34 34 34 38 30 30 30 29 3b 22 0d 0a 20 20 73 71  4448000);"..  sq
5320: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
5330: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
5340: 2c 20 79 29 20 56 41 4c 55 45 53 28 33 2c 20 31  , y) VALUES(3, 1
5350: 33 36 35 39 38 34 30 30 30 29 3b 22 0d 0a 0d 0a  365984000);"....
5360: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
5370: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
5380: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
5390: 34 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20  4, ?);" \..     
53a0: 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 49 6e   [list param1 In
53b0: 74 33 32 20 31 33 30 32 38 32 35 36 30 30 5d 0d  t32 1302825600].
53c0: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
53d0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
53e0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
53f0: 45 53 28 35 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(5, ?);" \..  
5400: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
5410: 20 49 6e 74 33 32 20 31 33 33 34 34 34 38 30 30   Int32 133444800
5420: 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  0]....  sql exec
5430: 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
5440: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
5450: 41 4c 55 45 53 28 36 2c 20 3f 29 3b 22 20 5c 0d  ALUES(6, ?);" \.
5460: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5470: 61 6d 31 20 49 6e 74 33 32 20 31 33 36 35 39 38  am1 Int32 136598
5480: 34 30 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  4000]....  sql e
5490: 78 65 63 75 74 65 20 2d 76 65 72 62 61 74 69 6d  xecute -verbatim
54a0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
54b0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
54c0: 45 53 28 37 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(7, ?);" \..  
54d0: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
54e0: 20 44 61 74 65 54 69 6d 65 20 31 33 30 32 38 32   DateTime 130282
54f0: 35 36 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  5600]....  sql e
5500: 78 65 63 75 74 65 20 2d 76 65 72 62 61 74 69 6d  xecute -verbatim
5510: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5520: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
5530: 45 53 28 38 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(8, ?);" \..  
5540: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
5550: 20 44 61 74 65 54 69 6d 65 20 31 33 33 34 34 34   DateTime 133444
5560: 38 30 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  8000]....  sql e
5570: 78 65 63 75 74 65 20 2d 76 65 72 62 61 74 69 6d  xecute -verbatim
5580: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5590: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
55a0: 45 53 28 39 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20  ES(9, ?);" \..  
55b0: 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31      [list param1
55c0: 20 44 61 74 65 54 69 6d 65 20 31 33 36 35 39 38   DateTime 136598
55d0: 34 30 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  4000]....  sql e
55e0: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
55f0: 72 65 61 64 65 72 20 2d 64 61 74 65 74 69 6d 65  reader -datetime
5600: 66 6f 72 6d 61 74 20 22 4d 4d 2f 64 64 2f 79 79  format "MM/dd/yy
5610: 79 79 20 48 48 3a 6d 6d 3a 73 73 22 20 24 64 62  yy HH:mm:ss" $db
5620: 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43   \..      "SELEC
5630: 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 4f  T x, y FROM t1 O
5640: 52 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d 0a 20  RDER BY x;".... 
5650: 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c   foreach name [l
5660: 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b 61  sort -integer [a
5670: 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73 20  rray names rows 
5680: 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d  -regexp {^\d+$}]
5690: 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64  ] {..    lappend
56a0: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e   result [list $n
56b0: 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65 29  ame $rows($name)
56c0: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ]..  }....  set 
56d0: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
56e0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
56f0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
5700: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
5710: 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73  in name rows res
5720: 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ult db fileName.
5730: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
5740: 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
5750: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
5760: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
5770: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
5780: 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73 75  SQLite} \..-resu
5790: 6c 74 20 7b 7b 31 20 7b 7b 78 20 31 7d 20 7b 79  lt {{1 {{x 1} {y
57a0: 20 7b 30 34 2f 31 35 2f 32 30 31 31 20 30 30 3a   {04/15/2011 00:
57b0: 30 30 3a 30 30 7d 7d 7d 7d 20 7b 32 20 7b 7b 78  00:00}}}} {2 {{x
57c0: 20 32 7d 20 7b 79 20 7b 30 34 2f 31 35 2f 32 30   2} {y {04/15/20
57d0: 31 32 5c 0d 0a 30 30 3a 30 30 3a 30 30 7d 7d 7d  12\..00:00:00}}}
57e0: 7d 20 7b 33 20 7b 7b 78 20 33 7d 20 7b 79 20 7b  } {3 {{x 3} {y {
57f0: 30 34 2f 31 35 2f 32 30 31 33 20 30 30 3a 30 30  04/15/2013 00:00
5800: 3a 30 30 7d 7d 7d 7d 20 7b 34 20 7b 7b 78 20 34  :00}}}} {4 {{x 4
5810: 7d 20 7b 79 20 7b 30 34 2f 31 35 2f 32 30 31 31  } {y {04/15/2011
5820: 5c 0d 0a 30 30 3a 30 30 3a 30 30 7d 7d 7d 7d 20  \..00:00:00}}}} 
5830: 7b 35 20 7b 7b 78 20 35 7d 20 7b 79 20 7b 30 34  {5 {{x 5} {y {04
5840: 2f 31 35 2f 32 30 31 32 20 30 30 3a 30 30 3a 30  /15/2012 00:00:0
5850: 30 7d 7d 7d 7d 20 7b 36 20 7b 7b 78 20 36 7d 20  0}}}} {6 {{x 6} 
5860: 7b 79 20 7b 30 34 2f 31 35 2f 32 30 31 33 5c 0d  {y {04/15/2013\.
5870: 0a 30 30 3a 30 30 3a 30 30 7d 7d 7d 7d 20 7b 37  .00:00:00}}}} {7
5880: 20 7b 7b 78 20 37 7d 20 7b 79 20 7b 30 34 2f 31   {{x 7} {y {04/1
5890: 35 2f 32 30 31 31 20 30 30 3a 30 30 3a 30 30 7d  5/2011 00:00:00}
58a0: 7d 7d 7d 20 7b 38 20 7b 7b 78 20 38 7d 20 7b 79  }}} {8 {{x 8} {y
58b0: 20 7b 30 34 2f 31 35 2f 32 30 31 32 5c 0d 0a 30   {04/15/2012\..0
58c0: 30 3a 30 30 3a 30 30 7d 7d 7d 7d 20 7b 39 20 7b  0:00:00}}}} {9 {
58d0: 7b 78 20 39 7d 20 7b 79 20 7b 30 34 2f 31 35 2f  {x 9} {y {04/15/
58e0: 32 30 31 33 20 30 30 3a 30 30 3a 30 30 7d 7d 7d  2013 00:00:00}}}
58f0: 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }}}....#########
5900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5940: 23 23 23 23 23 23 0d 0a 0d 0a 73 65 74 20 64 61  ######....set da
5950: 74 65 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74  te [clock format
5960: 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
5970: 20 2d 66 6f 72 6d 61 74 20 79 79 79 79 2d 4d 4d   -format yyyy-MM
5980: 2d 64 64 5d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  -dd]....########
5990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
59a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
59b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
59c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
59d0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
59e0: 73 74 20 7b 74 65 73 74 20 62 61 73 69 63 2d 31  st {test basic-1
59f0: 2e 31 33 20 7b 44 61 74 65 54 69 6d 65 20 75 73  .13 {DateTime us
5a00: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 20 63 75  ing invariant cu
5a10: 6c 74 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0d  lture} -setup {.
5a20: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
5a30: 66 69 6c 65 4e 61 6d 65 20 62 61 73 69 63 2d 31  fileName basic-1
5a40: 2e 31 33 2e 64 62 5d 20 22 22 20 22 22 20 22 44  .13.db] "" "" "D
5a50: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 49 6e  ateTimeFormat=In
5a60: 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 3b 22  variantCulture;"
5a70: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
5a80: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
5a90: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
5aa0: 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
5ab0: 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45 52  BLE t1(x INTEGER
5ac0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
5ad0: 2c 20 79 20 44 41 54 45 54 49 4d 45 29 3b 22 0d  , y DATETIME);".
5ae0: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5af0: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
5b00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
5b10: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 2c 20 27  , y) VALUES(1, '
5b20: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
5b30: 63 65 6d 62 65 72 20 32 30 30 39 27 29 3b 22 0d  cember 2009');".
5b40: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5b50: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5b60: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
5b70: 45 53 28 32 2c 20 27 31 32 3a 30 30 3a 30 30 27  ES(2, '12:00:00'
5b80: 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  );"....  sql exe
5b90: 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20  cute $db \..    
5ba0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
5bb0: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
5bc0: 33 2c 20 27 57 65 64 6e 65 73 64 61 79 2c 20 31  3, 'Wednesday, 1
5bd0: 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39 20  6 December 2009 
5be0: 31 32 3a 30 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a  12:00:00');"....
5bf0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
5c00: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
5c10: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
5c20: 34 2c 20 27 31 32 2f 31 36 2f 32 30 30 39 27 29  4, '12/16/2009')
5c30: 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ;"..  sql execut
5c40: 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
5c50: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
5c60: 55 45 53 28 35 2c 20 27 31 32 3a 30 30 27 29 3b  UES(5, '12:00');
5c70: 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  "..  sql execute
5c80: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5c90: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
5ca0: 45 53 28 36 2c 20 27 31 32 2f 31 36 2f 32 30 30  ES(6, '12/16/200
5cb0: 39 20 31 32 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20  9 12:00');".... 
5cc0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
5cd0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
5ce0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 37   (x, y) VALUES(7
5cf0: 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20  , ?);" \..      
5d00: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74  [list param1 Dat
5d10: 65 54 69 6d 65 20 22 57 65 64 6e 65 73 64 61 79  eTime "Wednesday
5d20: 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30  , 16 December 20
5d30: 30 39 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  09"]....  sql ex
5d40: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
5d50: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
5d60: 20 56 41 4c 55 45 53 28 38 2c 20 3f 29 3b 22 20   VALUES(8, ?);" 
5d70: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
5d80: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31  aram1 DateTime 1
5d90: 32 3a 30 30 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71  2:00:00]....  sq
5da0: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
5db0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
5dc0: 2c 20 79 29 20 56 41 4c 55 45 53 28 39 2c 20 3f  , y) VALUES(9, ?
5dd0: 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69  );" \..      [li
5de0: 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69  st param1 DateTi
5df0: 6d 65 20 22 57 65 64 6e 65 73 64 61 79 2c 20 31  me "Wednesday, 1
5e00: 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39 20  6 December 2009 
5e10: 31 32 3a 30 30 3a 30 30 22 5d 0d 0a 0d 0a 20 20  12:00:00"]....  
5e20: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
5e30: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
5e40: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 30  (x, y) VALUES(10
5e50: 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20  , ?);" \..      
5e60: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44 61 74  [list param1 Dat
5e70: 65 54 69 6d 65 20 31 32 2f 31 36 2f 32 30 30 39  eTime 12/16/2009
5e80: 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  ]....  sql execu
5e90: 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
5ea0: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
5eb0: 4c 55 45 53 28 31 31 2c 20 3f 29 3b 22 20 5c 0d  LUES(11, ?);" \.
5ec0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
5ed0: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 32 3a  am1 DateTime 12:
5ee0: 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  00]....  sql exe
5ef0: 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54  cute $db "INSERT
5f00: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
5f10: 56 41 4c 55 45 53 28 31 32 2c 20 3f 29 3b 22 20  VALUES(12, ?);" 
5f20: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
5f30: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 22  aram1 DateTime "
5f40: 31 32 2f 31 36 2f 32 30 30 39 20 31 32 3a 30 30  12/16/2009 12:00
5f50: 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  "]....  sql exec
5f60: 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65 61  ute -execute rea
5f70: 64 65 72 20 2d 64 61 74 65 74 69 6d 65 66 6f 72  der -datetimefor
5f80: 6d 61 74 20 22 4d 4d 2f 64 64 2f 79 79 79 79 20  mat "MM/dd/yyyy 
5f90: 48 48 3a 6d 6d 3a 73 73 22 20 24 64 62 20 5c 0d  HH:mm:ss" $db \.
5fa0: 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 78  .      "SELECT x
5fb0: 2c 20 43 41 53 54 28 79 20 41 53 20 54 45 58 54  , CAST(y AS TEXT
5fc0: 29 20 41 53 20 79 32 20 46 52 4f 4d 20 74 31 20  ) AS y2 FROM t1 
5fd0: 4f 52 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d 0a  ORDER BY x;"....
5fe0: 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b    foreach name [
5ff0: 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b  lsort -integer [
6000: 61 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73  array names rows
6010: 20 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d   -regexp {^\d+$}
6020: 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e  ]] {..    lappen
6030: 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24  d result [list $
6040: 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65  name $rows($name
6050: 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  )]..  }....  set
6060: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
6070: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
6080: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
6090: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
60a0: 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65  ain name rows re
60b0: 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
60c0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
60d0: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
60e0: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
60f0: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
6100: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
6110: 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73  .SQLite} \..-res
6120: 75 6c 74 20 5b 73 75 62 73 74 20 7b 7b 31 20 7b  ult [subst {{1 {
6130: 7b 78 20 31 7d 20 7b 79 32 20 7b 57 65 64 6e 65  {x 1} {y2 {Wedne
6140: 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65  sday, 16 Decembe
6150: 72 20 32 30 30 39 7d 7d 7d 7d 20 7b 32 20 7b 7b  r 2009}}}} {2 {{
6160: 78 20 32 7d 20 7b 79 32 5c 0d 0a 31 32 3a 30 30  x 2} {y2\..12:00
6170: 3a 30 30 7d 7d 7d 20 7b 33 20 7b 7b 78 20 33 7d  :00}}} {3 {{x 3}
6180: 20 7b 79 32 20 7b 57 65 64 6e 65 73 64 61 79 2c   {y2 {Wednesday,
6190: 20 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30   16 December 200
61a0: 39 20 31 32 3a 30 30 3a 30 30 7d 7d 7d 7d 20 7b  9 12:00:00}}}} {
61b0: 34 20 7b 7b 78 20 34 7d 5c 0d 0a 7b 79 32 20 31  4 {{x 4}\..{y2 1
61c0: 32 2f 31 36 2f 32 30 30 39 7d 7d 7d 20 7b 35 20  2/16/2009}}} {5 
61d0: 7b 7b 78 20 35 7d 20 7b 79 32 20 31 32 3a 30 30  {{x 5} {y2 12:00
61e0: 7d 7d 7d 20 7b 36 20 7b 7b 78 20 36 7d 20 7b 79  }}} {6 {{x 6} {y
61f0: 32 20 7b 31 32 2f 31 36 2f 32 30 30 39 20 31 32  2 {12/16/2009 12
6200: 3a 30 30 7d 7d 7d 7d 20 7b 37 5c 0d 0a 7b 7b 78  :00}}}} {7\..{{x
6210: 20 37 7d 20 7b 79 32 20 32 30 30 39 2d 31 32 2d   7} {y2 2009-12-
6220: 31 36 54 30 30 3a 30 30 3a 30 30 2e 30 30 30 30  16T00:00:00.0000
6230: 30 30 30 5a 7d 7d 7d 20 7b 38 20 7b 7b 78 20 38  000Z}}} {8 {{x 8
6240: 7d 20 7b 79 32 5c 0d 0a 24 7b 64 61 74 65 7d 54  } {y2\..${date}T
6250: 31 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30  12:00:00.0000000
6260: 5a 7d 7d 7d 20 7b 39 20 7b 7b 78 20 39 7d 20 7b  Z}}} {9 {{x 9} {
6270: 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54 31 32  y2 2009-12-16T12
6280: 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d  :00:00.0000000Z}
6290: 7d 7d 5c 0d 0a 7b 31 30 20 7b 7b 78 20 31 30 7d  }}\..{10 {{x 10}
62a0: 20 7b 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54   {y2 2009-12-16T
62b0: 30 30 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30  00:00:00.0000000
62c0: 5a 7d 7d 7d 20 7b 31 31 20 7b 7b 78 20 31 31 7d  Z}}} {11 {{x 11}
62d0: 20 7b 79 32 5c 0d 0a 24 7b 64 61 74 65 7d 54 31   {y2\..${date}T1
62e0: 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a  2:00:00.0000000Z
62f0: 7d 7d 7d 20 7b 31 32 20 7b 7b 78 20 31 32 7d 20  }}} {12 {{x 12} 
6300: 7b 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54 31  {y2 2009-12-16T1
6310: 32 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a  2:00:00.0000000Z
6320: 7d 7d 7d 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  }}}}]}....######
6330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6370: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
6380: 54 65 73 74 20 7b 74 65 73 74 20 62 61 73 69 63  Test {test basic
6390: 2d 31 2e 31 34 20 7b 44 61 74 65 54 69 6d 65 20  -1.14 {DateTime 
63a0: 75 73 69 6e 67 20 63 75 72 72 65 6e 74 20 63 75  using current cu
63b0: 6c 74 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0d  lture} -setup {.
63c0: 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
63d0: 66 69 6c 65 4e 61 6d 65 20 62 61 73 69 63 2d 31  fileName basic-1
63e0: 2e 31 34 2e 64 62 5d 20 22 22 20 22 22 20 22 44  .14.db] "" "" "D
63f0: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 43 75  ateTimeFormat=Cu
6400: 72 72 65 6e 74 43 75 6c 74 75 72 65 3b 22 0d 0a  rrentCulture;"..
6410: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
6420: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
6430: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
6440: 24 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c  $db "CREATE TABL
6450: 45 20 74 31 28 78 20 49 4e 54 45 47 45 52 20 50  E t1(x INTEGER P
6460: 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20  RIMARY KEY ASC, 
6470: 79 20 44 41 54 45 54 49 4d 45 29 3b 22 0d 0a 0d  y DATETIME);"...
6480: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
6490: 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53  db \..      "INS
64a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
64b0: 79 29 20 56 41 4c 55 45 53 28 31 2c 20 27 57 65  y) VALUES(1, 'We
64c0: 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65 63 65  dnesday, 16 Dece
64d0: 6d 62 65 72 20 32 30 30 39 27 29 3b 22 0d 0a 0d  mber 2009');"...
64e0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
64f0: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
6500: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
6510: 28 32 2c 20 27 31 32 3a 30 30 3a 30 30 27 29 3b  (2, '12:00:00');
6520: 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  "....  sql execu
6530: 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  te $db \..      
6540: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
6550: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 33 2c  (x, y) VALUES(3,
6560: 20 27 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20   'Wednesday, 16 
6570: 44 65 63 65 6d 62 65 72 20 32 30 30 39 20 31 32  December 2009 12
6580: 3a 30 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20  :00:00');"....  
6590: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
65a0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
65b0: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 34 2c  (x, y) VALUES(4,
65c0: 20 27 31 32 2f 31 36 2f 32 30 30 39 27 29 3b 22   '12/16/2009');"
65d0: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
65e0: 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $db "INSERT INTO
65f0: 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45   t1 (x, y) VALUE
6600: 53 28 35 2c 20 27 31 32 3a 30 30 27 29 3b 22 0d  S(5, '12:00');".
6610: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
6620: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
6630: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
6640: 28 36 2c 20 27 31 32 2f 31 36 2f 32 30 30 39 20  (6, '12/16/2009 
6650: 31 32 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20 73  12:00');"....  s
6660: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
6670: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
6680: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 37 2c 20  x, y) VALUES(7, 
6690: 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  ?);" \..      [l
66a0: 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54  ist param1 DateT
66b0: 69 6d 65 20 22 57 65 64 6e 65 73 64 61 79 2c 20  ime "Wednesday, 
66c0: 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39  16 December 2009
66d0: 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  "]....  sql exec
66e0: 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
66f0: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
6700: 41 4c 55 45 53 28 38 2c 20 3f 29 3b 22 20 5c 0d  ALUES(8, ?);" \.
6710: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
6720: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 31 32 3a  am1 DateTime 12:
6730: 30 30 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20  00:00]....  sql 
6740: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
6750: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6760: 79 29 20 56 41 4c 55 45 53 28 39 2c 20 3f 29 3b  y) VALUES(9, ?);
6770: 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74  " \..      [list
6780: 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65   param1 DateTime
6790: 20 22 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20   "Wednesday, 16 
67a0: 44 65 63 65 6d 62 65 72 20 32 30 30 39 20 31 32  December 2009 12
67b0: 3a 30 30 3a 30 30 22 5d 0d 0a 0d 0a 20 20 73 71  :00:00"]....  sq
67c0: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
67d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
67e0: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 30 2c 20  , y) VALUES(10, 
67f0: 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  ?);" \..      [l
6800: 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54  ist param1 DateT
6810: 69 6d 65 20 31 32 2f 31 36 2f 32 30 30 39 5d 0d  ime 12/16/2009].
6820: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6830: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
6840: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
6850: 45 53 28 31 31 2c 20 3f 29 3b 22 20 5c 0d 0a 20  ES(11, ?);" \.. 
6860: 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d       [list param
6870: 31 20 44 61 74 65 54 69 6d 65 20 31 32 3a 30 30  1 DateTime 12:00
6880: 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  ]....  sql execu
6890: 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
68a0: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
68b0: 4c 55 45 53 28 31 32 2c 20 3f 29 3b 22 20 5c 0d  LUES(12, ?);" \.
68c0: 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72  .      [list par
68d0: 61 6d 31 20 44 61 74 65 54 69 6d 65 20 22 31 32  am1 DateTime "12
68e0: 2f 31 36 2f 32 30 30 39 20 31 32 3a 30 30 22 5d  /16/2009 12:00"]
68f0: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
6900: 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
6910: 72 20 2d 64 61 74 65 74 69 6d 65 66 6f 72 6d 61  r -datetimeforma
6920: 74 20 22 4d 4d 2f 64 64 2f 79 79 79 79 20 48 48  t "MM/dd/yyyy HH
6930: 3a 6d 6d 3a 73 73 22 20 24 64 62 20 5c 0d 0a 20  :mm:ss" $db \.. 
6940: 20 20 20 20 20 22 53 45 4c 45 43 54 20 78 2c 20       "SELECT x, 
6950: 43 41 53 54 28 79 20 41 53 20 54 45 58 54 29 20  CAST(y AS TEXT) 
6960: 41 53 20 79 32 20 46 52 4f 4d 20 74 31 20 4f 52  AS y2 FROM t1 OR
6970: 44 45 52 20 42 59 20 78 3b 22 0d 0a 0d 0a 20 20  DER BY x;"....  
6980: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73  foreach name [ls
6990: 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72  ort -integer [ar
69a0: 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d  ray names rows -
69b0: 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d  regexp {^\d+$}]]
69c0: 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
69d0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61  result [list $na
69e0: 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d  me $rows($name)]
69f0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72  ..  }....  set r
6a00: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
6a10: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
6a20: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
6a30: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
6a40: 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73 75  n name rows resu
6a50: 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a  lt db fileName..
6a60: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
6a70: 0d 0a 7b 65 61 67 6c 65 20 63 75 6c 74 75 72 65  ..{eagle culture
6a80: 2e 65 6e 5f 55 53 20 6d 6f 6e 6f 42 75 67 32 38  .en_US monoBug28
6a90: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
6aa0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
6ab0: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
6ac0: 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5b  QLite} -result [
6ad0: 73 75 62 73 74 20 7b 7b 31 20 7b 7b 78 20 31 7d  subst {{1 {{x 1}
6ae0: 20 7b 79 32 20 7b 57 65 64 6e 65 73 64 61 79 2c   {y2 {Wednesday,
6af0: 20 31 36 20 44 65 63 65 6d 62 65 72 5c 0d 0a 32   16 December\..2
6b00: 30 30 39 7d 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32  009}}}} {2 {{x 2
6b10: 7d 20 7b 79 32 20 31 32 3a 30 30 3a 30 30 7d 7d  } {y2 12:00:00}}
6b20: 7d 20 7b 33 20 7b 7b 78 20 33 7d 20 7b 79 32 20  } {3 {{x 3} {y2 
6b30: 7b 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44  {Wednesday, 16 D
6b40: 65 63 65 6d 62 65 72 20 32 30 30 39 5c 0d 0a 31  ecember 2009\..1
6b50: 32 3a 30 30 3a 30 30 7d 7d 7d 7d 20 7b 34 20 7b  2:00:00}}}} {4 {
6b60: 7b 78 20 34 7d 20 7b 79 32 20 31 32 2f 31 36 2f  {x 4} {y2 12/16/
6b70: 32 30 30 39 7d 7d 7d 20 7b 35 20 7b 7b 78 20 35  2009}}} {5 {{x 5
6b80: 7d 20 7b 79 32 20 31 32 3a 30 30 7d 7d 7d 20 7b  } {y2 12:00}}} {
6b90: 36 20 7b 7b 78 20 36 7d 20 7b 79 32 5c 0d 0a 7b  6 {{x 6} {y2\..{
6ba0: 31 32 2f 31 36 2f 32 30 30 39 20 31 32 3a 30 30  12/16/2009 12:00
6bb0: 7d 7d 7d 7d 20 7b 37 20 7b 7b 78 20 37 7d 20 7b  }}}} {7 {{x 7} {
6bc0: 79 32 20 32 30 30 39 2d 31 32 2d 31 36 54 30 30  y2 2009-12-16T00
6bd0: 3a 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d  :00:00.0000000Z}
6be0: 7d 7d 20 7b 38 20 7b 7b 78 20 38 7d 5c 0d 0a 7b  }} {8 {{x 8}\..{
6bf0: 79 32 20 24 7b 64 61 74 65 7d 54 31 32 3a 30 30  y2 ${date}T12:00
6c00: 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20  :00.0000000Z}}} 
6c10: 7b 39 20 7b 7b 78 20 39 7d 20 7b 79 32 20 32 30  {9 {{x 9} {y2 20
6c20: 30 39 2d 31 32 2d 31 36 54 31 32 3a 30 30 3a 30  09-12-16T12:00:0
6c30: 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 5c 0d 0a  0.0000000Z}}}\..
6c40: 7b 31 30 20 7b 7b 78 20 31 30 7d 20 7b 79 32 20  {10 {{x 10} {y2 
6c50: 32 30 30 39 2d 31 32 2d 31 36 54 30 30 3a 30 30  2009-12-16T00:00
6c60: 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20  :00.0000000Z}}} 
6c70: 7b 31 31 20 7b 7b 78 20 31 31 7d 20 7b 79 32 5c  {11 {{x 11} {y2\
6c80: 0d 0a 24 7b 64 61 74 65 7d 54 31 32 3a 30 30 3a  ..${date}T12:00:
6c90: 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b  00.0000000Z}}} {
6ca0: 31 32 20 7b 7b 78 20 31 32 7d 20 7b 79 32 20 32  12 {{x 12} {y2 2
6cb0: 30 30 39 2d 31 32 2d 31 36 54 31 32 3a 30 30 3a  009-12-16T12:00:
6cc0: 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 7d 5d  00.0000000Z}}}}]
6cd0: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
6ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d20: 23 23 23 23 0d 0a 0d 0a 75 6e 73 65 74 20 2d 6e  ####....unset -n
6d30: 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 65 0d 0a  ocomplain date..
6d40: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
6d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6d90: 23 0d 0a 0d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f  #....unset -noco
6da0: 6d 70 6c 61 69 6e 20 74 65 73 74 45 78 65 46 69  mplain testExeFi
6db0: 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69  le testLinqExeFi
6dc0: 6c 65 20 6e 6f 72 74 68 77 69 6e 64 45 66 44 62  le northwindEfDb
6dd0: 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 4f 75 74  File testLinqOut
6de0: 46 69 6c 65 0d 0a 0d 0a 23 23 23 23 23 23 23 23  File....########
6df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6e30: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51  #######....runSQ
6e40: 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65  LiteTestEpilogue
6e50: 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75  ..runTestEpilogu
6e60: 65 0d 0a                                         e..