System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 33d5126054d943654ec36c536999a46761a99617:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 62 61 73 69 63 2e 65 61 67 6c  .#..# basic.eagl
0060: 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74 74  e --..#..# Writt
0070: 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61 63  en by Joe Mistac
0080: 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73 65  hkin...# Release
0090: 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20  d to the public 
00a0: 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20 79  domain, use at y
00b0: 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 23  our own risk!..#
00c0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 0d 0a 0d 0a 70 61 63 6b 61 67 65 20 72 65 71  #....package req
0120: 75 69 72 65 20 45 61 67 6c 65 0d 0a 70 61 63 6b  uire Eagle..pack
0130: 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
0140: 65 2e 4c 69 62 72 61 72 79 0d 0a 70 61 63 6b 61  e.Library..packa
0150: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
0160: 2e 54 65 73 74 0d 0a 0d 0a 72 75 6e 54 65 73 74  .Test....runTest
0170: 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23  Prologue....####
0180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70  ###########....p
01d0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 53  ackage require S
01e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
01f0: 65 2e 54 65 73 74 0d 0a 72 75 6e 53 51 4c 69 74  e.Test..runSQLit
0200: 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d  eTestPrologue...
0210: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20 53  ....#..# NOTE: S
0270: 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c  etup the variabl
0280: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
0290: 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f 6e   the various non
02a0: 2d 64 61 74 61 20 66 69 6c 65 73 20 72 65 71 75  -data files requ
02b0: 69 72 65 64 0d 0a 23 20 20 20 20 20 20 20 62 79  ired..#       by
02c0: 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68   the tests in th
02d0: 69 73 20 66 69 6c 65 2e 0d 0a 23 0d 0a 73 65 74  is file...#..set
02e0: 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b   entityFramework
02f0: 44 6c 6c 46 69 6c 65 20 5b 67 65 74 42 75 69 6c  DllFile [getBuil
0300: 64 46 69 6c 65 4e 61 6d 65 20 45 6e 74 69 74 79  dFileName Entity
0310: 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 0d 0a  Framework.dll]..
0320: 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51  set systemDataSQ
0330: 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5b 67 65 74  LiteDllFile [get
0340: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79  BuildFileName Sy
0350: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
0360: 2e 64 6c 6c 5d 0d 0a 73 65 74 20 73 79 73 74 65  .dll]..set syste
0370: 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44  mDataSQLiteLinqD
0380: 6c 6c 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64  llFile [getBuild
0390: 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e  FileName System.
03a0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
03b0: 2e 64 6c 6c 5d 0d 0a 73 65 74 20 73 79 73 74 65  .dll]..set syste
03c0: 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c  mDataSQLiteEf6Dl
03d0: 6c 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46  lFile [getBuildF
03e0: 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44  ileName System.D
03f0: 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64  ata.SQLite.EF6.d
0400: 6c 6c 5d 0d 0a 73 65 74 20 74 65 73 74 45 78 65  ll]..set testExe
0410: 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69  File [getBuildFi
0420: 6c 65 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 5d  leName test.exe]
0430: 0d 0a 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78  ..set testLinqEx
0440: 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46  eFile [getBuildF
0450: 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71  ileName testlinq
0460: 2e 65 78 65 5d 0d 0a 73 65 74 20 74 65 73 74 45  .exe]..set testE
0470: 66 36 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75  f6ExeFile [getBu
0480: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74  ildFileName test
0490: 65 66 36 2e 65 78 65 5d 0d 0a 0d 0a 23 0d 0a 23  ef6.exe]....#..#
04a0: 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65   NOTE: Setup the
04b0: 20 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20   variables that 
04c0: 72 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72  refer to the var
04d0: 69 6f 75 73 20 64 61 74 61 20 66 69 6c 65 73 20  ious data files 
04e0: 72 65 71 75 69 72 65 64 20 62 79 0d 0a 23 20 20  required by..#  
04f0: 20 20 20 20 20 74 68 65 20 74 65 73 74 73 20 69       the tests i
0500: 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 23 0d  n this file...#.
0510: 0a 73 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 74  .set testLinqOut
0520: 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
0530: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
0540: 20 5c 0d 0a 20 20 20 20 5b 67 65 74 53 51 4c 69   \..    [getSQLi
0550: 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath] 
0560: 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a  testlinq.out]]..
0570: 0d 0a 73 65 74 20 6e 6f 72 74 68 77 69 6e 64 45  ..set northwindE
0580: 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  fDbFile [file na
0590: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
05a0: 6f 69 6e 20 5c 0d 0a 20 20 20 20 5b 66 69 6c 65  oin \..    [file
05b0: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64   dirname [file d
05c0: 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74  irname [getSQLit
05d0: 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d  eTestDataPath]]]
05e0: 20 74 65 73 74 6c 69 6e 71 20 5c 0d 0a 20 20 20   testlinq \..   
05f0: 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d   northwindEF.db]
0600: 5d 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20  ]....#..# NOTE: 
0610: 53 65 74 75 70 20 74 68 65 20 74 65 73 74 20 63  Setup the test c
0620: 6f 6e 73 74 72 61 69 6e 74 73 20 73 70 65 63 69  onstraints speci
0630: 66 69 63 20 74 6f 20 74 68 65 20 74 65 73 74 73  fic to the tests
0640: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a   in this file...
0650: 23 0d 0a 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e  #..if {![haveCon
0660: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
0670: 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..   
0680: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e 74   [file tail $ent
0690: 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46  ityFrameworkDllF
06a0: 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
06b0: 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $
06c0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e  test_channel $en
06d0: 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c  tityFrameworkDll
06e0: 46 69 6c 65 0d 0a 7d 0d 0a 0d 0a 69 66 20 7b 21  File..}....if {!
06f0: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint 
0700: 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
0710: 5f 20 5c 0d 0a 20 20 20 20 5b 66 69 6c 65 20 74  _ \..    [file t
0720: 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  ail $systemDataS
0730: 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  QLiteDllFile]]]}
0740: 20 74 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63 6b   then {..  check
0750: 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch
0760: 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74  annel $systemDat
0770: 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a  aSQLiteDllFile..
0780: 7d 0d 0a 0d 0a 69 66 20 7b 21 5b 68 61 76 65 43  }....if {![haveC
0790: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
07a0: 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \.. 
07b0: 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73     [file tail $s
07c0: 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c  ystemDataSQLiteL
07d0: 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74  inqDllFile]]]} t
07e0: 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63 6b 46 6f  hen {..  checkFo
07f0: 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan
0800: 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  nel $systemDataS
0810: 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65  QLiteLinqDllFile
0820: 0d 0a 7d 0d 0a 0d 0a 69 66 20 7b 21 5b 68 61 76  ..}....if {![hav
0830: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
0840: 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
0850: 0a 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20  .    [file tail 
0860: 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  $systemDataSQLit
0870: 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20  eEf6DllFile]]]} 
0880: 74 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63 6b 46  then {..  checkF
0890: 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha
08a0: 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61  nnel $systemData
08b0: 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65  SQLiteEf6DllFile
08c0: 0d 0a 7d 0d 0a 0d 0a 69 66 20 7b 21 5b 68 61 76  ..}....if {![hav
08d0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
08e0: 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66  endArgs file_ [f
08f0: 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78  ile tail $testEx
0900: 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  eFile]]]} then {
0910: 0d 0a 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65  ..  checkForFile
0920: 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel $
0930: 74 65 73 74 45 78 65 46 69 6c 65 20 74 65 73 74  testExeFile test
0940: 2e 65 78 65 0d 0a 7d 0d 0a 0d 0a 69 66 20 7b 21  .exe..}....if {!
0950: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint 
0960: 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
0970: 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65  _ [file tail $te
0980: 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d  stLinqExeFile]]]
0990: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63  } then {..  chec
09a0: 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c
09b0: 68 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71  hannel $testLinq
09c0: 45 78 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71  ExeFile testlinq
09d0: 2e 65 78 65 0d 0a 7d 0d 0a 0d 0a 69 66 20 7b 21  .exe..}....if {!
09e0: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint 
09f0: 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
0a00: 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65  _ [file tail $te
0a10: 73 74 45 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d  stEf6ExeFile]]]}
0a20: 20 74 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63 6b   then {..  check
0a30: 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch
0a40: 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45 78  annel $testEf6Ex
0a50: 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65 78  eFile testef6.ex
0a60: 65 0d 0a 7d 0d 0a 0d 0a 69 66 20 7b 21 5b 68 61  e..}....if {![ha
0a70: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
0a80: 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5b  pendArgs file_ [
0a90: 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68  file tail $north
0aa0: 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d  windEfDbFile]]]}
0ab0: 20 74 68 65 6e 20 7b 0d 0a 20 20 63 68 65 63 6b   then {..  check
0ac0: 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch
0ad0: 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 6e 64  annel $northwind
0ae0: 45 66 44 62 46 69 6c 65 0d 0a 7d 0d 0a 0d 0a 69  EfDbFile..}....i
0af0: 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
0b00: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs 
0b10: 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c  file_ [file tail
0b20: 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c   $testLinqOutFil
0b30: 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..  
0b40: 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te
0b50: 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test
0b60: 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 7d 0d 0a  LinqOutFile..}..
0b70: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
0b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0bc0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
0bd0: 73 74 20 64 61 74 61 2d 31 2e 31 20 7b 75 6e 69  st data-1.1 {uni
0be0: 74 20 74 65 73 74 73 20 66 72 6f 6d 20 74 68 65  t tests from the
0bf0: 20 27 74 65 73 74 27 20 70 72 6f 6a 65 63 74 7d   'test' project}
0c00: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 63 6c 65   -setup {..  cle
0c10: 61 6e 75 70 46 69 6c 65 20 5b 66 69 6c 65 20 6a  anupFile [file j
0c20: 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  oin [file dirnam
0c30: 65 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d 20  e $testExeFile] 
0c40: 54 65 73 74 2e 64 62 33 5d 0d 0a 20 20 73 65 74  Test.db3]..  set
0c50: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file 
0c60: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
0c70: 65 44 69 72 65 63 74 6f 72 79 5d 20 64 61 74 61  eDirectory] data
0c80: 2d 31 2e 31 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64  -1.1.db]..} -bod
0c90: 79 20 7b 0d 0a 20 20 73 65 74 20 6f 75 74 70 75  y {..  set outpu
0ca0: 74 20 22 22 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  t ""....  set co
0cb0: 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  de [catch {..   
0cc0: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE: 
0cd0: 46 6f 72 20 74 68 65 20 73 61 6b 65 20 6f 66 20  For the sake of 
0ce0: 62 61 63 6b 77 61 72 64 20 63 6f 6d 70 61 74 69  backward compati
0cf0: 62 69 6c 69 74 79 2c 20 74 68 65 20 22 2d 61 75  bility, the "-au
0d00: 74 6f 52 75 6e 22 20 61 72 67 75 6d 65 6e 74 0d  toRun" argument.
0d10: 0a 20 20 20 20 23 20 20 20 20 20 20 20 6d 75 73  .    #       mus
0d20: 74 20 62 65 20 66 69 72 73 74 2e 0d 0a 20 20 20  t be first...   
0d30: 20 23 0d 0a 20 20 20 20 74 65 73 74 43 6c 72 45   #..    testClrE
0d40: 78 65 63 20 24 74 65 73 74 45 78 65 46 69 6c 65  xec $testExeFile
0d50: 20 5b 6c 69 73 74 20 2d 65 76 65 6e 74 66 6c 61   [list -eventfla
0d60: 67 73 20 57 61 69 74 20 2d 64 69 72 65 63 74 6f  gs Wait -directo
0d70: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 66  ry \..        [f
0d80: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 65 73  ile dirname $tes
0d90: 74 45 78 65 46 69 6c 65 5d 20 2d 73 74 64 6f 75  tExeFile] -stdou
0da0: 74 20 6f 75 74 70 75 74 20 2d 73 75 63 63 65 73  t output -succes
0db0: 73 20 30 5d 20 2d 61 75 74 6f 52 75 6e 20 5c 0d  s 0] -autoRun \.
0dc0: 0a 20 20 20 20 20 20 20 20 2d 66 69 6c 65 4e 61  .        -fileNa
0dd0: 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  me [appendArgs \
0de0: 22 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  " [file nativena
0df0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5c 22  me $fileName] \"
0e00: 5d 0d 0a 20 20 7d 20 65 72 72 6f 72 5d 0d 0a 0d  ]..  } error]...
0e10: 0a 20 20 73 65 74 20 73 75 63 63 65 73 73 43 6f  .  set successCo
0e20: 75 6e 74 20 5b 72 65 67 65 78 70 20 2d 61 6c 6c  unt [regexp -all
0e30: 20 2d 2d 20 7b 5c 74 53 75 63 63 65 65 64 65 64   -- {\tSucceeded
0e40: 5c 74 7d 20 24 6f 75 74 70 75 74 5d 0d 0a 20 20  \t} $output]..  
0e50: 73 65 74 20 66 61 69 6c 75 72 65 43 6f 75 6e 74  set failureCount
0e60: 20 5b 72 65 67 65 78 70 20 2d 61 6c 6c 20 2d 2d   [regexp -all --
0e70: 20 7b 5c 74 46 61 69 6c 65 64 5c 74 7d 20 24 6f   {\tFailed\t} $o
0e80: 75 74 70 75 74 5d 0d 0a 20 20 73 65 74 20 74 6f  utput]..  set to
0e90: 74 61 6c 43 6f 75 6e 74 20 5b 65 78 70 72 20 7b  talCount [expr {
0ea0: 24 73 75 63 63 65 73 73 43 6f 75 6e 74 20 2b 20  $successCount + 
0eb0: 24 66 61 69 6c 75 72 65 43 6f 75 6e 74 7d 5d 0d  $failureCount}].
0ec0: 0a 0d 0a 20 20 74 70 75 74 73 20 24 74 65 73 74  ...  tputs $test
0ed0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
0ee0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 2d  Args \..      "-
0ef0: 2d 2d 2d 20 66 6f 75 6e 64 20 61 6e 64 20 65 78  --- found and ex
0f00: 65 63 75 74 65 64 20 22 20 24 74 6f 74 61 6c 43  ecuted " $totalC
0f10: 6f 75 6e 74 20 22 20 75 6e 69 74 20 74 65 73 74  ount " unit test
0f20: 73 20 66 72 6f 6d 20 5c 22 22 20 5c 0d 0a 20 20  s from \"" \..  
0f30: 20 20 20 20 24 74 65 73 74 45 78 65 46 69 6c 65      $testExeFile
0f40: 20 22 5c 22 2c 20 22 20 24 73 75 63 63 65 73 73   "\", " $success
0f50: 43 6f 75 6e 74 20 22 20 70 61 73 73 65 64 2c 20  Count " passed, 
0f60: 22 20 24 66 61 69 6c 75 72 65 43 6f 75 6e 74 20  " $failureCount 
0f70: 5c 0d 0a 20 20 20 20 20 20 22 20 66 61 69 6c 65  \..      " faile
0f80: 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 74 6c 6f 67 20  d\n"]....  tlog 
0f90: 22 2d 2d 2d 2d 20 42 45 47 49 4e 20 53 54 44 4f  "---- BEGIN STDO
0fa0: 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 20 20  UT OUTPUT\n"..  
0fb0: 74 6c 6f 67 20 24 6f 75 74 70 75 74 0d 0a 20 20  tlog $output..  
0fc0: 74 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d 20 45 4e 44  tlog "\n---- END
0fd0: 20 53 54 44 4f 55 54 20 4f 55 54 50 55 54 5c 6e   STDOUT OUTPUT\n
0fe0: 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  "....  list $cod
0ff0: 65 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 3d  e [expr {$code =
1000: 3d 20 30 20 3f 20 22 22 20 3a 20 24 65 72 72 6f  = 0 ? "" : $erro
1010: 72 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  r}]..} -cleanup 
1020: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 46 69 6c 65  {..  cleanupFile
1030: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
1040: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1050: 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 20 66 61 69  n totalCount fai
1060: 6c 75 72 65 43 6f 75 6e 74 20 73 75 63 63 65 73  lureCount succes
1070: 73 43 6f 75 6e 74 20 63 6f 64 65 20 6f 75 74 70  sCount code outp
1080: 75 74 20 5c 0d 0a 20 20 20 20 20 20 65 72 72 6f  ut \..      erro
1090: 72 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  r fileName..} -c
10a0: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
10b0: 65 20 53 51 4c 69 74 65 20 66 69 6c 65 5f 53 79  e SQLite file_Sy
10c0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
10d0: 2e 64 6c 6c 20 66 69 6c 65 5f 74 65 73 74 2e 65  .dll file_test.e
10e0: 78 65 5c 0d 0a 74 65 73 74 45 78 65 63 7d 20 2d  xe\..testExec} -
10f0: 72 65 73 75 6c 74 20 7b 30 20 7b 7d 7d 7d 0d 0a  result {0 {}}}..
1100: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
1110: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1150: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
1160: 73 74 20 64 61 74 61 2d 31 2e 32 20 7b 75 6e 69  st data-1.2 {uni
1170: 74 20 74 65 73 74 73 20 66 72 6f 6d 20 74 68 65  t tests from the
1180: 20 27 74 65 73 74 6c 69 6e 71 27 20 70 72 6f 6a   'testlinq' proj
1190: 65 63 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ect} -setup {.. 
11a0: 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 52 65   #..  # NOTE: Re
11b0: 2d 63 6f 70 79 20 74 68 65 20 72 65 66 65 72 65  -copy the refere
11c0: 6e 63 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  nce database fil
11d0: 65 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  e used for this 
11e0: 75 6e 69 74 20 74 65 73 74 20 74 6f 20 74 68 65  unit test to the
11f0: 0d 0a 20 20 23 20 20 20 20 20 20 20 62 75 69 6c  ..  #       buil
1200: 64 20 64 69 72 65 63 74 6f 72 79 20 69 6e 20 63  d directory in c
1210: 61 73 65 20 69 74 20 68 61 73 20 62 65 65 6e 20  ase it has been 
1220: 63 68 61 6e 67 65 64 20 62 79 20 61 20 70 72 65  changed by a pre
1230: 76 69 6f 75 73 20 74 65 73 74 20 72 75 6e 2e 0d  vious test run..
1240: 0a 20 20 23 0d 0a 20 20 66 69 6c 65 20 63 6f 70  .  #..  file cop
1250: 79 20 2d 66 6f 72 63 65 20 24 6e 6f 72 74 68 77  y -force $northw
1260: 69 6e 64 45 66 44 62 46 69 6c 65 20 5c 0d 0a 20  indEfDbFile \.. 
1270: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join 
1280: 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f  [getBuildDirecto
1290: 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ry] [file tail $
12a0: 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c  northwindEfDbFil
12b0: 65 5d 5d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20  e]]....  #..  # 
12c0: 4e 4f 54 45 3a 20 57 65 20 6e 65 65 64 20 74 6f  NOTE: We need to
12d0: 20 6d 61 6b 65 20 31 30 30 25 20 73 75 72 65 20   make 100% sure 
12e0: 74 68 61 74 20 74 68 65 20 63 6f 6e 73 6f 6c 65  that the console
12f0: 20 6f 75 74 70 75 74 20 65 6e 63 6f 64 69 6e 67   output encoding
1300: 20 69 73 20 74 68 65 0d 0a 20 20 23 20 20 20 20   is the..  #    
1310: 20 20 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20     same as when 
1320: 74 68 65 20 27 74 65 73 74 6c 69 6e 71 2e 6f 75  the 'testlinq.ou
1330: 74 27 20 66 69 6c 65 20 77 61 73 20 63 72 65 61  t' file was crea
1340: 74 65 64 2e 0d 0a 20 20 23 0d 0a 20 20 73 65 74  ted...  #..  set
1350: 20 73 61 76 65 64 45 6e 63 6f 64 69 6e 67 20 5b   savedEncoding [
1360: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f  object invoke Co
1370: 6e 73 6f 6c 65 20 4f 75 74 70 75 74 45 6e 63 6f  nsole OutputEnco
1380: 64 69 6e 67 5d 0d 0a 20 20 73 65 74 20 65 6e 63  ding]..  set enc
1390: 6f 64 69 6e 67 20 5b 6f 62 6a 65 63 74 20 69 6e  oding [object in
13a0: 76 6f 6b 65 20 53 79 73 74 65 6d 2e 54 65 78 74  voke System.Text
13b0: 2e 45 6e 63 6f 64 69 6e 67 20 47 65 74 45 6e 63  .Encoding GetEnc
13c0: 6f 64 69 6e 67 20 57 69 6e 64 6f 77 73 2d 31 32  oding Windows-12
13d0: 35 32 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20  52]....  object 
13e0: 69 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65 20 4f  invoke Console O
13f0: 75 74 70 75 74 45 6e 63 6f 64 69 6e 67 20 24 65  utputEncoding $e
1400: 6e 63 6f 64 69 6e 67 0d 0a 7d 20 2d 62 6f 64 79  ncoding..} -body
1410: 20 7b 0d 0a 20 20 73 65 74 20 6f 75 74 70 75 74   {..  set output
1420: 20 22 22 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64   ""....  set cod
1430: 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  e [catch {..    
1440: 74 65 73 74 43 6c 72 45 78 65 63 20 24 74 65 73  testClrExec $tes
1450: 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 6c 69  tLinqExeFile [li
1460: 73 74 20 2d 65 76 65 6e 74 66 6c 61 67 73 20 57  st -eventflags W
1470: 61 69 74 20 2d 64 69 72 65 63 74 6f 72 79 20 5c  ait -directory \
1480: 0d 0a 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20  ..        [file 
1490: 64 69 72 6e 61 6d 65 20 24 74 65 73 74 4c 69 6e  dirname $testLin
14a0: 71 45 78 65 46 69 6c 65 5d 20 2d 73 74 64 6f 75  qExeFile] -stdou
14b0: 74 20 6f 75 74 70 75 74 20 2d 73 75 63 63 65 73  t output -succes
14c0: 73 20 30 5d 0d 0a 20 20 7d 20 65 72 72 6f 72 5d  s 0]..  } error]
14d0: 0d 0a 0d 0a 20 20 74 6c 6f 67 20 22 2d 2d 2d 2d  ....  tlog "----
14e0: 20 42 45 47 49 4e 20 53 54 44 4f 55 54 20 4f 55   BEGIN STDOUT OU
14f0: 54 50 55 54 5c 6e 22 0d 0a 20 20 74 6c 6f 67 20  TPUT\n"..  tlog 
1500: 24 6f 75 74 70 75 74 0d 0a 20 20 74 6c 6f 67 20  $output..  tlog 
1510: 22 5c 6e 2d 2d 2d 2d 20 45 4e 44 20 53 54 44 4f  "\n---- END STDO
1520: 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d 0a 0d 0a  UT OUTPUT\n"....
1530: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 5b 73 74    list $code [st
1540: 72 69 6e 67 20 65 71 75 61 6c 20 24 6f 75 74 70  ring equal $outp
1550: 75 74 20 5b 72 65 61 64 46 69 6c 65 20 24 74 65  ut [readFile $te
1560: 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d 20  stLinqOutFile]] 
1570: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
1580: 24 63 6f 64 65 20 3d 3d 20 30 20 3f 20 22 22 20  $code == 0 ? "" 
1590: 3a 20 24 65 72 72 6f 72 7d 5d 0d 0a 7d 20 2d 63  : $error}]..} -c
15a0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74 63  leanup {..  catc
15b0: 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
15c0: 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75 74 45   Console OutputE
15d0: 6e 63 6f 64 69 6e 67 20 24 73 61 76 65 64 45 6e  ncoding $savedEn
15e0: 63 6f 64 69 6e 67 7d 0d 0a 0d 0a 20 20 75 6e 73  coding}....  uns
15f0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63  et -nocomplain c
1600: 6f 64 65 20 6f 75 74 70 75 74 20 65 72 72 6f 72  ode output error
1610: 20 73 61 76 65 64 45 6e 63 6f 64 69 6e 67 20 65   savedEncoding e
1620: 6e 63 6f 64 69 6e 67 0d 0a 7d 20 2d 63 6f 6e 73  ncoding..} -cons
1630: 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c  traints \..{eagl
1640: 65 20 6d 6f 6e 6f 54 6f 44 6f 20 53 51 4c 69 74  e monoToDo SQLit
1650: 65 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61  e file_System.Da
1660: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 0d 0a  ta.SQLite.dll\..
1670: 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74 61  file_System.Data
1680: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
1690: 20 66 69 6c 65 5f 74 65 73 74 6c 69 6e 71 2e 65   file_testlinq.e
16a0: 78 65 20 66 69 6c 65 5f 6e 6f 72 74 68 77 69 6e  xe file_northwin
16b0: 64 45 46 2e 64 62 5c 0d 0a 66 69 6c 65 5f 74 65  dEF.db\..file_te
16c0: 73 74 6c 69 6e 71 2e 6f 75 74 20 74 65 73 74 45  stlinq.out testE
16d0: 78 65 63 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20  xec} -result {0 
16e0: 54 72 75 65 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23  True {}}}....###
16f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1730: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1740: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
1750: 74 61 2d 31 2e 33 20 7b 75 6e 69 74 20 74 65 73  ta-1.3 {unit tes
1760: 74 73 20 66 72 6f 6d 20 74 68 65 20 27 74 65 73  ts from the 'tes
1770: 74 65 66 36 27 20 70 72 6f 6a 65 63 74 7d 20 2d  tef6' project} -
1780: 73 65 74 75 70 20 7b 0d 0a 20 20 23 0d 0a 20 20  setup {..  #..  
1790: 23 20 4e 4f 54 45 3a 20 52 65 2d 63 6f 70 79 20  # NOTE: Re-copy 
17a0: 74 68 65 20 72 65 66 65 72 65 6e 63 65 20 64 61  the reference da
17b0: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
17c0: 20 66 6f 72 20 74 68 69 73 20 75 6e 69 74 20 74   for this unit t
17d0: 65 73 74 20 74 6f 20 74 68 65 0d 0a 20 20 23 20  est to the..  # 
17e0: 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65        build dire
17f0: 63 74 6f 72 79 20 69 6e 20 63 61 73 65 20 69 74  ctory in case it
1800: 20 68 61 73 20 62 65 65 6e 20 63 68 61 6e 67 65   has been change
1810: 64 20 62 79 20 61 20 70 72 65 76 69 6f 75 73 20  d by a previous 
1820: 74 65 73 74 20 72 75 6e 2e 0d 0a 20 20 23 0d 0a  test run...  #..
1830: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72    file copy -for
1840: 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44  ce $northwindEfD
1850: 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 5b  bFile \..      [
1860: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75  file join [getBu
1870: 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  ildDirectory] [f
1880: 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77  ile tail $northw
1890: 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a 0d  indEfDbFile]]...
18a0: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
18b0: 57 65 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20  We need to make 
18c0: 31 30 30 25 20 73 75 72 65 20 74 68 61 74 20 74  100% sure that t
18d0: 68 65 20 63 6f 6e 73 6f 6c 65 20 6f 75 74 70 75  he console outpu
18e0: 74 20 65 6e 63 6f 64 69 6e 67 20 69 73 20 74 68  t encoding is th
18f0: 65 0d 0a 20 20 23 20 20 20 20 20 20 20 73 61 6d  e..  #       sam
1900: 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 27 74  e as when the 't
1910: 65 73 74 6c 69 6e 71 2e 6f 75 74 27 20 66 69 6c  estlinq.out' fil
1920: 65 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d 0a  e was created...
1930: 20 20 23 0d 0a 20 20 73 65 74 20 73 61 76 65 64    #..  set saved
1940: 45 6e 63 6f 64 69 6e 67 20 5b 6f 62 6a 65 63 74  Encoding [object
1950: 20 69 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65 20   invoke Console 
1960: 4f 75 74 70 75 74 45 6e 63 6f 64 69 6e 67 5d 0d  OutputEncoding].
1970: 0a 20 20 73 65 74 20 65 6e 63 6f 64 69 6e 67 20  .  set encoding 
1980: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53  [object invoke S
1990: 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
19a0: 69 6e 67 20 47 65 74 45 6e 63 6f 64 69 6e 67 20  ing GetEncoding 
19b0: 57 69 6e 64 6f 77 73 2d 31 32 35 32 5d 0d 0a 0d  Windows-1252]...
19c0: 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  .  object invoke
19d0: 20 43 6f 6e 73 6f 6c 65 20 4f 75 74 70 75 74 45   Console OutputE
19e0: 6e 63 6f 64 69 6e 67 20 24 65 6e 63 6f 64 69 6e  ncoding $encodin
19f0: 67 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  g..} -body {..  
1a00: 73 65 74 20 6f 75 74 70 75 74 20 22 22 0d 0a 0d  set output ""...
1a10: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74  .  set code [cat
1a20: 63 68 20 7b 0d 0a 20 20 20 20 74 65 73 74 43 6c  ch {..    testCl
1a30: 72 45 78 65 63 20 24 74 65 73 74 45 66 36 45 78  rExec $testEf6Ex
1a40: 65 46 69 6c 65 20 5b 6c 69 73 74 20 2d 65 76 65  eFile [list -eve
1a50: 6e 74 66 6c 61 67 73 20 57 61 69 74 20 2d 64 69  ntflags Wait -di
1a60: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..     
1a70: 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65     [file dirname
1a80: 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c 65   $testEf6ExeFile
1a90: 5d 20 2d 73 74 64 6f 75 74 20 6f 75 74 70 75 74  ] -stdout output
1aa0: 20 2d 73 75 63 63 65 73 73 20 30 5d 0d 0a 20 20   -success 0]..  
1ab0: 7d 20 65 72 72 6f 72 5d 0d 0a 0d 0a 20 20 74 6c  } error]....  tl
1ac0: 6f 67 20 22 2d 2d 2d 2d 20 42 45 47 49 4e 20 53  og "---- BEGIN S
1ad0: 54 44 4f 55 54 20 4f 55 54 50 55 54 5c 6e 22 0d  TDOUT OUTPUT\n".
1ae0: 0a 20 20 74 6c 6f 67 20 24 6f 75 74 70 75 74 0d  .  tlog $output.
1af0: 0a 20 20 74 6c 6f 67 20 22 5c 6e 2d 2d 2d 2d 20  .  tlog "\n---- 
1b00: 45 4e 44 20 53 54 44 4f 55 54 20 4f 55 54 50 55  END STDOUT OUTPU
1b10: 54 5c 6e 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  T\n"....  list $
1b20: 63 6f 64 65 20 5b 73 74 72 69 6e 67 20 65 71 75  code [string equ
1b30: 61 6c 20 24 6f 75 74 70 75 74 20 5b 72 65 61 64  al $output [read
1b40: 46 69 6c 65 20 24 74 65 73 74 4c 69 6e 71 4f 75  File $testLinqOu
1b50: 74 46 69 6c 65 5d 5d 20 5c 0d 0a 20 20 20 20 20  tFile]] \..     
1b60: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 3d 3d   [expr {$code ==
1b70: 20 30 20 3f 20 22 22 20 3a 20 24 65 72 72 6f 72   0 ? "" : $error
1b80: 7d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  }]..} -cleanup {
1b90: 0d 0a 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63  ..  catch {objec
1ba0: 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 73 6f 6c 65  t invoke Console
1bb0: 20 4f 75 74 70 75 74 45 6e 63 6f 64 69 6e 67 20   OutputEncoding 
1bc0: 24 73 61 76 65 64 45 6e 63 6f 64 69 6e 67 7d 0d  $savedEncoding}.
1bd0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
1be0: 6d 70 6c 61 69 6e 20 63 6f 64 65 20 6f 75 74 70  mplain code outp
1bf0: 75 74 20 65 72 72 6f 72 20 73 61 76 65 64 45 6e  ut error savedEn
1c00: 63 6f 64 69 6e 67 20 65 6e 63 6f 64 69 6e 67 0d  coding encoding.
1c10: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
1c20: 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 54 6f  \..{eagle monoTo
1c30: 44 6f 20 53 51 4c 69 74 65 20 66 69 6c 65 5f 45  Do SQLite file_E
1c40: 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64  ntityFramework.d
1c50: 6c 6c 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44  ll file_System.D
1c60: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 0d  ata.SQLite.dll\.
1c70: 0a 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74  .file_System.Dat
1c80: 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
1c90: 20 66 69 6c 65 5f 74 65 73 74 65 66 36 2e 65 78   file_testef6.ex
1ca0: 65 20 66 69 6c 65 5f 6e 6f 72 74 68 77 69 6e 64  e file_northwind
1cb0: 45 46 2e 64 62 5c 0d 0a 66 69 6c 65 5f 74 65 73  EF.db\..file_tes
1cc0: 74 6c 69 6e 71 2e 6f 75 74 20 74 65 73 74 45 78  tlinq.out testEx
1cd0: 65 63 7d 20 2d 72 65 73 75 6c 74 20 7b 30 20 54  ec} -result {0 T
1ce0: 72 75 65 20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23  rue {}}}....####
1cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1d30: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
1d40: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
1d50: 61 2d 31 2e 34 20 7b 53 45 4c 45 43 54 20 73 63  a-1.4 {SELECT sc
1d60: 61 6c 61 72 2f 72 65 61 64 65 72 2c 20 43 52 45  alar/reader, CRE
1d70: 41 54 45 2c 20 49 4e 53 45 52 54 7d 20 2d 73 65  ATE, INSERT} -se
1d80: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
1d90: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
1da0: 61 74 61 2d 31 2e 34 2e 64 62 5d 0d 0a 7d 20 2d  ata-1.4.db]..} -
1db0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65  body {..  set re
1dc0: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
1dd0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
1de0: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
1df0: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
1e00: 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43   \..      "SELEC
1e10: 54 20 73 71 6c 69 74 65 5f 73 6f 75 72 63 65 5f  T sqlite_source_
1e20: 69 64 28 29 3b 22 5d 0d 0a 0d 0a 20 20 73 71 6c  id();"]....  sql
1e30: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52   execute $db "CR
1e40: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
1e50: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1e60: 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 22  KEY ASC, y, z);"
1e70: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
1e80: 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $db "INSERT INTO
1e90: 20 74 31 20 28 78 2c 20 79 2c 20 7a 29 20 56 41   t1 (x, y, z) VA
1ea0: 4c 55 45 53 28 31 2c 20 27 66 6f 6f 27 2c 20 31  LUES(1, 'foo', 1
1eb0: 32 33 34 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  234);"....  sql 
1ec0: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
1ed0: 20 72 65 61 64 65 72 20 24 64 62 20 22 53 45 4c   reader $db "SEL
1ee0: 45 43 54 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d  ECT x, y, z FROM
1ef0: 20 74 31 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65 61   t1;"....  forea
1f00: 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 5b  ch name [lsort [
1f10: 61 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77 73  array names rows
1f20: 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e  ]] {..    lappen
1f30: 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24  d result [list $
1f40: 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d 65  name $rows($name
1f50: 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  )]..  }....  set
1f60: 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
1f70: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
1f80: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
1f90: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
1fa0: 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65  ain name rows re
1fb0: 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
1fc0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
1fd0: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
1fe0: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
1ff0: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
2000: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
2010: 2e 53 51 4c 69 74 65 7d 20 5c 0d 0a 2d 6d 61 74  .SQLite} \..-mat
2020: 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c  ch regexp -resul
2030: 74 20 7b 5e 5c 7b 5c 64 7b 34 7d 2d 5c 64 7b 32  t {^\{\d{4}-\d{2
2040: 7d 2d 5c 64 7b 32 7d 20 5c 64 7b 32 7d 3a 5c 64  }-\d{2} \d{2}:\d
2050: 7b 32 7d 3a 5c 64 7b 32 7d 20 5b 30 2d 39 61 2d  {2}:\d{2} [0-9a-
2060: 66 5d 7b 34 30 7d 5c 7d 5c 0d 0a 5c 7b 31 20 5c  f]{40}\}\..\{1 \
2070: 7b 5c 7b 78 20 31 5c 7d 20 5c 7b 79 20 66 6f 6f  {\{x 1\} \{y foo
2080: 5c 7d 20 5c 7b 7a 20 31 32 33 34 5c 7d 5c 7d 5c  \} \{z 1234\}\}\
2090: 7d 20 5c 7b 63 6f 75 6e 74 20 31 5c 7d 20 5c 7b  } \{count 1\} \{
20a0: 6e 61 6d 65 73 20 5c 7b 78 20 79 20 7a 5c 7d 5c  names \{x y z\}\
20b0: 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
20c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2100: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
2110: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
2120: 35 20 7b 47 65 74 53 63 68 65 6d 61 20 77 69 74  5 {GetSchema wit
2130: 68 20 52 65 73 65 72 76 65 64 57 6f 72 64 73 7d  h ReservedWords}
2140: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
2150: 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
2160: 6d 65 20 64 61 74 61 2d 31 2e 35 2e 64 62 5d 0d  me data-1.5.db].
2170: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
2180: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
2190: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
21a0: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
21b0: 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75  ]..  set dataSou
21c0: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
21d0: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
21e0: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
21f0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
2200: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
2210: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
2220: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
2230: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
2240: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
2250: 65 6d 2e 44 61 74 61 3b 0d 0a 20 20 20 20 75 73  em.Data;..    us
2260: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
2270: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
2280: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
2290: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
22a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
22b0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
22c0: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
22d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
22e0: 69 63 20 44 61 74 61 54 61 62 6c 65 20 47 65 74  ic DataTable Get
22f0: 52 65 73 65 72 76 65 64 57 6f 72 64 73 28 29 0d  ReservedWords().
2300: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2310: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2320: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
2330: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
2340: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
2350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2360: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
2370: 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46  ataSource};[getF
2380: 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29  lagsProperty]"))
2390: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
23a0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
23b0: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d  ction.Open();...
23c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
23d0: 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 47  urn connection.G
23e0: 65 74 53 63 68 65 6d 61 28 22 52 65 73 65 72 76  etSchema("Reserv
23f0: 65 64 57 6f 72 64 73 22 29 3b 0d 0a 20 20 20 20  edWords");..    
2400: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2410: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2470: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
2480: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
2490: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24a0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
24b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
24c0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
24d0: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
24e0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
24f0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2500: 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74  e.dll]....  list
2510: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
2520: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
2530: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
2540: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
2550: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
2560: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
2570: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
2580: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
2590: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
25a0: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
25b0: 74 52 65 73 65 72 76 65 64 57 6f 72 64 73 0d 0a  tReservedWords..
25c0: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
25d0: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
25e0: 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d  ]}] $result..} -
25f0: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
2600: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
2610: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
2620: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 72  omplain result r
2630: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 63 6f  esults errors co
2640: 64 65 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  de dataSource id
2650: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
2660: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
2670: 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
2680: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
2690: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
26a0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
26b0: 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  te compileCSharp
26c0: 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
26d0: 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53  -result {^Ok\..S
26e0: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
26f0: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
2700: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
2710: 30 20 53 79 73 74 65 6d 23 44 61 74 61 23 44 61  0 System#Data#Da
2720: 74 61 54 61 62 6c 65 23 5c 64 2b 24 7d 7d 0d 0a  taTable#\d+$}}..
2730: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
2740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2760: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2770: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2780: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
2790: 73 74 20 64 61 74 61 2d 31 2e 36 20 7b 47 65 74  st data-1.6 {Get
27a0: 53 63 68 65 6d 61 20 77 69 74 68 20 46 6f 72 65  Schema with Fore
27b0: 69 67 6e 4b 65 79 73 7d 20 2d 73 65 74 75 70 20  ignKeys} -setup 
27c0: 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65  {..  setupDb [se
27d0: 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d  t fileName data-
27e0: 31 2e 36 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  1.6.db]..} -body
27f0: 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
2800: 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45  e $db {..    CRE
2810: 41 54 45 20 54 41 42 4c 45 20 74 31 28 0d 0a 20  ATE TABLE t1(.. 
2820: 20 20 20 20 20 78 20 49 4e 54 45 47 45 52 20 52       x INTEGER R
2830: 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54  EFERENCES t2 MAT
2840: 43 48 20 46 55 4c 4c 0d 0a 20 20 20 20 20 20 4f  CH FULL..      O
2850: 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46  N UPDATE SET DEF
2860: 41 55 4c 54 20 4f 4e 20 44 45 4c 45 54 45 20 43  AULT ON DELETE C
2870: 41 53 43 41 44 45 0d 0a 20 20 20 20 20 20 44 45  ASCADE..      DE
2880: 46 41 55 4c 54 20 31 0d 0a 20 20 20 20 29 3b 0d  FAULT 1..    );.
2890: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  .  }....  sql ex
28a0: 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41 54  ecute $db "CREAT
28b0: 45 20 54 41 42 4c 45 20 74 32 28 78 20 49 4e 54  E TABLE t2(x INT
28c0: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
28d0: 74 33 29 3b 22 0d 0a 0d 0a 20 20 73 65 74 20 69  t3);"....  set i
28e0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
28f0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
2900: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
2910: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
2920: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
2930: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
2940: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
2950: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
2960: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
2970: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
2980: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
2990: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
29a0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
29b0: 44 61 74 61 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Data;..    using
29c0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
29d0: 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  ite;....    name
29e0: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
29f0: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
2a00: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2a10: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
2a20: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2a30: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2a40: 44 61 74 61 52 6f 77 43 6f 6c 6c 65 63 74 69 6f  DataRowCollectio
2a50: 6e 20 47 65 74 46 6f 72 65 69 67 6e 4b 65 79 73  n GetForeignKeys
2a60: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
2a70: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2a80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2a90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
2aa0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
2ab0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2ac0: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
2ad0: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
2ae0: 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d  etFlagsProperty]
2af0: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
2b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
2b10: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
2b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b30: 72 65 74 75 72 6e 20 63 6f 6e 6e 65 63 74 69 6f  return connectio
2b40: 6e 2e 47 65 74 53 63 68 65 6d 61 28 22 46 6f 72  n.GetSchema("For
2b50: 65 69 67 6e 4b 65 79 73 22 29 2e 52 6f 77 73 3b  eignKeys").Rows;
2b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
2b70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2bd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2be0: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
2bf0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2c00: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
2c10: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
2c20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2c30: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65  ..  }] true true
2c40: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
2c50: 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
2c60: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
2c70: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
2c80: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
2c90: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
2ca0: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
2cb0: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
2cc0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
2cd0: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
2ce0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ch {..        se
2cf0: 74 20 72 6f 77 73 20 5b 6c 69 73 74 5d 0d 0a 20  t rows [list].. 
2d00: 20 20 20 20 20 20 20 73 65 74 20 66 6f 72 65 69         set forei
2d10: 67 6e 4b 65 79 73 20 5b 6f 62 6a 65 63 74 20 69  gnKeys [object i
2d20: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
2d30: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
2d40: 74 46 6f 72 65 69 67 6e 4b 65 79 73 5d 0d 0a 0d  tForeignKeys]...
2d50: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
2d60: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 66  foreach -alias f
2d70: 6f 72 65 69 67 6e 4b 65 79 20 24 66 6f 72 65 69  oreignKey $forei
2d80: 67 6e 4b 65 79 73 20 7b 0d 0a 20 20 20 20 20 20  gnKeys {..      
2d90: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73      lappend rows
2da0: 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..      
2db0: 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67          [$foreig
2dc0: 6e 4b 65 79 20 49 74 65 6d 20 43 4f 4e 53 54 52  nKey Item CONSTR
2dd0: 41 49 4e 54 5f 43 41 54 41 4c 4f 47 5d 20 5c 0d  AINT_CATALOG] \.
2de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2df0: 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d  $foreignKey Item
2e00: 20 43 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d 45   CONSTRAINT_NAME
2e10: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..           
2e20: 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20     [$foreignKey 
2e30: 49 74 65 6d 20 54 41 42 4c 45 5f 43 41 54 41 4c  Item TABLE_CATAL
2e40: 4f 47 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  OG] \..         
2e50: 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65       [$foreignKe
2e60: 79 20 49 74 65 6d 20 54 41 42 4c 45 5f 4e 41 4d  y Item TABLE_NAM
2e70: 45 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  E] \..          
2e80: 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79      [$foreignKey
2e90: 20 49 74 65 6d 20 43 4f 4e 53 54 52 41 49 4e 54   Item CONSTRAINT
2ea0: 5f 54 59 50 45 5d 20 5c 0d 0a 20 20 20 20 20 20  _TYPE] \..      
2eb0: 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67          [$foreig
2ec0: 6e 4b 65 79 20 49 74 65 6d 20 49 53 5f 44 45 46  nKey Item IS_DEF
2ed0: 45 52 52 41 42 4c 45 5d 20 5c 0d 0a 20 20 20 20  ERRABLE] \..    
2ee0: 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65            [$fore
2ef0: 69 67 6e 4b 65 79 20 49 74 65 6d 20 49 4e 49 54  ignKey Item INIT
2f00: 49 41 4c 4c 59 5f 44 45 46 45 52 52 45 44 5d 20  IALLY_DEFERRED] 
2f10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
2f20: 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74   [$foreignKey It
2f30: 65 6d 20 46 4b 45 59 5f 49 44 5d 20 5c 0d 0a 20  em FKEY_ID] \.. 
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66               [$f
2f50: 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46  oreignKey Item F
2f60: 4b 45 59 5f 46 52 4f 4d 5f 43 4f 4c 55 4d 4e 5d  KEY_FROM_COLUMN]
2f70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
2f80: 20 20 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49    [$foreignKey I
2f90: 74 65 6d 20 46 4b 45 59 5f 54 4f 5f 43 41 54 41  tem FKEY_TO_CATA
2fa0: 4c 4f 47 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  LOG] \..        
2fb0: 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67 6e 4b        [$foreignK
2fc0: 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 54 4f 5f  ey Item FKEY_TO_
2fd0: 54 41 42 4c 45 5d 20 5c 0d 0a 20 20 20 20 20 20  TABLE] \..      
2fe0: 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65 69 67          [$foreig
2ff0: 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45 59 5f 54  nKey Item FKEY_T
3000: 4f 5f 43 4f 4c 55 4d 4e 5d 20 5c 0d 0a 20 20 20  O_COLUMN] \..   
3010: 20 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72             [$for
3020: 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45  eignKey Item FKE
3030: 59 5f 46 52 4f 4d 5f 4f 52 44 49 4e 41 4c 5f 50  Y_FROM_ORDINAL_P
3040: 4f 53 49 54 49 4f 4e 5d 20 5c 0d 0a 20 20 20 20  OSITION] \..    
3050: 20 20 20 20 20 20 20 20 20 20 5b 24 66 6f 72 65            [$fore
3060: 69 67 6e 4b 65 79 20 49 74 65 6d 20 46 4b 45 59  ignKey Item FKEY
3070: 5f 4f 4e 5f 55 50 44 41 54 45 5d 20 5c 0d 0a 20  _ON_UPDATE] \.. 
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 66               [$f
3090: 6f 72 65 69 67 6e 4b 65 79 20 49 74 65 6d 20 46  oreignKey Item F
30a0: 4b 45 59 5f 4f 4e 5f 44 45 4c 45 54 45 5d 20 5c  KEY_ON_DELETE] \
30b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30c0: 5b 24 66 6f 72 65 69 67 6e 4b 65 79 20 49 74 65  [$foreignKey Ite
30d0: 6d 20 46 4b 45 59 5f 4d 41 54 43 48 5d 5d 0d 0a  m FKEY_MATCH]]..
30e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30f0: 20 20 20 20 20 73 65 74 20 72 6f 77 73 0d 0a 20       set rows.. 
3100: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
3110: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
3120: 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  }] $result..} -c
3130: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
3140: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
3150: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
3160: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 72 6f  mplain result ro
3170: 77 73 20 66 6f 72 65 69 67 6e 4b 65 79 20 66 6f  ws foreignKey fo
3180: 72 65 69 67 6e 4b 65 79 73 20 72 65 73 75 6c 74  reignKeys result
3190: 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20 5c 0d  s errors code \.
31a0: 0a 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63  .      dataSourc
31b0: 65 20 69 64 20 64 62 20 66 69 6c 65 4e 61 6d 65  e id db fileName
31c0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
31d0: 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32   {eagle monoBug2
31e0: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
31f0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
3200: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
3210: 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43 53  SQLite compileCS
3220: 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67  harp} -match reg
3230: 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b  exp -result {^Ok
3240: 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  \..System#CodeDo
3250: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
3260: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c  lerResults#\d+ \
3270: 7b 5c 7d 20 30 20 5c 7b 5c 7b 6d 61 69 6e 20 46  {\} 0 \{\{main F
3280: 4b 5f 74 31 5f 30 5f 30 20 6d 61 69 6e 20 74 31  K_t1_0_0 main t1
3290: 5c 0d 0a 5c 7b 46 4f 52 45 49 47 4e 20 4b 45 59  \..\{FOREIGN KEY
32a0: 5c 7d 20 46 61 6c 73 65 20 46 61 6c 73 65 20 30  \} False False 0
32b0: 20 78 20 6d 61 69 6e 20 74 32 20 5c 7b 5c 7d 20   x main t2 \{\} 
32c0: 30 20 5c 7b 53 45 54 20 44 45 46 41 55 4c 54 5c  0 \{SET DEFAULT\
32d0: 7d 20 43 41 53 43 41 44 45 20 4e 4f 4e 45 5c 7d  } CASCADE NONE\}
32e0: 5c 0d 0a 5c 7b 6d 61 69 6e 20 46 4b 5f 74 32 5f  \..\{main FK_t2_
32f0: 30 5f 30 20 6d 61 69 6e 20 74 32 20 5c 7b 46 4f  0_0 main t2 \{FO
3300: 52 45 49 47 4e 20 4b 45 59 5c 7d 20 46 61 6c 73  REIGN KEY\} Fals
3310: 65 20 46 61 6c 73 65 20 30 20 78 20 6d 61 69 6e  e False 0 x main
3320: 20 74 33 20 5c 7b 5c 7d 20 30 20 5c 7b 4e 4f 5c   t3 \{\} 0 \{NO\
3330: 0d 0a 41 43 54 49 4f 4e 5c 7d 20 5c 7b 4e 4f 20  ..ACTION\} \{NO 
3340: 41 43 54 49 4f 4e 5c 7d 20 4e 4f 4e 45 5c 7d 5c  ACTION\} NONE\}\
3350: 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }$}}....########
3360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33a0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
33b0: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
33c0: 37 20 7b 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  7 {SQLITE_FCNTL_
33d0: 57 49 4e 33 32 5f 41 56 5f 52 45 54 52 59 7d 20  WIN32_AV_RETRY} 
33e0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
33f0: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
3400: 65 20 64 61 74 61 2d 31 2e 37 2e 64 62 5d 0d 0a  e data-1.7.db]..
3410: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
3420: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
3430: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
3440: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
3450: 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
3460: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
3470: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
3480: 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ory] $fileName].
3490: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
34a0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
34b0: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
34c0: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
34d0: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
34e0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
34f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a  m.Data.SQLite;..
3500: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
3510: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
3520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
3530: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
3540: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
3550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
3560: 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 54  ic static bool T
3570: 65 73 74 53 65 74 41 76 52 65 74 72 79 28 0d 0a  estSetAvRetry(..
3580: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 69 6e            ref in
3590: 74 20 63 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  t count,..      
35a0: 20 20 20 20 72 65 66 20 69 6e 74 20 69 6e 74 65      ref int inte
35b0: 72 76 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  rval..          
35c0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35d0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
35e0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
35f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
3600: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3610: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
3620: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
3630: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
3640: 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22  tFlagsProperty]"
3650: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
3660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
3670: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
3680: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3690: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
36a0: 2f 20 4e 4f 54 45 3a 20 53 65 74 20 74 68 65 20  / NOTE: Set the 
36b0: 72 65 71 75 65 73 74 65 64 20 72 65 74 72 79 20  requested retry 
36c0: 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73  parameter values
36d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
36e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
36f0: 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 53 65  f (connection.Se
3700: 74 41 76 52 65 74 72 79 28 72 65 66 20 63 6f 75  tAvRetry(ref cou
3710: 6e 74 2c 20 72 65 66 20 69 6e 74 65 72 76 61 6c  nt, ref interval
3720: 29 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  ) != 0)..       
3730: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
3740: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
3750: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3760: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 51 75 65      // NOTE: Que
3770: 72 79 20 74 68 65 20 72 65 74 72 79 20 70 61 72  ry the retry par
3780: 61 6d 65 74 65 72 20 76 61 6c 75 65 73 2e 0d 0a  ameter values...
3790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
37b0: 6e 65 77 43 6f 75 6e 74 20 3d 20 2d 31 3b 20 69  newCount = -1; i
37c0: 6e 74 20 6e 65 77 49 6e 74 65 72 76 61 6c 20 3d  nt newInterval =
37d0: 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   -1;....        
37e0: 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69      if (connecti
37f0: 6f 6e 2e 53 65 74 41 76 52 65 74 72 79 28 72 65  on.SetAvRetry(re
3800: 66 20 6e 65 77 43 6f 75 6e 74 2c 20 72 65 66 20  f newCount, ref 
3810: 6e 65 77 49 6e 74 65 72 76 61 6c 29 20 21 3d 20  newInterval) != 
3820: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
3830: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
3840: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3850: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
3860: 2f 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72  / NOTE: Make sur
3870: 65 20 74 68 65 20 72 65 74 72 79 20 70 61 72 61  e the retry para
3880: 6d 65 74 65 72 20 76 61 6c 75 65 73 20 77 65 72  meter values wer
3890: 65 20 73 65 74 2e 0d 0a 20 20 20 20 20 20 20 20  e set...        
38a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
38b0: 20 20 20 20 72 65 74 75 72 6e 20 28 6e 65 77 43      return (newC
38c0: 6f 75 6e 74 20 3d 3d 20 63 6f 75 6e 74 20 26 26  ount == count &&
38d0: 20 6e 65 77 49 6e 74 65 72 76 61 6c 20 3d 3d 20   newInterval == 
38e0: 69 6e 74 65 72 76 61 6c 29 3b 0d 0a 20 20 20 20  interval);..    
38f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3900: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3950: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3960: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
3970: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
3980: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3990: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
39a0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
39b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
39c0: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
39d0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
39e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
39f0: 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74  e.dll]....  list
3a00: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
3a10: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
3a20: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
3a30: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
3a40: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
3a50: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
3a60: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
3a70: 20 20 20 20 20 20 20 20 73 65 74 20 73 61 76 65          set save
3a80: 64 43 6f 75 6e 74 20 2d 31 3b 20 73 65 74 20 73  dCount -1; set s
3a90: 61 76 65 64 49 6e 74 65 72 76 61 6c 20 2d 31 0d  avedInterval -1.
3aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ...        objec
3ab0: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
3ac0: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
3ad0: 20 54 65 73 74 53 65 74 41 76 52 65 74 72 79 20   TestSetAvRetry 
3ae0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
3af0: 61 76 65 64 43 6f 75 6e 74 20 73 61 76 65 64 49  avedCount savedI
3b00: 6e 74 65 72 76 61 6c 0d 0a 0d 0a 20 20 20 20 20  nterval....     
3b10: 20 20 20 73 65 74 20 63 6f 75 6e 74 20 35 3b 20     set count 5; 
3b20: 73 65 74 20 69 6e 74 65 72 76 61 6c 20 35 30 0d  set interval 50.
3b30: 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ...        objec
3b40: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
3b50: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
3b60: 20 54 65 73 74 53 65 74 41 76 52 65 74 72 79 20   TestSetAvRetry 
3b70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  \..            c
3b80: 6f 75 6e 74 20 69 6e 74 65 72 76 61 6c 0d 0a 20  ount interval.. 
3b90: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
3ba0: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
3bb0: 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  }] $result..} -c
3bc0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 69 66 20 7b  leanup {..  if {
3bd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76  [info exists sav
3be0: 65 64 43 6f 75 6e 74 5d 7d 20 74 68 65 6e 20 7b  edCount]} then {
3bf0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
3c00: 4f 54 45 3a 20 52 65 73 74 6f 72 65 20 74 68 65  OTE: Restore the
3c10: 20 73 61 76 65 64 20 72 65 74 72 79 20 63 6f 75   saved retry cou
3c20: 6e 74 2c 20 69 66 20 70 6f 73 73 69 62 6c 65 2e  nt, if possible.
3c30: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 63 61 74  ..    #..    cat
3c40: 63 68 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20  ch {..      set 
3c50: 69 6e 74 65 72 76 61 6c 20 2d 31 0d 0a 20 20 20  interval -1..   
3c60: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
3c70: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
3c80: 65 73 74 24 7b 69 64 7d 20 54 65 73 74 53 65 74  est${id} TestSet
3c90: 41 76 52 65 74 72 79 20 73 61 76 65 64 43 6f 75  AvRetry savedCou
3ca0: 6e 74 20 69 6e 74 65 72 76 61 6c 0d 0a 20 20 20  nt interval..   
3cb0: 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20   }..  }....  if 
3cc0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61  {[info exists sa
3cd0: 76 65 64 49 6e 74 65 72 76 61 6c 5d 7d 20 74 68  vedInterval]} th
3ce0: 65 6e 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20  en {..    #..   
3cf0: 20 23 20 4e 4f 54 45 3a 20 52 65 73 74 6f 72 65   # NOTE: Restore
3d00: 20 74 68 65 20 73 61 76 65 64 20 72 65 74 72 79   the saved retry
3d10: 20 69 6e 74 65 72 76 61 6c 2c 20 69 66 20 70 6f   interval, if po
3d20: 73 73 69 62 6c 65 2e 0d 0a 20 20 20 20 23 0d 0a  ssible...    #..
3d30: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..   
3d40: 20 20 20 73 65 74 20 63 6f 75 6e 74 20 2d 31 0d     set count -1.
3d50: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  .      object in
3d60: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
3d70: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 54 65 73  d}.Test${id} Tes
3d80: 74 53 65 74 41 76 52 65 74 72 79 20 63 6f 75 6e  tSetAvRetry coun
3d90: 74 20 73 61 76 65 64 49 6e 74 65 72 76 61 6c 0d  t savedInterval.
3da0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20  .    }..  }.... 
3db0: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
3dc0: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
3dd0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
3de0: 6c 74 20 63 6f 75 6e 74 20 69 6e 74 65 72 76 61  lt count interva
3df0: 6c 20 73 61 76 65 64 43 6f 75 6e 74 20 73 61 76  l savedCount sav
3e00: 65 64 49 6e 74 65 72 76 61 6c 20 72 65 73 75 6c  edInterval resul
3e10: 74 73 20 5c 0d 0a 20 20 20 20 20 20 65 72 72 6f  ts \..      erro
3e20: 72 73 20 63 6f 64 65 20 64 61 74 61 53 6f 75 72  rs code dataSour
3e30: 63 65 20 69 64 20 64 62 20 66 69 6c 65 4e 61 6d  ce id db fileNam
3e40: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
3e50: 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  s {eagle monoBug
3e60: 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
3e70: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
3e80: 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61  te\..System.Data
3e90: 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c 65 43  .SQLite compileC
3ea0: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65  Sharp} -match re
3eb0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f  gexp -result {^O
3ec0: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
3ed0: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
3ee0: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
3ef0: 5c 7b 5c 7d 20 30 20 54 72 75 65 24 7d 7d 0d 0a  \{\} 0 True$}}..
3f00: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
3f10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3f50: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
3f60: 73 74 20 64 61 74 61 2d 31 2e 38 20 7b 70 72 6f  st data-1.8 {pro
3f70: 70 65 72 6c 79 20 63 6c 6f 73 65 64 20 64 61 74  perly closed dat
3f80: 61 62 61 73 65 20 66 69 6c 65 20 28 6e 6f 6e 2d  abase file (non-
3f90: 71 75 65 72 79 29 7d 20 2d 73 65 74 75 70 20 7b  query)} -setup {
3fa0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
3fb0: 20 64 61 74 61 2d 31 2e 38 2e 64 62 0d 0a 7d 20   data-1.8.db..} 
3fc0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
3fd0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
3fe0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
3ff0: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
4000: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
4010: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
4020: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
4030: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
4040: 0a 20 20 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a  .  set sql { \..
4050: 20 20 20 20 42 45 47 49 4e 20 45 58 43 4c 55 53      BEGIN EXCLUS
4060: 49 56 45 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  IVE TRANSACTION;
4070: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54   \..    CREATE T
4080: 41 42 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45  ABLE t1(x INTEGE
4090: 52 29 3b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52  R); \..    INSER
40a0: 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
40b0: 4c 55 45 53 28 31 29 3b 20 5c 0d 0a 20 20 20 20  LUES(1); \..    
40c0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 31  SELECT x FROM t1
40d0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
40e0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
40f0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
4100: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
4110: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
4120: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
4130: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
4140: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
4150: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
4160: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
4170: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4180: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
4190: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
41a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
41b0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
41c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
41d0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
41e0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
41f0: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
4200: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
4210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
4220: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
4230: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c  taSource};[getFl
4240: 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d  agsProperty]")).
4250: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
4260: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
4270: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
4280: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
4290: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
42a0: 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53   command = new S
42b0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 22 24 7b  QLiteCommand("${
42c0: 73 71 6c 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  sql}",..        
42d0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
42e0: 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
42f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4300: 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75     command.Execu
4310: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
4320: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4330: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4340: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
4350: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
4360: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
4370: 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e  s errors System.
4380: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
4390: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
43a0: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
43b0: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
43c0: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
43d0: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
43e0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
43f0: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
4400: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
4410: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
4420: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
4430: 73 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20  st${id} Main..  
4440: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
4450: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
4460: 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20  ] $result \..   
4470: 20 20 20 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20     [close [open 
4480: 24 64 61 74 61 53 6f 75 72 63 65 20 52 44 4f 4e  $dataSource RDON
4490: 4c 59 20 30 20 22 22 20 2d 73 68 61 72 65 20 4e  LY 0 "" -share N
44a0: 6f 6e 65 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  one]]..} -cleanu
44b0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
44c0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
44d0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
44e0: 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73  n result results
44f0: 20 65 72 72 6f 72 73 20 63 6f 64 65 20 73 71 6c   errors code sql
4500: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
4510: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
4520: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d  traints {eagle m
4530: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
4540: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
4550: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
4560: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f  m.Data.SQLite co
4570: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
4580: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
4590: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
45a0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
45b0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
45c0: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
45d0: 7d 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23  } \{\}$}}....###
45e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4620: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
4630: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
4640: 74 61 2d 31 2e 39 20 7b 70 72 6f 70 65 72 6c 79  ta-1.9 {properly
4650: 20 63 6c 6f 73 65 64 20 64 61 74 61 62 61 73 65   closed database
4660: 20 66 69 6c 65 20 28 72 65 61 64 65 72 20 23 31   file (reader #1
4670: 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  )} -setup {..  s
4680: 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
4690: 2d 31 2e 39 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.9.db..} -body
46a0: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
46b0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
46c0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
46d0: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
46e0: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
46f0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
4700: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
4710: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
4720: 74 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20 20 42  t sql { \..    B
4730: 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45 20 54  EGIN EXCLUSIVE T
4740: 52 41 4e 53 41 43 54 49 4f 4e 3b 20 5c 0d 0a 20  RANSACTION; \.. 
4750: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4760: 74 31 28 78 20 49 4e 54 45 47 45 52 29 3b 20 5c  t1(x INTEGER); \
4770: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
4780: 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
4790: 31 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  1); \..    SELEC
47a0: 54 20 78 20 46 52 4f 4d 20 74 31 3b 20 5c 0d 0a  T x FROM t1; \..
47b0: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
47c0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
47d0: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
47e0: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
47f0: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
4800: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
4810: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
4820: 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  e;....    namesp
4830: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
4840: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
4850: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
4860: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
4870: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4880: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
4890: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
48a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
48b0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
48c0: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
48d0: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
48e0: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
48f0: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
4900: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
4910: 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72  rce};[getFlagsPr
4920: 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20  operty]"))..    
4930: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4940: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
4950: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
4960: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
4970: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
4980: 61 6e 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  and = new SQLite
4990: 43 6f 6d 6d 61 6e 64 28 22 24 7b 73 71 6c 7d 22  Command("${sql}"
49a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
49b0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 29 0d     connection)).
49c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
49e0: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
49f0: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
4a00: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
4a10: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
4a20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4a40: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
4a70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4a80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
4a90: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
4aa0: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
4ab0: 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e  s errors System.
4ac0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
4ad0: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
4ae0: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
4af0: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
4b00: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
4b10: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
4b20: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
4b30: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
4b40: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
4b50: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
4b60: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
4b70: 73 74 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20  st${id} Main..  
4b80: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
4b90: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
4ba0: 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20  ] $result \..   
4bb0: 20 20 20 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20     [close [open 
4bc0: 24 64 61 74 61 53 6f 75 72 63 65 20 52 44 4f 4e  $dataSource RDON
4bd0: 4c 59 20 30 20 22 22 20 2d 73 68 61 72 65 20 4e  LY 0 "" -share N
4be0: 6f 6e 65 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  one]]..} -cleanu
4bf0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
4c00: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
4c10: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
4c20: 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74 73  n result results
4c30: 20 65 72 72 6f 72 73 20 63 6f 64 65 20 73 71 6c   errors code sql
4c40: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
4c50: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
4c60: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d  traints {eagle m
4c70: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
4c80: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
4c90: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
4ca0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f  m.Data.SQLite co
4cb0: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
4cc0: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
4cd0: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
4ce0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
4cf0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
4d00: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
4d10: 7d 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23  } \{\}$}}....###
4d20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4d60: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
4d70: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
4d80: 74 61 2d 31 2e 31 30 20 7b 70 72 6f 70 65 72 6c  ta-1.10 {properl
4d90: 79 20 63 6c 6f 73 65 64 20 64 61 74 61 62 61 73  y closed databas
4da0: 65 20 66 69 6c 65 20 28 72 65 61 64 65 72 20 23  e file (reader #
4db0: 32 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  2)} -setup {..  
4dc0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
4dd0: 61 2d 31 2e 31 30 2e 64 62 0d 0a 7d 20 2d 62 6f  a-1.10.db..} -bo
4de0: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
4df0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
4e00: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
4e10: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
4e20: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
4e30: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
4e40: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
4e50: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
4e60: 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a 20 20 20  set sql { \..   
4e70: 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45   BEGIN EXCLUSIVE
4e80: 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 20 5c 0d   TRANSACTION; \.
4e90: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
4ea0: 45 20 74 31 28 78 20 49 4e 54 45 47 45 52 29 3b  E t1(x INTEGER);
4eb0: 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49   \..    INSERT I
4ec0: 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
4ed0: 53 28 31 29 3b 20 5c 0d 0a 20 20 20 20 53 45 4c  S(1); \..    SEL
4ee0: 45 43 54 20 78 20 46 52 4f 4d 20 74 31 3b 20 5c  ECT x FROM t1; \
4ef0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
4f00: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
4f10: 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  ults errors.... 
4f20: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
4f30: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
4f40: 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67  bst {..    using
4f50: 20 53 79 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20   System.Data;.. 
4f60: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
4f70: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a  Data.SQLite;....
4f80: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44      namespace _D
4f90: 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20  ynamic${id}..   
4fa0: 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63   {..      public
4fb0: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65   static class Te
4fc0: 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b  st${id}..      {
4fd0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4fe0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
4ff0: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
5000: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
5010: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
5020: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
5030: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
5040: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
5050: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
5060: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
5070: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
5080: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
5090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
50a0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
50b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
50c0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
50d0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
50e0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  new SQLiteComman
50f0: 64 28 22 24 7b 73 71 6c 7d 22 2c 0d 0a 20 20 20  d("${sql}",..   
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
5110: 6e 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20  nection))..     
5120: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5130: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
5140: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
5150: 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d  dataReader = com
5160: 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64  mand.ExecuteRead
5170: 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
5180: 20 20 20 20 20 20 20 43 6f 6d 6d 61 6e 64 42 65         CommandBe
5190: 68 61 76 69 6f 72 2e 43 6c 6f 73 65 43 6f 6e 6e  havior.CloseConn
51a0: 65 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ection))..      
51b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
51c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
51d0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
51e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
51f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5200: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5210: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
5220: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
5230: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
5240: 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74  rrors System.Dat
5250: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d  a.SQLite.dll]...
5260: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
5270: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
5280: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
5290: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
52a0: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
52b0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
52c0: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
52d0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
52e0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
52f0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
5300: 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20  {id} Main..     
5310: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
5320: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
5330: 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20  result \..      
5340: 5b 63 6c 6f 73 65 20 5b 6f 70 65 6e 20 24 64 61  [close [open $da
5350: 74 61 53 6f 75 72 63 65 20 52 44 4f 4e 4c 59 20  taSource RDONLY 
5360: 30 20 22 22 20 2d 73 68 61 72 65 20 4e 6f 6e 65  0 "" -share None
5370: 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ]]..} -cleanup {
5380: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
5390: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
53a0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
53b0: 65 73 75 6c 74 20 72 65 73 75 6c 74 73 20 65 72  esult results er
53c0: 72 6f 72 73 20 63 6f 64 65 20 73 71 6c 20 64 61  rors code sql da
53d0: 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65  taSource id file
53e0: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
53f0: 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f  ints {eagle mono
5400: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
5410: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
5420: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
5430: 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69  ata.SQLite compi
5440: 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68  leCSharp} -match
5450: 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20   regexp -result 
5460: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
5470: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
5480: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
5490: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 20 5c  d+ \{\} 0 \{\} \
54a0: 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  {\}$}}....######
54b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
54f0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
5500: 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d  Test {test data-
5510: 31 2e 31 31 20 7b 43 68 61 6e 67 65 73 20 70 72  1.11 {Changes pr
5520: 6f 70 65 72 74 79 7d 20 2d 73 65 74 75 70 20 7b  operty} -setup {
5530: 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
5540: 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
5550: 2e 31 31 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .11.db]..} -body
5560: 20 7b 0d 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63   {..  set connec
5570: 74 69 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65  tion [getDbConne
5580: 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20  ction]....  set 
5590: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
55a0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
55b0: 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
55c0: 20 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52   t1(x INTEGER PR
55d0: 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79  IMARY KEY ASC, y
55e0: 2c 20 7a 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  , z);"....  sql 
55f0: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
5600: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
5610: 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 31 2c 20  y, z) VALUES(1, 
5620: 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b 22 0d 0a  'foo', 1234);"..
5630: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
5640: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
5650: 31 20 28 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55  1 (x, y, z) VALU
5660: 45 53 28 32 2c 20 27 62 61 72 27 2c 20 35 36 37  ES(2, 'bar', 567
5670: 38 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20  8);"..  lappend 
5680: 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69  result [object i
5690: 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f  nvoke $connectio
56a0: 6e 20 43 68 61 6e 67 65 73 5d 0d 0a 0d 0a 20 20  n Changes]....  
56b0: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
56c0: 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79  "UPDATE t1 SET y
56d0: 20 3d 20 27 66 6f 6f 62 61 72 27 3b 22 0d 0a 20   = 'foobar';".. 
56e0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
56f0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $
5700: 63 6f 6e 6e 65 63 74 69 6f 6e 20 43 68 61 6e 67  connection Chang
5710: 65 73 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65  es]....  sql exe
5720: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
5730: 61 64 65 72 20 24 64 62 20 22 53 45 4c 45 43 54  ader $db "SELECT
5740: 20 78 2c 20 79 2c 20 7a 20 46 52 4f 4d 20 74 31   x, y, z FROM t1
5750: 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ;"..  lappend re
5760: 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  sult [object inv
5770: 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  oke $connection 
5780: 43 68 61 6e 67 65 73 5d 0d 0a 0d 0a 20 20 66 6f  Changes]....  fo
5790: 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72  reach name [lsor
57a0: 74 20 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61  t -integer [arra
57b0: 79 20 6e 61 6d 65 73 20 72 6f 77 73 20 2d 72 65  y names rows -re
57c0: 67 65 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b  gexp {^\d+$}]] {
57d0: 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
57e0: 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65  sult [list $name
57f0: 20 24 72 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a   $rows($name)]..
5800: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73    }....  set res
5810: 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
5820: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
5830: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 66 72  fileName....  fr
5840: 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  eeDbConnection..
5850: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
5860: 70 6c 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20  plain name rows 
5870: 72 65 73 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f  result connectio
5880: 6e 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  n db fileName..}
5890: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d   -constraints \.
58a0: 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32  .{eagle monoBug2
58b0: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
58c0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
58d0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
58e0: 4c 69 74 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74  Lite} \..-result
58f0: 20 7b 31 20 32 20 32 20 7b 31 20 7b 7b 78 20 31   {1 2 2 {1 {{x 1
5900: 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20  } {y foobar} {z 
5910: 31 32 33 34 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32  1234}}} {2 {{x 2
5920: 7d 20 7b 79 20 66 6f 6f 62 61 72 7d 20 7b 7a 20  } {y foobar} {z 
5930: 35 36 37 38 7d 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23  5678}}}}}....###
5940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5980: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
5990: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
59a0: 74 61 2d 31 2e 31 32 20 7b 4c 61 73 74 49 6e 73  ta-1.12 {LastIns
59b0: 65 72 74 52 6f 77 49 64 20 70 72 6f 70 65 72 74  ertRowId propert
59c0: 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  y} -setup {..  s
59d0: 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
59e0: 4e 61 6d 65 20 64 61 74 61 2d 31 2e 31 32 2e 64  Name data-1.12.d
59f0: 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
5a00: 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
5a10: 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
5a20: 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
5a30: 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71  t [list]....  sq
5a40: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
5a50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
5a60: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
5a70: 20 4b 45 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b   KEY ASC, y, z);
5a80: 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  "....  sql execu
5a90: 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54  te $db "CREATE T
5aa0: 41 42 4c 45 20 74 32 28 78 20 49 4e 54 45 47 45  ABLE t2(x INTEGE
5ab0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 55  R PRIMARY KEY AU
5ac0: 54 4f 49 4e 43 52 45 4d 45 4e 54 2c 20 79 2c 20  TOINCREMENT, y, 
5ad0: 7a 29 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20  z);"..  lappend 
5ae0: 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69  result [object i
5af0: 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f  nvoke $connectio
5b00: 6e 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49  n LastInsertRowI
5b10: 64 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63  d]....  sql exec
5b20: 75 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20  ute $db "INSERT 
5b30: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 2c 20 7a  INTO t1 (x, y, z
5b40: 29 20 56 41 4c 55 45 53 28 31 2c 20 27 66 6f 6f  ) VALUES(1, 'foo
5b50: 27 2c 20 31 32 33 34 29 3b 22 0d 0a 20 20 6c 61  ', 1234);"..  la
5b60: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62  ppend result [ob
5b70: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e  ject invoke $con
5b80: 6e 65 63 74 69 6f 6e 20 4c 61 73 74 49 6e 73 65  nection LastInse
5b90: 72 74 52 6f 77 49 64 5d 0d 0a 0d 0a 20 20 73 71  rtRowId]....  sq
5ba0: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
5bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
5bc0: 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 32  , y, z) VALUES(2
5bd0: 2c 20 27 62 61 72 27 2c 20 35 36 37 38 29 3b 22  , 'bar', 5678);"
5be0: 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
5bf0: 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  lt [object invok
5c00: 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61  e $connection La
5c10: 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a  stInsertRowId]..
5c20: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
5c30: 24 64 62 20 22 55 50 44 41 54 45 20 74 31 20 53  $db "UPDATE t1 S
5c40: 45 54 20 79 20 3d 20 27 66 6f 6f 62 61 72 27 3b  ET y = 'foobar';
5c50: 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  "..  lappend res
5c60: 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ult [object invo
5c70: 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c  ke $connection L
5c80: 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d  astInsertRowId].
5c90: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5ca0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5cb0: 4f 20 74 32 20 28 79 2c 20 7a 29 20 56 41 4c 55  O t2 (y, z) VALU
5cc0: 45 53 28 27 66 6f 6f 27 2c 20 31 32 33 34 29 3b  ES('foo', 1234);
5cd0: 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  "..  lappend res
5ce0: 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ult [object invo
5cf0: 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c  ke $connection L
5d00: 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d  astInsertRowId].
5d10: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5d20: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
5d30: 4f 20 74 32 20 28 79 2c 20 7a 29 20 56 41 4c 55  O t2 (y, z) VALU
5d40: 45 53 28 27 62 61 72 27 2c 20 35 36 37 38 29 3b  ES('bar', 5678);
5d50: 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  "..  lappend res
5d60: 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ult [object invo
5d70: 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c  ke $connection L
5d80: 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d  astInsertRowId].
5d90: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
5da0: 20 24 64 62 20 22 55 50 44 41 54 45 20 74 32 20   $db "UPDATE t2 
5db0: 53 45 54 20 79 20 3d 20 27 66 6f 6f 62 61 72 27  SET y = 'foobar'
5dc0: 3b 22 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ;"..  lappend re
5dd0: 73 75 6c 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  sult [object inv
5de0: 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  oke $connection 
5df0: 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64 5d  LastInsertRowId]
5e00: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
5e10: 65 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65  e -execute reade
5e20: 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 78 2c  r $db "SELECT x,
5e30: 20 79 2c 20 7a 20 46 52 4f 4d 20 74 31 3b 22 0d   y, z FROM t1;".
5e40: 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
5e50: 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  t [object invoke
5e60: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c 61 73   $connection Las
5e70: 74 49 6e 73 65 72 74 52 6f 77 49 64 5d 0d 0a 0d  tInsertRowId]...
5e80: 0a 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20  .  foreach name 
5e90: 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20  [lsort -integer 
5ea0: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 72 6f 77  [array names row
5eb0: 73 20 2d 72 65 67 65 78 70 20 7b 5e 5c 64 2b 24  s -regexp {^\d+$
5ec0: 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65  }]] {..    lappe
5ed0: 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  nd result [list 
5ee0: 24 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e 61 6d  $name $rows($nam
5ef0: 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71  e)]..  }....  sq
5f00: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
5f10: 74 65 20 72 65 61 64 65 72 20 24 64 62 20 22 53  te reader $db "S
5f20: 45 4c 45 43 54 20 78 2c 20 79 2c 20 7a 20 46 52  ELECT x, y, z FR
5f30: 4f 4d 20 74 32 3b 22 0d 0a 20 20 6c 61 70 70 65  OM t2;"..  lappe
5f40: 6e 64 20 72 65 73 75 6c 74 20 5b 6f 62 6a 65 63  nd result [objec
5f50: 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63  t invoke $connec
5f60: 74 69 6f 6e 20 4c 61 73 74 49 6e 73 65 72 74 52  tion LastInsertR
5f70: 6f 77 49 64 5d 0d 0a 0d 0a 20 20 66 6f 72 65 61  owId]....  forea
5f80: 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 2d  ch name [lsort -
5f90: 69 6e 74 65 67 65 72 20 5b 61 72 72 61 79 20 6e  integer [array n
5fa0: 61 6d 65 73 20 72 6f 77 73 20 2d 72 65 67 65 78  ames rows -regex
5fb0: 70 20 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a 20  p {^\d+$}]] {.. 
5fc0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
5fd0: 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 72  t [list $name $r
5fe0: 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d  ows($name)]..  }
5ff0: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
6000: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
6010: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
6020: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 66 72 65 65 44  eName....  freeD
6030: 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20  bConnection.... 
6040: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
6050: 69 6e 20 6e 61 6d 65 20 72 6f 77 73 20 72 65 73  in name rows res
6060: 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ult connection d
6070: 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
6080: 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
6090: 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
60a0: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
60b0: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
60c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
60d0: 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 30  e} \..-result {0
60e0: 20 31 20 32 20 32 20 31 20 32 20 32 20 32 20 7b   1 2 2 1 2 2 2 {
60f0: 31 20 7b 7b 78 20 31 7d 20 7b 79 20 66 6f 6f 62  1 {{x 1} {y foob
6100: 61 72 7d 20 7b 7a 20 31 32 33 34 7d 7d 7d 20 7b  ar} {z 1234}}} {
6110: 32 20 7b 7b 78 20 32 7d 20 7b 79 20 66 6f 6f 62  2 {{x 2} {y foob
6120: 61 72 7d 5c 0d 0a 7b 7a 20 35 36 37 38 7d 7d 7d  ar}\..{z 5678}}}
6130: 20 32 20 7b 31 20 7b 7b 78 20 31 7d 20 7b 79 20   2 {1 {{x 1} {y 
6140: 66 6f 6f 62 61 72 7d 20 7b 7a 20 31 32 33 34 7d  foobar} {z 1234}
6150: 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b 79 20  }} {2 {{x 2} {y 
6160: 66 6f 6f 62 61 72 7d 20 7b 7a 20 35 36 37 38 7d  foobar} {z 5678}
6170: 7d 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  }}}}....########
6180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
61c0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
61d0: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
61e0: 31 33 20 7b 44 61 74 65 54 69 6d 65 20 75 73 69  13 {DateTime usi
61f0: 6e 67 20 55 6e 69 78 20 65 70 6f 63 68 7d 20 2d  ng Unix epoch} -
6200: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70  setup {..  setup
6210: 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65  Db [set fileName
6220: 20 64 61 74 61 2d 31 2e 31 33 2e 64 62 5d 20 22   data-1.13.db] "
6230: 22 20 55 6e 69 78 45 70 6f 63 68 20 55 74 63 0d  " UnixEpoch Utc.
6240: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
6250: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
6260: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6270: 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41 42   $db "CREATE TAB
6280: 4c 45 20 74 31 28 78 20 49 4e 54 45 47 45 52 20  LE t1(x INTEGER 
6290: 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43 2c  PRIMARY KEY ASC,
62a0: 20 79 20 44 41 54 45 54 49 4d 45 29 3b 22 0d 0a   y DATETIME);"..
62b0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
62c0: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
62d0: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
62e0: 31 2c 20 31 33 30 32 38 32 35 36 30 30 29 3b 22  1, 1302825600);"
62f0: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
6300: 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  $db "INSERT INTO
6310: 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45   t1 (x, y) VALUE
6320: 53 28 32 2c 20 31 33 33 34 34 34 38 30 30 30 29  S(2, 1334448000)
6330: 3b 22 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ;"..  sql execut
6340: 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
6350: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
6360: 55 45 53 28 33 2c 20 31 33 36 35 39 38 34 30 30  UES(3, 136598400
6370: 30 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  0);"....  sql ex
6380: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
6390: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
63a0: 20 56 41 4c 55 45 53 28 34 2c 20 3f 29 3b 22 20   VALUES(4, ?);" 
63b0: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
63c0: 61 72 61 6d 31 20 49 6e 74 33 32 20 31 33 30 32  aram1 Int32 1302
63d0: 38 32 35 36 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c  825600]....  sql
63e0: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
63f0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
6400: 20 79 29 20 56 41 4c 55 45 53 28 35 2c 20 3f 29   y) VALUES(5, ?)
6410: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
6420: 74 20 70 61 72 61 6d 31 20 49 6e 74 33 32 20 31  t param1 Int32 1
6430: 33 33 34 34 34 38 30 30 30 5d 0d 0a 0d 0a 20 20  334448000]....  
6440: 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
6450: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
6460: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 36 2c  (x, y) VALUES(6,
6470: 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b   ?);" \..      [
6480: 6c 69 73 74 20 70 61 72 61 6d 31 20 49 6e 74 33  list param1 Int3
6490: 32 20 31 33 36 35 39 38 34 30 30 30 5d 0d 0a 0d  2 1365984000]...
64a0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
64b0: 76 65 72 62 61 74 69 6d 20 24 64 62 20 22 49 4e  verbatim $db "IN
64c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
64d0: 20 79 29 20 56 41 4c 55 45 53 28 37 2c 20 3f 29   y) VALUES(7, ?)
64e0: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
64f0: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
6500: 65 20 31 33 30 32 38 32 35 36 30 30 5d 0d 0a 0d  e 1302825600]...
6510: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
6520: 76 65 72 62 61 74 69 6d 20 24 64 62 20 22 49 4e  verbatim $db "IN
6530: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
6540: 20 79 29 20 56 41 4c 55 45 53 28 38 2c 20 3f 29   y) VALUES(8, ?)
6550: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
6560: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
6570: 65 20 31 33 33 34 34 34 38 30 30 30 5d 0d 0a 0d  e 1334448000]...
6580: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
6590: 76 65 72 62 61 74 69 6d 20 24 64 62 20 22 49 4e  verbatim $db "IN
65a0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
65b0: 20 79 29 20 56 41 4c 55 45 53 28 39 2c 20 3f 29   y) VALUES(9, ?)
65c0: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
65d0: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
65e0: 65 20 31 33 36 35 39 38 34 30 30 30 5d 0d 0a 0d  e 1365984000]...
65f0: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d  .  sql execute -
6600: 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20 2d  execute reader -
6610: 64 61 74 65 74 69 6d 65 66 6f 72 6d 61 74 20 5b  datetimeformat [
6620: 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
6630: 74 5d 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  t] $db \..      
6640: 22 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f  "SELECT x, y FRO
6650: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b  M t1 ORDER BY x;
6660: 22 0d 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 6e  "....  foreach n
6670: 61 6d 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65  ame [lsort -inte
6680: 67 65 72 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ger [array names
6690: 20 72 6f 77 73 20 2d 72 65 67 65 78 70 20 7b 5e   rows -regexp {^
66a0: 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c  \d+$}]] {..    l
66b0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c  append result [l
66c0: 69 73 74 20 24 6e 61 6d 65 20 24 72 6f 77 73 28  ist $name $rows(
66d0: 24 6e 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a  $name)]..  }....
66e0: 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20    set result..} 
66f0: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
6700: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
6710: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
6720: 63 6f 6d 70 6c 61 69 6e 20 6e 61 6d 65 20 72 6f  complain name ro
6730: 77 73 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c  ws result db fil
6740: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
6750: 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
6760: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
6770: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
6780: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
6790: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 5c 0d  .Data.SQLite} \.
67a0: 0a 2d 72 65 73 75 6c 74 20 7b 7b 31 20 7b 7b 78  .-result {{1 {{x
67b0: 20 31 7d 20 7b 79 20 7b 32 30 31 31 2d 30 34 2d   1} {y {2011-04-
67c0: 31 35 20 30 30 3a 30 30 3a 30 30 5a 7d 7d 7d 7d  15 00:00:00Z}}}}
67d0: 20 7b 32 20 7b 7b 78 20 32 7d 20 7b 79 20 7b 32   {2 {{x 2} {y {2
67e0: 30 31 32 2d 30 34 2d 31 35 5c 0d 0a 30 30 3a 30  012-04-15\..00:0
67f0: 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 33 20 7b 7b 78  0:00Z}}}} {3 {{x
6800: 20 33 7d 20 7b 79 20 7b 32 30 31 33 2d 30 34 2d   3} {y {2013-04-
6810: 31 35 20 30 30 3a 30 30 3a 30 30 5a 7d 7d 7d 7d  15 00:00:00Z}}}}
6820: 20 7b 34 20 7b 7b 78 20 34 7d 20 7b 79 20 7b 32   {4 {{x 4} {y {2
6830: 30 31 31 2d 30 34 2d 31 35 5c 0d 0a 30 30 3a 30  011-04-15\..00:0
6840: 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 35 20 7b 7b 78  0:00Z}}}} {5 {{x
6850: 20 35 7d 20 7b 79 20 7b 32 30 31 32 2d 30 34 2d   5} {y {2012-04-
6860: 31 35 20 30 30 3a 30 30 3a 30 30 5a 7d 7d 7d 7d  15 00:00:00Z}}}}
6870: 20 7b 36 20 7b 7b 78 20 36 7d 20 7b 79 20 7b 32   {6 {{x 6} {y {2
6880: 30 31 33 2d 30 34 2d 31 35 5c 0d 0a 30 30 3a 30  013-04-15\..00:0
6890: 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 37 20 7b 7b 78  0:00Z}}}} {7 {{x
68a0: 20 37 7d 20 7b 79 20 7b 32 30 31 31 2d 30 34 2d   7} {y {2011-04-
68b0: 31 35 20 30 30 3a 30 30 3a 30 30 5a 7d 7d 7d 7d  15 00:00:00Z}}}}
68c0: 20 7b 38 20 7b 7b 78 20 38 7d 20 7b 79 20 7b 32   {8 {{x 8} {y {2
68d0: 30 31 32 2d 30 34 2d 31 35 5c 0d 0a 30 30 3a 30  012-04-15\..00:0
68e0: 30 3a 30 30 5a 7d 7d 7d 7d 20 7b 39 20 7b 7b 78  0:00Z}}}} {9 {{x
68f0: 20 39 7d 20 7b 79 20 7b 32 30 31 33 2d 30 34 2d   9} {y {2013-04-
6900: 31 35 20 30 30 3a 30 30 3a 30 30 5a 7d 7d 7d 7d  15 00:00:00Z}}}}
6910: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
6920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6960: 23 23 23 23 23 0d 0a 0d 0a 73 65 74 20 64 61 74  #####....set dat
6970: 65 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20  e [clock format 
6980: 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 20  [clock seconds] 
6990: 2d 66 6f 72 6d 61 74 20 79 79 79 79 2d 4d 4d 2d  -format yyyy-MM-
69a0: 64 64 5d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  dd]....#########
69b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
69f0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
6a00: 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 31  t {test data-1.1
6a10: 34 20 7b 44 61 74 65 54 69 6d 65 20 75 73 69 6e  4 {DateTime usin
6a20: 67 20 69 6e 76 61 72 69 61 6e 74 20 63 75 6c 74  g invariant cult
6a30: 75 72 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ure} -setup {.. 
6a40: 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
6a50: 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 31 34  leName data-1.14
6a60: 2e 64 62 5d 20 22 22 20 49 6e 76 61 72 69 61 6e  .db] "" Invarian
6a70: 74 43 75 6c 74 75 72 65 20 55 74 63 0d 0a 7d 20  tCulture Utc..} 
6a80: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72  -body {..  set r
6a90: 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a  esult [list]....
6aa0: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
6ab0: 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
6ac0: 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t1(x INTEGER PRI
6ad0: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 20  MARY KEY ASC, y 
6ae0: 44 41 54 45 54 49 4d 45 29 3b 22 0d 0a 0d 0a 20  DATETIME);".... 
6af0: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6b00: 20 5c 0d 0a 20 20 20 20 20 20 22 49 4e 53 45 52   \..      "INSER
6b10: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
6b20: 20 56 41 4c 55 45 53 28 31 2c 20 27 57 65 64 6e   VALUES(1, 'Wedn
6b30: 65 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62  esday, 16 Decemb
6b40: 65 72 20 32 30 30 39 27 29 3b 22 0d 0a 0d 0a 20  er 2009');".... 
6b50: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6b60: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
6b70: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32   (x, y) VALUES(2
6b80: 2c 20 27 31 32 3a 30 30 3a 30 30 27 29 3b 22 0d  , '12:00:00');".
6b90: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6ba0: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 49   $db \..      "I
6bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6bc0: 2c 20 79 29 20 56 41 4c 55 45 53 28 33 2c 20 27  , y) VALUES(3, '
6bd0: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
6be0: 63 65 6d 62 65 72 20 32 30 30 39 20 31 32 3a 30  cember 2009 12:0
6bf0: 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20 73 71  0:00');"....  sq
6c00: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
6c10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
6c20: 2c 20 79 29 20 56 41 4c 55 45 53 28 34 2c 20 27  , y) VALUES(4, '
6c30: 31 32 2f 31 36 2f 32 30 30 39 27 29 3b 22 0d 0a  12/16/2009');"..
6c40: 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
6c50: 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
6c60: 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28  1 (x, y) VALUES(
6c70: 35 2c 20 27 31 32 3a 30 30 27 29 3b 22 0d 0a 20  5, '12:00');".. 
6c80: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
6c90: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
6ca0: 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 36   (x, y) VALUES(6
6cb0: 2c 20 27 31 32 2f 31 36 2f 32 30 30 39 20 31 32  , '12/16/2009 12
6cc0: 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c  :00');"....  sql
6cd0: 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e   execute $db "IN
6ce0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
6cf0: 20 79 29 20 56 41 4c 55 45 53 28 37 2c 20 3f 29   y) VALUES(7, ?)
6d00: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
6d10: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
6d20: 65 20 22 57 65 64 6e 65 73 64 61 79 2c 20 31 36  e "Wednesday, 16
6d30: 20 44 65 63 65 6d 62 65 72 20 32 30 30 39 22 5d   December 2009"]
6d40: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
6d50: 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
6d60: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
6d70: 55 45 53 28 38 2c 20 3f 29 3b 22 20 5c 0d 0a 20  UES(8, ?);" \.. 
6d80: 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d       [list param
6d90: 31 20 44 61 74 65 54 69 6d 65 20 31 32 3a 30 30  1 DateTime 12:00
6da0: 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  :00]....  sql ex
6db0: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
6dc0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
6dd0: 20 56 41 4c 55 45 53 28 39 2c 20 3f 29 3b 22 20   VALUES(9, ?);" 
6de0: 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 70  \..      [list p
6df0: 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65 20 22  aram1 DateTime "
6e00: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
6e10: 63 65 6d 62 65 72 20 32 30 30 39 20 31 32 3a 30  cember 2009 12:0
6e20: 30 3a 30 30 22 5d 0d 0a 0d 0a 20 20 73 71 6c 20  0:00"]....  sql 
6e30: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
6e40: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
6e50: 79 29 20 56 41 4c 55 45 53 28 31 30 2c 20 3f 29  y) VALUES(10, ?)
6e60: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
6e70: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
6e80: 65 20 31 32 2f 31 36 2f 32 30 30 39 5d 0d 0a 0d  e 12/16/2009]...
6e90: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
6ea0: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
6eb0: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
6ec0: 28 31 31 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20  (11, ?);" \..   
6ed0: 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20     [list param1 
6ee0: 44 61 74 65 54 69 6d 65 20 31 32 3a 30 30 5d 0d  DateTime 12:00].
6ef0: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
6f00: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
6f10: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
6f20: 45 53 28 31 32 2c 20 3f 29 3b 22 20 5c 0d 0a 20  ES(12, ?);" \.. 
6f30: 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d       [list param
6f40: 31 20 44 61 74 65 54 69 6d 65 20 22 31 32 2f 31  1 DateTime "12/1
6f50: 36 2f 32 30 30 39 20 31 32 3a 30 30 22 5d 0d 0a  6/2009 12:00"]..
6f60: 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20  ..  sql execute 
6f70: 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
6f80: 2d 64 61 74 65 74 69 6d 65 66 6f 72 6d 61 74 20  -datetimeformat 
6f90: 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d  [getDateTimeForm
6fa0: 61 74 5d 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  at] $db \..     
6fb0: 20 22 53 45 4c 45 43 54 20 78 2c 20 43 41 53 54   "SELECT x, CAST
6fc0: 28 79 20 41 53 20 54 45 58 54 29 20 41 53 20 79  (y AS TEXT) AS y
6fd0: 32 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  2 FROM t1 ORDER 
6fe0: 42 59 20 78 3b 22 0d 0a 0d 0a 20 20 66 6f 72 65  BY x;"....  fore
6ff0: 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20  ach name [lsort 
7000: 2d 69 6e 74 65 67 65 72 20 5b 61 72 72 61 79 20  -integer [array 
7010: 6e 61 6d 65 73 20 72 6f 77 73 20 2d 72 65 67 65  names rows -rege
7020: 78 70 20 7b 5e 5c 64 2b 24 7d 5d 5d 20 7b 0d 0a  xp {^\d+$}]] {..
7030: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
7040: 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24  lt [list $name $
7050: 72 6f 77 73 28 24 6e 61 6d 65 29 5d 0d 0a 20 20  rows($name)]..  
7060: 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  }....  set resul
7070: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
7080: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
7090: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
70a0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6e 61  t -nocomplain na
70b0: 6d 65 20 72 6f 77 73 20 72 65 73 75 6c 74 20 64  me rows result d
70c0: 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
70d0: 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
70e0: 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
70f0: 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
7100: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
7110: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
7120: 65 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 5b 73  e} \..-result [s
7130: 75 62 73 74 20 7b 7b 31 20 7b 7b 78 20 31 7d 20  ubst {{1 {{x 1} 
7140: 7b 79 32 20 7b 57 65 64 6e 65 73 64 61 79 2c 20  {y2 {Wednesday, 
7150: 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39  16 December 2009
7160: 7d 7d 7d 7d 20 7b 32 20 7b 7b 78 20 32 7d 20 7b  }}}} {2 {{x 2} {
7170: 79 32 5c 0d 0a 31 32 3a 30 30 3a 30 30 7d 7d 7d  y2\..12:00:00}}}
7180: 20 7b 33 20 7b 7b 78 20 33 7d 20 7b 79 32 20 7b   {3 {{x 3} {y2 {
7190: 57 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65  Wednesday, 16 De
71a0: 63 65 6d 62 65 72 20 32 30 30 39 20 31 32 3a 30  cember 2009 12:0
71b0: 30 3a 30 30 7d 7d 7d 7d 20 7b 34 20 7b 7b 78 20  0:00}}}} {4 {{x 
71c0: 34 7d 5c 0d 0a 7b 79 32 20 31 32 2f 31 36 2f 32  4}\..{y2 12/16/2
71d0: 30 30 39 7d 7d 7d 20 7b 35 20 7b 7b 78 20 35 7d  009}}} {5 {{x 5}
71e0: 20 7b 79 32 20 31 32 3a 30 30 7d 7d 7d 20 7b 36   {y2 12:00}}} {6
71f0: 20 7b 7b 78 20 36 7d 20 7b 79 32 20 7b 31 32 2f   {{x 6} {y2 {12/
7200: 31 36 2f 32 30 30 39 20 31 32 3a 30 30 7d 7d 7d  16/2009 12:00}}}
7210: 7d 20 7b 37 5c 0d 0a 7b 7b 78 20 37 7d 20 7b 79  } {7\..{{x 7} {y
7220: 32 20 32 30 30 39 2d 31 32 2d 31 36 54 30 30 3a  2 2009-12-16T00:
7230: 30 30 3a 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d  00:00.0000000Z}}
7240: 7d 20 7b 38 20 7b 7b 78 20 38 7d 20 7b 79 32 5c  } {8 {{x 8} {y2\
7250: 0d 0a 24 7b 64 61 74 65 7d 54 31 32 3a 30 30 3a  ..${date}T12:00:
7260: 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b  00.0000000Z}}} {
7270: 39 20 7b 7b 78 20 39 7d 20 7b 79 32 20 32 30 30  9 {{x 9} {y2 200
7280: 39 2d 31 32 2d 31 36 54 31 32 3a 30 30 3a 30 30  9-12-16T12:00:00
7290: 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 5c 0d 0a 7b  .0000000Z}}}\..{
72a0: 31 30 20 7b 7b 78 20 31 30 7d 20 7b 79 32 20 32  10 {{x 10} {y2 2
72b0: 30 30 39 2d 31 32 2d 31 36 54 30 30 3a 30 30 3a  009-12-16T00:00:
72c0: 30 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b  00.0000000Z}}} {
72d0: 31 31 20 7b 7b 78 20 31 31 7d 20 7b 79 32 5c 0d  11 {{x 11} {y2\.
72e0: 0a 24 7b 64 61 74 65 7d 54 31 32 3a 30 30 3a 30  .${date}T12:00:0
72f0: 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b 31  0.0000000Z}}} {1
7300: 32 20 7b 7b 78 20 31 32 7d 20 7b 79 32 20 32 30  2 {{x 12} {y2 20
7310: 30 39 2d 31 32 2d 31 36 54 31 32 3a 30 30 3a 30  09-12-16T12:00:0
7320: 30 2e 30 30 30 30 30 30 30 5a 7d 7d 7d 7d 5d 7d  0.0000000Z}}}}]}
7330: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
7340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7380: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
7390: 74 65 73 74 20 64 61 74 61 2d 31 2e 31 35 20 7b  test data-1.15 {
73a0: 44 61 74 65 54 69 6d 65 20 75 73 69 6e 67 20 63  DateTime using c
73b0: 75 72 72 65 6e 74 20 63 75 6c 74 75 72 65 7d 20  urrent culture} 
73c0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
73d0: 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
73e0: 65 20 64 61 74 61 2d 31 2e 31 35 2e 64 62 5d 20  e data-1.15.db] 
73f0: 22 22 20 43 75 72 72 65 6e 74 43 75 6c 74 75 72  "" CurrentCultur
7400: 65 20 55 74 63 0d 0a 7d 20 2d 62 6f 64 79 20 7b  e Utc..} -body {
7410: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b  ..  set result [
7420: 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 71 6c 20 65  list]....  sql e
7430: 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41  xecute $db "CREA
7440: 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 49 4e  TE TABLE t1(x IN
7450: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7460: 59 20 41 53 43 2c 20 79 20 44 41 54 45 54 49 4d  Y ASC, y DATETIM
7470: 45 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  E);"....  sql ex
7480: 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20  ecute $db \..   
7490: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
74a0: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
74b0: 28 31 2c 20 27 57 65 64 6e 65 73 64 61 79 2c 20  (1, 'Wednesday, 
74c0: 31 36 20 44 65 63 65 6d 62 65 72 20 32 30 30 39  16 December 2009
74d0: 27 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  ');"....  sql ex
74e0: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
74f0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
7500: 20 56 41 4c 55 45 53 28 32 2c 20 27 31 32 3a 30   VALUES(2, '12:0
7510: 30 3a 30 30 27 29 3b 22 0d 0a 0d 0a 20 20 73 71  0:00');"....  sq
7520: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d  l execute $db \.
7530: 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49  .      "INSERT I
7540: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
7550: 4c 55 45 53 28 33 2c 20 27 57 65 64 6e 65 73 64  LUES(3, 'Wednesd
7560: 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20  ay, 16 December 
7570: 32 30 30 39 20 31 32 3a 30 30 3a 30 30 27 29 3b  2009 12:00:00');
7580: 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  "....  sql execu
7590: 74 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49  te $db "INSERT I
75a0: 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41  NTO t1 (x, y) VA
75b0: 4c 55 45 53 28 34 2c 20 27 31 32 2f 31 36 2f 32  LUES(4, '12/16/2
75c0: 30 30 39 27 29 3b 22 0d 0a 20 20 73 71 6c 20 65  009');"..  sql e
75d0: 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
75e0: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
75f0: 29 20 56 41 4c 55 45 53 28 35 2c 20 27 31 32 3a  ) VALUES(5, '12:
7600: 30 30 27 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78  00');"..  sql ex
7610: 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
7620: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
7630: 20 56 41 4c 55 45 53 28 36 2c 20 27 31 32 2f 31   VALUES(6, '12/1
7640: 36 2f 32 30 30 39 20 31 32 3a 30 30 27 29 3b 22  6/2009 12:00');"
7650: 0d 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74  ....  sql execut
7660: 65 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e  e $db "INSERT IN
7670: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
7680: 55 45 53 28 37 2c 20 3f 29 3b 22 20 5c 0d 0a 20  UES(7, ?);" \.. 
7690: 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d       [list param
76a0: 31 20 44 61 74 65 54 69 6d 65 20 22 57 65 64 6e  1 DateTime "Wedn
76b0: 65 73 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62  esday, 16 Decemb
76c0: 65 72 20 32 30 30 39 22 5d 0d 0a 0d 0a 20 20 73  er 2009"]....  s
76d0: 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
76e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
76f0: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 38 2c 20  x, y) VALUES(8, 
7700: 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  ?);" \..      [l
7710: 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54  ist param1 DateT
7720: 69 6d 65 20 31 32 3a 30 30 3a 30 30 5d 0d 0a 0d  ime 12:00:00]...
7730: 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
7740: 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  db "INSERT INTO 
7750: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
7760: 28 39 2c 20 3f 29 3b 22 20 5c 0d 0a 20 20 20 20  (9, ?);" \..    
7770: 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 44    [list param1 D
7780: 61 74 65 54 69 6d 65 20 22 57 65 64 6e 65 73 64  ateTime "Wednesd
7790: 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65 72 20  ay, 16 December 
77a0: 32 30 30 39 20 31 32 3a 30 30 3a 30 30 22 5d 0d  2009 12:00:00"].
77b0: 0a 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65  ...  sql execute
77c0: 20 24 64 62 20 22 49 4e 53 45 52 54 20 49 4e 54   $db "INSERT INT
77d0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
77e0: 45 53 28 31 30 2c 20 3f 29 3b 22 20 5c 0d 0a 20  ES(10, ?);" \.. 
77f0: 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d       [list param
7800: 31 20 44 61 74 65 54 69 6d 65 20 31 32 2f 31 36  1 DateTime 12/16
7810: 2f 32 30 30 39 5d 0d 0a 0d 0a 20 20 73 71 6c 20  /2009]....  sql 
7820: 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
7830: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
7840: 79 29 20 56 41 4c 55 45 53 28 31 31 2c 20 3f 29  y) VALUES(11, ?)
7850: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73  ;" \..      [lis
7860: 74 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d  t param1 DateTim
7870: 65 20 31 32 3a 30 30 5d 0d 0a 0d 0a 20 20 73 71  e 12:00]....  sq
7880: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 49  l execute $db "I
7890: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
78a0: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 32 2c 20  , y) VALUES(12, 
78b0: 3f 29 3b 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c  ?);" \..      [l
78c0: 69 73 74 20 70 61 72 61 6d 31 20 44 61 74 65 54  ist param1 DateT
78d0: 69 6d 65 20 22 31 32 2f 31 36 2f 32 30 30 39 20  ime "12/16/2009 
78e0: 31 32 3a 30 30 22 5d 0d 0a 0d 0a 20 20 73 71 6c  12:00"]....  sql
78f0: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
7900: 65 20 72 65 61 64 65 72 20 2d 64 61 74 65 74 69  e reader -dateti
7910: 6d 65 66 6f 72 6d 61 74 20 5b 67 65 74 44 61 74  meformat [getDat
7920: 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 24 64 62  eTimeFormat] $db
7930: 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43   \..      "SELEC
7940: 54 20 78 2c 20 43 41 53 54 28 79 20 41 53 20 54  T x, CAST(y AS T
7950: 45 58 54 29 20 41 53 20 79 32 20 46 52 4f 4d 20  EXT) AS y2 FROM 
7960: 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b 22 0d  t1 ORDER BY x;".
7970: 0a 0d 0a 20 20 66 6f 72 65 61 63 68 20 6e 61 6d  ...  foreach nam
7980: 65 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65  e [lsort -intege
7990: 72 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 72  r [array names r
79a0: 6f 77 73 20 2d 72 65 67 65 78 70 20 7b 5e 5c 64  ows -regexp {^\d
79b0: 2b 24 7d 5d 5d 20 7b 0d 0a 20 20 20 20 6c 61 70  +$}]] {..    lap
79c0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73  pend result [lis
79d0: 74 20 24 6e 61 6d 65 20 24 72 6f 77 73 28 24 6e  t $name $rows($n
79e0: 61 6d 65 29 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ame)]..  }....  
79f0: 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  set result..} -c
7a00: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
7a10: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
7a20: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
7a30: 6d 70 6c 61 69 6e 20 6e 61 6d 65 20 72 6f 77 73  mplain name rows
7a40: 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
7a50: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
7a60: 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 63 75  nts \..{eagle cu
7a70: 6c 74 75 72 65 2e 69 6e 76 61 72 69 61 6e 74 20  lture.invariant 
7a80: 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
7a90: 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
7aa0: 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74  TA SQLite\..Syst
7ab0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
7ac0: 2d 72 65 73 75 6c 74 20 5b 73 75 62 73 74 20 7b  -result [subst {
7ad0: 7b 31 20 7b 7b 78 20 31 7d 20 7b 79 32 20 7b 57  {1 {{x 1} {y2 {W
7ae0: 65 64 6e 65 73 64 61 79 2c 20 31 36 20 44 65 63  ednesday, 16 Dec
7af0: 65 6d 62 65 72 5c 0d 0a 32 30 30 39 7d 7d 7d 7d  ember\..2009}}}}
7b00: 20 7b 32 20 7b 7b 78 20 32 7d 20 7b 79 32 20 31   {2 {{x 2} {y2 1
7b10: 32 3a 30 30 3a 30 30 7d 7d 7d 20 7b 33 20 7b 7b  2:00:00}}} {3 {{
7b20: 78 20 33 7d 20 7b 79 32 20 7b 57 65 64 6e 65 73  x 3} {y2 {Wednes
7b30: 64 61 79 2c 20 31 36 20 44 65 63 65 6d 62 65 72  day, 16 December
7b40: 20 32 30 30 39 5c 0d 0a 31 32 3a 30 30 3a 30 30   2009\..12:00:00
7b50: 7d 7d 7d 7d 20 7b 34 20 7b 7b 78 20 34 7d 20 7b  }}}} {4 {{x 4} {
7b60: 79 32 20 31 32 2f 31 36 2f 32 30 30 39 7d 7d 7d  y2 12/16/2009}}}
7b70: 20 7b 35 20 7b 7b 78 20 35 7d 20 7b 79 32 20 31   {5 {{x 5} {y2 1
7b80: 32 3a 30 30 7d 7d 7d 20 7b 36 20 7b 7b 78 20 36  2:00}}} {6 {{x 6
7b90: 7d 20 7b 79 32 5c 0d 0a 7b 31 32 2f 31 36 2f 32  } {y2\..{12/16/2
7ba0: 30 30 39 20 31 32 3a 30 30 7d 7d 7d 7d 20 7b 37  009 12:00}}}} {7
7bb0: 20 7b 7b 78 20 37 7d 20 7b 79 32 20 32 30 30 39   {{x 7} {y2 2009
7bc0: 2d 31 32 2d 31 36 54 30 30 3a 30 30 3a 30 30 2e  -12-16T00:00:00.
7bd0: 30 30 30 30 30 30 30 5a 7d 7d 7d 20 7b 38 20 7b  0000000Z}}} {8 {
7be0: 7b 78 20 38 7d 5c 0d 0a 7b 79 32 20 24 7b 64 61  {x 8}\..{y2 ${da
7bf0: 74 65 7d 54 31 32 3a 30 30 3a 30 30 2e 30 30 30  te}T12:00:00.000
7c00: 30 30 30 30 5a 7d 7d 7d 20 7b 39 20 7b 7b 78 20  0000Z}}} {9 {{x 
7c10: 39 7d 20 7b 79 32 20 32 30 30 39 2d 31 32 2d 31  9} {y2 2009-12-1
7c20: 36 54 31 32 3a 30 30 3a 30 30 2e 30 30 30 30 30  6T12:00:00.00000
7c30: 30 30 5a 7d 7d 7d 5c 0d 0a 7b 31 30 20 7b 7b 78  00Z}}}\..{10 {{x
7c40: 20 31 30 7d 20 7b 79 32 20 32 30 30 39 2d 31 32   10} {y2 2009-12
7c50: 2d 31 36 54 30 30 3a 30 30 3a 30 30 2e 30 30 30  -16T00:00:00.000
7c60: 30 30 30 30 5a 7d 7d 7d 20 7b 31 31 20 7b 7b 78  0000Z}}} {11 {{x
7c70: 20 31 31 7d 20 7b 79 32 5c 0d 0a 24 7b 64 61 74   11} {y2\..${dat
7c80: 65 7d 54 31 32 3a 30 30 3a 30 30 2e 30 30 30 30  e}T12:00:00.0000
7c90: 30 30 30 5a 7d 7d 7d 20 7b 31 32 20 7b 7b 78 20  000Z}}} {12 {{x 
7ca0: 31 32 7d 20 7b 79 32 20 32 30 30 39 2d 31 32 2d  12} {y2 2009-12-
7cb0: 31 36 54 31 32 3a 30 30 3a 30 30 2e 30 30 30 30  16T12:00:00.0000
7cc0: 30 30 30 5a 7d 7d 7d 7d 5d 7d 0d 0a 0d 0a 23 23  000Z}}}}]}....##
7cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d10: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
7d20: 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  .unset -nocompla
7d30: 69 6e 20 64 61 74 65 0d 0a 0d 0a 23 23 23 23 23  in date....#####
7d40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7d80: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
7d90: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
7da0: 2d 31 2e 31 36 20 7b 53 51 4c 69 74 65 43 6f 6e  -1.16 {SQLiteCon
7db0: 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75 69  nectionStringBui
7dc0: 6c 64 65 72 20 44 61 74 65 54 69 6d 65 7d 20 2d  lder DateTime} -
7dd0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
7de0: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
7df0: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
7e00: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 0d  ctive NextId]...
7e10: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
7e20: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
7e30: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
7e40: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
7e50: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
7e60: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
7e70: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a  Data.SQLite;....
7e80: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44      namespace _D
7e90: 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20  ynamic${id}..   
7ea0: 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63   {..      public
7eb0: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65   static class Te
7ec0: 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b  st${id}..      {
7ed0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
7ee0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
7ef0: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  etConnectionStri
7f00: 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ng(..          s
7f10: 74 72 69 6e 67 20 66 6f 72 6d 61 74 2c 0d 0a 20  tring format,.. 
7f20: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
7f30: 6b 69 6e 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  kind,..         
7f40: 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 53 74   string formatSt
7f50: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ring..          
7f60: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7f70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
7f80: 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75  nnectionStringBu
7f90: 69 6c 64 65 72 20 62 75 69 6c 64 65 72 20 3d 0d  ilder builder =.
7fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e  .              n
7fb0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
7fc0: 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ionStringBuilder
7fd0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
7fe0: 20 62 75 69 6c 64 65 72 2e 41 64 64 28 22 44 61   builder.Add("Da
7ff0: 74 61 20 53 6f 75 72 63 65 22 2c 20 22 74 65 73  ta Source", "tes
8000: 74 2e 64 62 22 29 3b 0d 0a 20 20 20 20 20 20 20  t.db");..       
8010: 20 20 20 62 75 69 6c 64 65 72 2e 41 64 64 28 22     builder.Add("
8020: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 22 2c  DateTimeFormat",
8030: 20 66 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20   format);..     
8040: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 64 64       builder.Add
8050: 28 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22 2c  ("DateTimeKind",
8060: 20 6b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20   kind);..       
8070: 20 20 20 62 75 69 6c 64 65 72 2e 41 64 64 28 22     builder.Add("
8080: 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74  DateTimeFormatSt
8090: 72 69 6e 67 22 2c 20 66 6f 72 6d 61 74 53 74 72  ring", formatStr
80a0: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
80b0: 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c 64 65     return builde
80c0: 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  r.ToString();.. 
80d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
80e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8130: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
8140: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
8150: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8160: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8170: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
8180: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
8190: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65  ..  }] true true
81a0: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
81b0: 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
81c0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
81d0: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
81e0: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
81f0: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
8200: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
8210: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
8220: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
8230: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
8240: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
8250: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
8260: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
8270: 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f  id} GetConnectio
8280: 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20  nString \..     
8290: 20 20 20 20 20 20 20 6e 75 6c 6c 20 6e 75 6c 6c         null null
82a0: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 20 72   null..      } r
82b0: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
82c0: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
82d0: 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  lt \..      [exp
82e0: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
82f0: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
8300: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
8310: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
8320: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 43 6f  .Test${id} GetCo
8330: 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 5c  nnectionString \
8340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 65  ..            De
8350: 66 61 75 6c 74 20 6e 75 6c 6c 20 6e 75 6c 6c 0d  fault null null.
8360: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
8370: 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
8380: 22 5d 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a  "]}] $result \..
8390: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
83a0: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
83b0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
83c0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
83d0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
83e0: 7b 69 64 7d 20 47 65 74 43 6f 6e 6e 65 63 74 69  {id} GetConnecti
83f0: 6f 6e 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20  onString \..    
8400: 20 20 20 20 20 20 20 20 6e 75 6c 6c 20 55 6e 73          null Uns
8410: 70 65 63 69 66 69 65 64 20 6e 75 6c 6c 0d 0a 20  pecified null.. 
8420: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
8430: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
8440: 7d 5d 20 24 72 65 73 75 6c 74 20 5c 0d 0a 20 20  }] $result \..  
8450: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
8460: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
8470: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
8480: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
8490: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
84a0: 64 7d 20 47 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  d} GetConnection
84b0: 53 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20  String \..      
84c0: 20 20 20 20 20 20 49 53 4f 38 36 30 31 20 55 74        ISO8601 Ut
84d0: 63 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 20  c null..      } 
84e0: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
84f0: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73  esult ""]}] $res
8500: 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  ult \..      [ex
8510: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
8520: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
8530: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
8540: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
8550: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 43  }.Test${id} GetC
8560: 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20  onnectionString 
8570: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  \..            T
8580: 69 63 6b 73 20 4c 6f 63 61 6c 20 79 79 79 79 2d  icks Local yyyy-
8590: 4d 4d 2d 64 64 0d 0a 20 20 20 20 20 20 7d 20 72  MM-dd..      } r
85a0: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
85b0: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
85c0: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
85d0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
85e0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 72 65 73  plain result res
85f0: 75 6c 74 73 20 65 72 72 6f 72 73 20 63 6f 64 65  ults errors code
8600: 20 69 64 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69   id..} -constrai
8610: 6e 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42  nts {eagle monoB
8620: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
8630: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
8640: 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61  Lite\..System.Da
8650: 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70 69 6c  ta.SQLite compil
8660: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
8670: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b  regexp -result {
8680: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
8690: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
86a0: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
86b0: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 44 61 74 61 20  + \{\} 0 \{Data 
86c0: 53 6f 75 72 63 65 3d 74 65 73 74 5c 2e 64 62 5c  Source=test\.db\
86d0: 7d 20 30 5c 0d 0a 5c 7b 44 61 74 61 20 53 6f 75  } 0\..\{Data Sou
86e0: 72 63 65 3d 74 65 73 74 5c 2e 64 62 3b 44 61 74  rce=test\.db;Dat
86f0: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 28 3f 3a 44  eTimeFormat=(?:D
8700: 65 66 61 75 6c 74 7c 49 53 4f 38 36 30 31 29 5c  efault|ISO8601)\
8710: 7d 20 30 20 5c 7b 44 61 74 61 5c 0d 0a 53 6f 75  } 0 \{Data\..Sou
8720: 72 63 65 3d 74 65 73 74 5c 2e 64 62 3b 44 61 74  rce=test\.db;Dat
8730: 65 54 69 6d 65 4b 69 6e 64 3d 55 6e 73 70 65 63  eTimeKind=Unspec
8740: 69 66 69 65 64 5c 7d 20 30 20 5c 7b 44 61 74 61  ified\} 0 \{Data
8750: 5c 0d 0a 53 6f 75 72 63 65 3d 74 65 73 74 5c 2e  \..Source=test\.
8760: 64 62 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  db;DateTimeForma
8770: 74 3d 28 3f 3a 44 65 66 61 75 6c 74 7c 49 53 4f  t=(?:Default|ISO
8780: 38 36 30 31 29 3b 44 61 74 65 54 69 6d 65 4b 69  8601);DateTimeKi
8790: 6e 64 3d 55 74 63 5c 7d 20 30 20 5c 7b 44 61 74  nd=Utc\} 0 \{Dat
87a0: 61 5c 0d 0a 53 6f 75 72 63 65 3d 74 65 73 74 5c  a\..Source=test\
87b0: 2e 64 62 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d  .db;DateTimeForm
87c0: 61 74 3d 54 69 63 6b 73 3b 44 61 74 65 54 69 6d  at=Ticks;DateTim
87d0: 65 4b 69 6e 64 3d 4c 6f 63 61 6c 3b 44 61 74 65  eKind=Local;Date
87e0: 54 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67  TimeFormatString
87f0: 3d 79 79 79 79 2d 4d 4d 2d 64 64 5c 7d 24 7d 7d  =yyyy-MM-dd\}$}}
8800: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
8810: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8820: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8850: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
8860: 74 65 73 74 20 64 61 74 61 2d 31 2e 31 37 20 7b  test data-1.17 {
8870: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8880: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 70 72  StringBuilder pr
8890: 6f 70 65 72 74 69 65 73 7d 20 2d 62 6f 64 79 20  operties} -body 
88a0: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
88b0: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
88c0: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
88d0: 20 4e 65 78 74 49 64 5d 0d 0a 0d 0a 20 20 75 6e   NextId]....  un
88e0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
88f0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
8900: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
8910: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
8920: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
8930: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
8940: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
8950: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
8960: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 65 66  using System.Ref
8970: 6c 65 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 75 73  lection;..    us
8980: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
8990: 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ....    namespac
89a0: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d  e _Dynamic${id}.
89b0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
89c0: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
89d0: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
89e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 72     {..        pr
89f0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
8a00: 69 6e 67 20 54 6f 48 65 78 53 74 72 69 6e 67 28  ing ToHexString(
8a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65  ..          byte
8a20: 5c 5b 5c 5d 20 61 72 72 61 79 0d 0a 20 20 20 20  \[\] array..    
8a30: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8a40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
8a50: 20 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29   (array == null)
8a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8a70: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
8a80: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75          StringBu
8a90: 69 6c 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e  ilder result = n
8aa0: 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
8ab0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
8ac0: 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72   int length = ar
8ad0: 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  ray.Length;.... 
8ae0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
8af0: 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
8b00: 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64  ex < length; ind
8b10: 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
8b20: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
8b30: 46 6f 72 6d 61 74 28 22 7b 30 3a 78 32 7d 22 2c  Format("{0:x2}",
8b40: 20 61 72 72 61 79 5c 5b 69 6e 64 65 78 5c 5d 29   array\[index\])
8b50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ;....          r
8b60: 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54 6f 53  eturn result.ToS
8b70: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
8b80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bd0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8be0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
8bf0: 73 74 72 69 6e 67 20 47 65 74 43 6f 6e 6e 65 63  string GetConnec
8c00: 74 69 6f 6e 53 74 72 69 6e 67 28 0d 0a 20 20 20  tionString(..   
8c10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
8c20: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  y,..          st
8c30: 72 69 6e 67 20 76 61 6c 75 65 2c 0d 0a 20 20 20  ring value,..   
8c40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 72         string pr
8c50: 6f 70 65 72 74 79 4e 61 6d 65 0d 0a 20 20 20 20  opertyName..    
8c60: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8c70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
8c80: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74  LiteConnectionSt
8c90: 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75 69 6c  ringBuilder buil
8ca0: 64 65 72 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  der =..         
8cb0: 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 43       new SQLiteC
8cc0: 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42  onnectionStringB
8cd0: 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20  uilder();....   
8ce0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 21         if (key !
8cf0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8d00: 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 64 64       builder.Add
8d10: 28 6b 65 79 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d  (key, value);...
8d20: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
8d30: 74 20 70 72 6f 70 65 72 74 79 56 61 6c 75 65 20  t propertyValue 
8d40: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
8d50: 20 20 20 20 20 69 66 20 28 70 72 6f 70 65 72 74       if (propert
8d60: 79 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  yName != null)..
8d70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8d80: 20 20 20 20 20 20 20 20 20 70 72 6f 70 65 72 74           propert
8d90: 79 56 61 6c 75 65 20 3d 20 74 79 70 65 6f 66 28  yValue = typeof(
8da0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8db0: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 29 2e 49  StringBuilder).I
8dc0: 6e 76 6f 6b 65 4d 65 6d 62 65 72 28 0d 0a 20 20  nvokeMember(..  
8dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
8de0: 6f 70 65 72 74 79 4e 61 6d 65 2c 20 42 69 6e 64  opertyName, Bind
8df0: 69 6e 67 46 6c 61 67 73 2e 49 6e 73 74 61 6e 63  ingFlags.Instanc
8e00: 65 20 7c 20 42 69 6e 64 69 6e 67 46 6c 61 67 73  e | BindingFlags
8e10: 2e 50 75 62 6c 69 63 20 7c 0d 0a 20 20 20 20 20  .Public |..     
8e20: 20 20 20 20 20 20 20 20 20 20 20 42 69 6e 64 69             Bindi
8e30: 6e 67 46 6c 61 67 73 2e 47 65 74 50 72 6f 70 65  ngFlags.GetPrope
8e40: 72 74 79 2c 20 6e 75 6c 6c 2c 20 62 75 69 6c 64  rty, null, build
8e50: 65 72 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  er, null);..    
8e60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8e70: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
8e80: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
8e90: 7b 31 7d 22 2c 20 28 70 72 6f 70 65 72 74 79 56  {1}", (propertyV
8ea0: 61 6c 75 65 20 69 73 20 62 79 74 65 5c 5b 5c 5d  alue is byte\[\]
8eb0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
8ec0: 20 20 20 54 6f 48 65 78 53 74 72 69 6e 67 28 28     ToHexString((
8ed0: 62 79 74 65 5c 5b 5c 5d 29 70 72 6f 70 65 72 74  byte\[\])propert
8ee0: 79 56 61 6c 75 65 29 20 3a 20 70 72 6f 70 65 72  yValue) : proper
8ef0: 74 79 56 61 6c 75 65 2c 20 62 75 69 6c 64 65 72  tyValue, builder
8f00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
8f10: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
8f70: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
8f80: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
8fa0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
8fb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
8fc0: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
8fd0: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
8fe0: 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d  ts errors System
8ff0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
9000: 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
9010: 65 73 75 6c 74 73 20 24 63 6f 64 65 20 5b 65 78  esults $code [ex
9020: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
9030: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
9040: 72 73 20 3a 20 22 22 7d 5d 0d 0a 0d 0a 20 20 69  rs : ""}]....  i
9050: 66 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  f {$code eq "Ok"
9060: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65  } then {..    se
9070: 74 20 6b 65 79 73 20 5b 6c 69 73 74 20 6e 75 6c  t keys [list nul
9080: 6c 20 56 65 72 73 69 6f 6e 20 53 79 6e 63 68 72  l Version Synchr
9090: 6f 6e 6f 75 73 20 55 73 65 55 54 46 31 36 45 6e  onous UseUTF16En
90a0: 63 6f 64 69 6e 67 20 50 6f 6f 6c 69 6e 67 20 5c  coding Pooling \
90b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
90c0: 20 20 20 20 20 42 69 6e 61 72 79 47 55 49 44 20       BinaryGUID 
90d0: 22 44 61 74 61 20 53 6f 75 72 63 65 22 20 55 72  "Data Source" Ur
90e0: 69 20 46 75 6c 6c 55 72 69 20 22 44 65 66 61 75  i FullUri "Defau
90f0: 6c 74 20 54 69 6d 65 6f 75 74 22 20 5c 0d 0a 20  lt Timeout" \.. 
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9110: 20 20 45 6e 6c 69 73 74 20 46 61 69 6c 49 66 4d    Enlist FailIfM
9120: 69 73 73 69 6e 67 20 22 4c 65 67 61 63 79 20 46  issing "Legacy F
9130: 6f 72 6d 61 74 22 20 22 52 65 61 64 20 4f 6e 6c  ormat" "Read Onl
9140: 79 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  y" \..          
9150: 20 20 20 20 20 20 20 20 20 50 61 73 73 77 6f 72           Passwor
9160: 64 20 22 50 61 67 65 20 53 69 7a 65 22 20 22 4d  d "Page Size" "M
9170: 61 78 20 50 61 67 65 20 43 6f 75 6e 74 22 20 22  ax Page Count" "
9180: 43 61 63 68 65 20 53 69 7a 65 22 20 5c 0d 0a 20  Cache Size" \.. 
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91a0: 20 20 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74    DateTimeFormat
91b0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20 44 61   DateTimeKind Da
91c0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74 72 69  teTimeFormatStri
91d0: 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ng \..          
91e0: 20 20 20 20 20 20 20 20 20 42 61 73 65 53 63 68           BaseSch
91f0: 65 6d 61 4e 61 6d 65 20 22 4a 6f 75 72 6e 61 6c  emaName "Journal
9200: 20 4d 6f 64 65 22 20 22 44 65 66 61 75 6c 74 20   Mode" "Default 
9210: 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 22 20  IsolationLevel" 
9220: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
9230: 20 20 20 20 20 20 22 46 6f 72 65 69 67 6e 20 4b        "Foreign K
9240: 65 79 73 22 20 46 6c 61 67 73 20 53 65 74 44 65  eys" Flags SetDe
9250: 66 61 75 6c 74 73 20 54 6f 46 75 6c 6c 50 61 74  faults ToFullPat
9260: 68 20 48 65 78 50 61 73 73 77 6f 72 64 20 5c 0d  h HexPassword \.
9270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9280: 20 20 20 20 44 65 66 61 75 6c 74 44 62 54 79 70      DefaultDbTyp
9290: 65 20 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d  e DefaultTypeNam
92a0: 65 20 4e 6f 53 68 61 72 65 64 46 6c 61 67 73 5d  e NoSharedFlags]
92b0: 0d 0a 0d 0a 20 20 20 20 73 65 74 20 76 61 6c 75  ....    set valu
92c0: 65 73 20 5b 6c 69 73 74 20 6e 75 6c 6c 20 33 20  es [list null 3 
92d0: 4e 6f 72 6d 61 6c 20 54 72 75 65 20 46 61 6c 73  Normal True Fals
92e0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..           
92f0: 20 20 20 20 20 20 20 20 20 20 54 72 75 65 20 74            True t
9300: 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 20 66  est.db test.db f
9310: 69 6c 65 3a 74 65 73 74 2e 64 62 20 36 30 20 5c  ile:test.db 60 \
9320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9330: 20 20 20 20 20 20 20 46 61 6c 73 65 20 54 72 75         False Tru
9340: 65 20 46 61 6c 73 65 20 54 72 75 65 20 5c 0d 0a  e False True \..
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 20 20 20 20 73 65 63 72 65 74 20 34 30 39 36       secret 4096
9370: 20 31 30 32 34 20 38 31 39 32 20 5c 0d 0a 20 20   1024 8192 \..  
9380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9390: 20 20 20 55 6e 69 78 45 70 6f 63 68 20 55 74 63     UnixEpoch Utc
93a0: 20 79 79 79 79 2d 4d 4d 2d 64 64 20 73 71 6c 69   yyyy-MM-dd sqli
93b0: 74 65 5f 73 63 68 65 6d 61 20 5c 0d 0a 20 20 20  te_schema \..   
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 4d 65 6d 6f 72 79 20 53 65 72 69 61 6c 69    Memory Seriali
93e0: 7a 61 62 6c 65 20 46 61 6c 73 65 20 5c 0d 0a 20  zable False \.. 
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9400: 20 20 20 20 44 65 66 61 75 6c 74 20 46 61 6c 73      Default Fals
9410: 65 20 46 61 6c 73 65 20 37 33 36 35 36 33 37 32  e False 73656372
9420: 36 35 37 34 20 53 74 72 69 6e 67 20 5c 0d 0a 20  6574 String \.. 
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 20 20 54 45 58 54 20 54 72 75 65 5d 0d 0a      TEXT True]..
9450: 0d 0a 20 20 20 20 73 65 74 20 70 72 6f 70 65 72  ..    set proper
9460: 74 79 4e 61 6d 65 73 20 5b 6c 69 73 74 20 6e 75  tyNames [list nu
9470: 6c 6c 20 56 65 72 73 69 6f 6e 20 53 79 6e 63 4d  ll Version SyncM
9480: 6f 64 65 20 55 73 65 55 54 46 31 36 45 6e 63 6f  ode UseUTF16Enco
9490: 64 69 6e 67 20 50 6f 6f 6c 69 6e 67 20 5c 0d 0a  ding Pooling \..
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 42 69 6e 61              Bina
94c0: 72 79 47 55 49 44 20 44 61 74 61 53 6f 75 72 63  ryGUID DataSourc
94d0: 65 20 55 72 69 20 46 75 6c 6c 55 72 69 20 44 65  e Uri FullUri De
94e0: 66 61 75 6c 74 54 69 6d 65 6f 75 74 20 5c 0d 0a  faultTimeout \..
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9500: 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 6c 69              Enli
9510: 73 74 20 46 61 69 6c 49 66 4d 69 73 73 69 6e 67  st FailIfMissing
9520: 20 4c 65 67 61 63 79 46 6f 72 6d 61 74 20 52 65   LegacyFormat Re
9530: 61 64 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20  adOnly \..      
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 20 20 20 20 20 20 50 61 73 73 77 6f 72 64 20 50        Password P
9560: 61 67 65 53 69 7a 65 20 4d 61 78 50 61 67 65 43  ageSize MaxPageC
9570: 6f 75 6e 74 20 43 61 63 68 65 53 69 7a 65 20 5c  ount CacheSize \
9580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 61                Da
95a0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 44 61 74  teTimeFormat Dat
95b0: 65 54 69 6d 65 4b 69 6e 64 20 44 61 74 65 54 69  eTimeKind DateTi
95c0: 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e 67 20 5c  meFormatString \
95d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 61                Ba
95f0: 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 4a 6f 75  seSchemaName Jou
9600: 72 6e 61 6c 4d 6f 64 65 20 44 65 66 61 75 6c 74  rnalMode Default
9610: 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 5c  IsolationLevel \
9620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
9640: 72 65 69 67 6e 4b 65 79 73 20 46 6c 61 67 73 20  reignKeys Flags 
9650: 53 65 74 44 65 66 61 75 6c 74 73 20 54 6f 46 75  SetDefaults ToFu
9660: 6c 6c 50 61 74 68 20 5c 0d 0a 20 20 20 20 20 20  llPath \..      
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9680: 20 20 20 20 20 20 48 65 78 50 61 73 73 77 6f 72        HexPasswor
9690: 64 20 44 65 66 61 75 6c 74 44 62 54 79 70 65 20  d DefaultDbType 
96a0: 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 20  DefaultTypeName 
96b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
96d0: 6f 53 68 61 72 65 64 46 6c 61 67 73 5d 0d 0a 0d  oSharedFlags]...
96e0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6b 65 79  .    foreach key
96f0: 20 24 6b 65 79 73 20 76 61 6c 75 65 20 24 76 61   $keys value $va
9700: 6c 75 65 73 20 70 72 6f 70 65 72 74 79 4e 61 6d  lues propertyNam
9710: 65 20 24 70 72 6f 70 65 72 74 79 4e 61 6d 65 73  e $propertyNames
9720: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f   {..      set co
9730: 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  de [catch {..   
9740: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
9750: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
9760: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 43 6f  .Test${id} GetCo
9770: 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 5c  nnectionString \
9780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6b  ..            $k
9790: 65 79 20 24 76 61 6c 75 65 20 24 70 72 6f 70 65  ey $value $prope
97a0: 72 74 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  rtyName..      }
97b0: 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20   result]....    
97c0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
97d0: 73 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 0d  s $code $result.
97e0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20  .    }..  }.... 
97f0: 20 73 65 74 20 72 65 73 75 6c 74 73 0d 0a 7d 20   set results..} 
9800: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 75 6e  -cleanup {..  un
9810: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
9820: 70 72 6f 70 65 72 74 79 4e 61 6d 65 20 70 72 6f  propertyName pro
9830: 70 65 72 74 79 4e 61 6d 65 73 20 76 61 6c 75 65  pertyNames value
9840: 20 6b 65 79 20 76 61 6c 75 65 73 20 6b 65 79 73   key values keys
9850: 20 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20   result \..     
9860: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
9870: 63 6f 64 65 20 69 64 0d 0a 7d 20 2d 63 6f 6e 73  code id..} -cons
9880: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d  traints {eagle m
9890: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
98a0: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
98b0: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
98c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f  m.Data.SQLite co
98d0: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
98e0: 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
98f0: 6c 74 20 5c 0d 0a 7b 5e 53 79 73 74 65 6d 23 43  lt \..{^System#C
9900: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
9910: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
9920: 5c 64 2b 20 4f 6b 20 5c 7b 5c 7d 20 30 20 5c 7b  \d+ Ok \{\} 0 \{
9930: 2c 20 5c 7d 20 30 20 5c 7b 33 2c 5c 0d 0a 56 65  , \} 0 \{3,\..Ve
9940: 72 73 69 6f 6e 3d 33 5c 7d 20 30 20 5c 7b 4e 6f  rsion=3\} 0 \{No
9950: 72 6d 61 6c 2c 20 53 79 6e 63 68 72 6f 6e 6f 75  rmal, Synchronou
9960: 73 3d 4e 6f 72 6d 61 6c 5c 7d 20 30 20 5c 7b 54  s=Normal\} 0 \{T
9970: 72 75 65 2c 20 55 73 65 55 54 46 31 36 45 6e 63  rue, UseUTF16Enc
9980: 6f 64 69 6e 67 3d 54 72 75 65 5c 7d 5c 0d 0a 30  oding=True\}\..0
9990: 20 5c 7b 46 61 6c 73 65 2c 20 50 6f 6f 6c 69 6e   \{False, Poolin
99a0: 67 3d 46 61 6c 73 65 5c 7d 20 30 20 5c 7b 54 72  g=False\} 0 \{Tr
99b0: 75 65 2c 20 42 69 6e 61 72 79 47 55 49 44 3d 54  ue, BinaryGUID=T
99c0: 72 75 65 5c 7d 20 30 20 5c 7b 74 65 73 74 5c 2e  rue\} 0 \{test\.
99d0: 64 62 2c 20 44 61 74 61 5c 0d 0a 53 6f 75 72 63  db, Data\..Sourc
99e0: 65 3d 74 65 73 74 5c 2e 64 62 5c 7d 20 30 20 5c  e=test\.db\} 0 \
99f0: 7b 74 65 73 74 5c 2e 64 62 2c 20 55 72 69 3d 74  {test\.db, Uri=t
9a00: 65 73 74 5c 2e 64 62 5c 7d 20 30 20 5c 7b 66 69  est\.db\} 0 \{fi
9a10: 6c 65 3a 74 65 73 74 2e 64 62 2c 5c 0d 0a 46 75  le:test.db,\..Fu
9a20: 6c 6c 55 72 69 3d 66 69 6c 65 3a 74 65 73 74 5c  llUri=file:test\
9a30: 2e 64 62 5c 7d 20 30 20 5c 7b 36 30 2c 20 44 65  .db\} 0 \{60, De
9a40: 66 61 75 6c 74 20 54 69 6d 65 6f 75 74 3d 36 30  fault Timeout=60
9a50: 5c 7d 20 30 20 5c 7b 46 61 6c 73 65 2c 20 45 6e  \} 0 \{False, En
9a60: 6c 69 73 74 3d 46 61 6c 73 65 5c 7d 5c 0d 0a 30  list=False\}\..0
9a70: 20 5c 7b 54 72 75 65 2c 20 46 61 69 6c 49 66 4d   \{True, FailIfM
9a80: 69 73 73 69 6e 67 3d 54 72 75 65 5c 7d 20 30 20  issing=True\} 0 
9a90: 5c 7b 46 61 6c 73 65 2c 20 4c 65 67 61 63 79 20  \{False, Legacy 
9aa0: 46 6f 72 6d 61 74 3d 46 61 6c 73 65 5c 7d 20 30  Format=False\} 0
9ab0: 20 5c 7b 54 72 75 65 2c 20 52 65 61 64 5c 0d 0a   \{True, Read\..
9ac0: 4f 6e 6c 79 3d 54 72 75 65 5c 7d 20 30 20 5c 7b  Only=True\} 0 \{
9ad0: 73 65 63 72 65 74 2c 20 50 61 73 73 77 6f 72 64  secret, Password
9ae0: 3d 73 65 63 72 65 74 5c 7d 20 30 20 5c 7b 34 30  =secret\} 0 \{40
9af0: 39 36 2c 20 50 61 67 65 20 53 69 7a 65 3d 34 30  96, Page Size=40
9b00: 39 36 5c 7d 20 30 20 5c 7b 31 30 32 34 2c 5c 0d  96\} 0 \{1024,\.
9b10: 0a 4d 61 78 20 50 61 67 65 20 43 6f 75 6e 74 3d  .Max Page Count=
9b20: 31 30 32 34 5c 7d 20 30 20 5c 7b 38 31 39 32 2c  1024\} 0 \{8192,
9b30: 20 43 61 63 68 65 20 53 69 7a 65 3d 38 31 39 32   Cache Size=8192
9b40: 5c 7d 20 30 20 5c 7b 55 6e 69 78 45 70 6f 63 68  \} 0 \{UnixEpoch
9b50: 2c 5c 0d 0a 44 61 74 65 54 69 6d 65 46 6f 72 6d  ,\..DateTimeForm
9b60: 61 74 3d 55 6e 69 78 45 70 6f 63 68 5c 7d 20 30  at=UnixEpoch\} 0
9b70: 20 5c 7b 55 74 63 2c 20 44 61 74 65 54 69 6d 65   \{Utc, DateTime
9b80: 4b 69 6e 64 3d 55 74 63 5c 7d 20 30 20 5c 7b 79  Kind=Utc\} 0 \{y
9b90: 79 79 79 2d 4d 4d 2d 64 64 2c 5c 0d 0a 44 61 74  yyy-MM-dd,\..Dat
9ba0: 65 54 69 6d 65 46 6f 72 6d 61 74 53 74 72 69 6e  eTimeFormatStrin
9bb0: 67 3d 79 79 79 79 2d 4d 4d 2d 64 64 5c 7d 20 30  g=yyyy-MM-dd\} 0
9bc0: 20 5c 7b 73 71 6c 69 74 65 5f 73 63 68 65 6d 61   \{sqlite_schema
9bd0: 2c 5c 0d 0a 42 61 73 65 53 63 68 65 6d 61 4e 61  ,\..BaseSchemaNa
9be0: 6d 65 3d 73 71 6c 69 74 65 5f 73 63 68 65 6d 61  me=sqlite_schema
9bf0: 5c 7d 20 30 20 5c 7b 4d 65 6d 6f 72 79 2c 20 4a  \} 0 \{Memory, J
9c00: 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 4d 65 6d 6f  ournal Mode=Memo
9c10: 72 79 5c 7d 20 30 5c 0d 0a 5c 7b 53 65 72 69 61  ry\} 0\..\{Seria
9c20: 6c 69 7a 61 62 6c 65 2c 20 44 65 66 61 75 6c 74  lizable, Default
9c30: 20 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 3d   IsolationLevel=
9c40: 53 65 72 69 61 6c 69 7a 61 62 6c 65 5c 7d 20 30  Serializable\} 0
9c50: 20 5c 7b 46 61 6c 73 65 2c 20 46 6f 72 65 69 67   \{False, Foreig
9c60: 6e 5c 0d 0a 4b 65 79 73 3d 46 61 6c 73 65 5c 7d  n\..Keys=False\}
9c70: 20 30 20 5c 7b 28 3f 3a 44 65 66 61 75 6c 74 7c   0 \{(?:Default|
9c80: 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70  LogCallbackExcep
9c90: 74 69 6f 6e 29 2c 5c 0d 0a 46 6c 61 67 73 3d 28  tion),\..Flags=(
9ca0: 3f 3a 44 65 66 61 75 6c 74 7c 4c 6f 67 43 61 6c  ?:Default|LogCal
9cb0: 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 29 5c  lbackException)\
9cc0: 7d 20 30 20 5c 7b 46 61 6c 73 65 2c 20 53 65 74  } 0 \{False, Set
9cd0: 44 65 66 61 75 6c 74 73 3d 46 61 6c 73 65 5c 7d  Defaults=False\}
9ce0: 20 30 5c 0d 0a 5c 7b 46 61 6c 73 65 2c 20 54 6f   0\..\{False, To
9cf0: 46 75 6c 6c 50 61 74 68 3d 46 61 6c 73 65 5c 7d  FullPath=False\}
9d00: 20 30 20 7b 37 33 36 35 36 33 37 32 36 35 37 34   0 {736563726574
9d10: 2c 20 48 65 78 50 61 73 73 77 6f 72 64 3d 37 33  , HexPassword=73
9d20: 36 35 36 33 37 32 36 35 37 34 7d 20 30 5c 0d 0a  6563726574} 0\..
9d30: 5c 7b 53 74 72 69 6e 67 2c 20 44 65 66 61 75 6c  \{String, Defaul
9d40: 74 44 62 54 79 70 65 3d 53 74 72 69 6e 67 5c 7d  tDbType=String\}
9d50: 20 30 20 5c 7b 54 45 58 54 2c 20 44 65 66 61 75   0 \{TEXT, Defau
9d60: 6c 74 54 79 70 65 4e 61 6d 65 3d 54 45 58 54 5c  ltTypeName=TEXT\
9d70: 7d 20 30 20 5c 7b 54 72 75 65 2c 5c 0d 0a 4e 6f  } 0 \{True,\..No
9d80: 53 68 61 72 65 64 46 6c 61 67 73 3d 54 72 75 65  SharedFlags=True
9d90: 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  \}$}}....#######
9da0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9db0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9de0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
9df0: 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
9e00: 2e 31 38 20 7b 53 51 4c 69 74 65 43 6f 6e 76 65  .18 {SQLiteConve
9e10: 72 74 20 54 6f 44 61 74 65 54 69 6d 65 20 28 4a  rt ToDateTime (J
9e20: 75 6c 69 61 6e 20 44 61 79 29 7d 20 2d 62 6f 64  ulian Day)} -bod
9e30: 79 20 7b 0d 0a 20 20 73 65 74 20 64 61 74 65 54  y {..  set dateT
9e40: 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ime [object invo
9e50: 6b 65 20 2d 63 72 65 61 74 65 20 53 79 73 74 65  ke -create Syste
9e60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
9e70: 4c 69 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a 20  LiteConvert \.. 
9e80: 20 20 20 20 20 54 6f 44 61 74 65 54 69 6d 65 20       ToDateTime 
9e90: 32 34 35 35 39 32 38 2e 30 20 55 74 63 5d 0d 0a  2455928.0 Utc]..
9ea0: 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ..  object invok
9eb0: 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f 53 74  e $dateTime ToSt
9ec0: 72 69 6e 67 20 5b 67 65 74 44 61 74 65 54 69 6d  ring [getDateTim
9ed0: 65 46 6f 72 6d 61 74 5d 0d 0a 7d 20 2d 63 6c 65  eFormat]..} -cle
9ee0: 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20  anup {..  unset 
9ef0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 65  -nocomplain date
9f00: 54 69 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Time..} -constra
9f10: 69 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73 74  ints {eagle Syst
9f20: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
9f30: 2d 72 65 73 75 6c 74 20 7b 32 30 31 32 2d 30 31  -result {2012-01
9f40: 2d 30 31 20 31 32 3a 30 30 3a 30 30 5a 7d 7d 0d  -01 12:00:00Z}}.
9f50: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
9f60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9fa0: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
9fb0: 65 73 74 20 64 61 74 61 2d 31 2e 31 39 20 7b 53  est data-1.19 {S
9fc0: 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 54 6f 4a  QLiteConvert ToJ
9fd0: 75 6c 69 61 6e 44 61 79 7d 20 2d 62 6f 64 79 20  ulianDay} -body 
9fe0: 7b 0d 0a 20 20 65 78 70 72 20 7b 72 6f 75 6e 64  {..  expr {round
9ff0: 28 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  ([object invoke 
a000: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
a010: 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  te.SQLiteConvert
a020: 20 54 6f 4a 75 6c 69 61 6e 44 61 79 20 5c 0d 0a   ToJulianDay \..
a030: 20 20 20 20 20 20 22 32 30 31 32 2d 30 31 2d 30        "2012-01-0
a040: 31 20 31 32 3a 30 30 3a 30 30 5a 22 5d 29 7d 0d  1 12:00:00Z"])}.
a050: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
a060: 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61  {eagle System.Da
a070: 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
a080: 6c 74 20 7b 32 34 35 35 39 32 38 7d 7d 0d 0a 0d  lt {2455928}}...
a090: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
a0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a0e0: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
a0f0: 74 20 64 61 74 61 2d 31 2e 32 30 20 7b 53 51 4c  t data-1.20 {SQL
a100: 69 74 65 43 6f 6e 76 65 72 74 20 54 6f 55 6e 69  iteConvert ToUni
a110: 78 45 70 6f 63 68 20 28 55 74 63 29 7d 20 2d 62  xEpoch (Utc)} -b
a120: 6f 64 79 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20  ody {..  #..  # 
a130: 4e 4f 54 45 3a 20 41 74 20 66 69 72 73 74 2c 20  NOTE: At first, 
a140: 74 68 65 20 74 65 73 74 20 72 65 73 75 6c 74 20  the test result 
a150: 68 65 72 65 20 6d 61 79 20 6e 6f 74 20 73 65 65  here may not see
a160: 6d 20 63 6f 72 72 65 63 74 3b 20 68 6f 77 65 76  m correct; howev
a170: 65 72 2c 20 74 68 65 0d 0a 20 20 23 20 20 20 20  er, the..  #    
a180: 20 20 20 73 61 6d 65 20 72 65 73 75 6c 74 20 63     same result c
a190: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
a1a0: 6d 70 69 6c 69 6e 67 20 61 6e 64 20 72 75 6e 6e  mpiling and runn
a1b0: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
a1c0: 67 20 43 23 0d 0a 20 20 23 20 20 20 20 20 20 20  g C#..  #       
a1d0: 63 6f 64 65 20 66 72 61 67 6d 65 6e 74 20 74 6f  code fragment to
a1e0: 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65 20  gether with the 
a1f0: 54 6f 55 6e 69 78 45 70 6f 63 68 20 6d 65 74 68  ToUnixEpoch meth
a200: 6f 64 3a 0d 0a 20 20 23 0d 0a 20 20 23 20 20 20  od:..  #..  #   
a210: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
a220: 20 64 61 74 65 54 69 6d 65 3b 0d 0a 20 20 23 20   dateTime;..  # 
a230: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
a240: 65 2e 57 72 69 74 65 4c 69 6e 65 28 22 64 61 74  e.WriteLine("dat
a250: 65 54 69 6d 65 20 3d 20 7b 30 7d 2c 20 75 6e 69  eTime = {0}, uni
a260: 78 54 69 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  xTime = {1}",.. 
a270: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
a280: 20 64 61 74 65 54 69 6d 65 20 3d 20 44 61 74 65   dateTime = Date
a290: 54 69 6d 65 2e 50 61 72 73 65 28 22 32 30 31 32  Time.Parse("2012
a2a0: 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 5a  -01-01 12:00:00Z
a2b0: 22 29 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 20  "),..  #        
a2c0: 20 20 20 20 20 20 20 54 6f 55 6e 69 78 45 70 6f         ToUnixEpo
a2d0: 63 68 28 64 61 74 65 54 69 6d 65 29 29 3b 0d 0a  ch(dateTime));..
a2e0: 20 20 23 0d 0a 20 20 23 20 20 20 20 20 20 20 54    #..  #       T
a2f0: 68 65 20 62 61 73 69 63 20 70 72 6f 62 6c 65 6d  he basic problem
a300: 20 68 65 72 65 20 69 73 20 74 68 61 74 20 74 68   here is that th
a310: 65 20 50 61 72 73 65 20 5b 61 6e 64 20 54 72 79  e Parse [and Try
a320: 50 61 72 73 65 5d 20 6d 65 74 68 6f 64 73 20 6f  Parse] methods o
a330: 66 0d 0a 20 20 23 20 20 20 20 20 20 20 74 68 65  f..  #       the
a340: 20 44 61 74 65 54 69 6d 65 20 73 74 72 75 63 74   DateTime struct
a350: 75 72 65 20 73 65 65 6d 20 74 6f 20 61 6c 77 61  ure seem to alwa
a360: 79 73 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 20  ys return local 
a370: 74 69 6d 65 2c 20 65 76 65 6e 20 77 68 65 6e 0d  time, even when.
a380: 0a 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e  .  #       strin
a390: 67 20 76 61 6c 75 65 20 63 6c 65 61 72 6c 79 20  g value clearly 
a3a0: 69 6e 64 69 63 61 74 65 73 20 6f 74 68 65 72 77  indicates otherw
a3b0: 69 73 65 20 28 69 2e 65 2e 20 74 68 65 20 74 72  ise (i.e. the tr
a3c0: 61 69 6c 69 6e 67 20 22 5a 22 2c 0d 0a 20 20 23  ailing "Z",..  #
a3d0: 20 20 20 20 20 20 20 69 6e 64 69 63 61 74 69 6e         indicatin
a3e0: 67 20 55 54 43 29 2e 0d 0a 20 20 23 0d 0a 20 20  g UTC)...  #..  
a3f0: 65 78 70 72 20 7b 72 6f 75 6e 64 28 5b 6f 62 6a  expr {round([obj
a400: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
a410: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
a420: 4c 69 74 65 43 6f 6e 76 65 72 74 20 54 6f 55 6e  LiteConvert ToUn
a430: 69 78 45 70 6f 63 68 20 5c 0d 0a 20 20 20 20 20  ixEpoch \..     
a440: 20 22 32 30 31 32 2d 30 31 2d 30 31 20 31 32 3a   "2012-01-01 12:
a450: 30 30 3a 30 30 5a 22 5d 29 7d 0d 0a 7d 20 2d 63  00:00Z"])}..} -c
a460: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
a470: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
a480: 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 31  Lite} -result {1
a490: 33 32 35 33 39 30 34 30 30 7d 7d 0d 0a 0d 0a 23  325390400}}....#
a4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
a4f0: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
a500: 64 61 74 61 2d 31 2e 32 31 20 7b 53 51 4c 69 74  data-1.21 {SQLit
a510: 65 43 6f 6e 76 65 72 74 20 54 6f 55 6e 69 78 45  eConvert ToUnixE
a520: 70 6f 63 68 20 28 4c 6f 63 61 6c 29 7d 20 2d 62  poch (Local)} -b
a530: 6f 64 79 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20  ody {..  #..  # 
a540: 4e 4f 54 45 3a 20 41 74 20 66 69 72 73 74 2c 20  NOTE: At first, 
a550: 74 68 65 20 74 65 73 74 20 72 65 73 75 6c 74 20  the test result 
a560: 68 65 72 65 20 6d 61 79 20 6e 6f 74 20 73 65 65  here may not see
a570: 6d 20 63 6f 72 72 65 63 74 3b 20 68 6f 77 65 76  m correct; howev
a580: 65 72 2c 20 74 68 65 0d 0a 20 20 23 20 20 20 20  er, the..  #    
a590: 20 20 20 73 61 6d 65 20 72 65 73 75 6c 74 20 63     same result c
a5a0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
a5b0: 6d 70 69 6c 69 6e 67 20 61 6e 64 20 72 75 6e 6e  mpiling and runn
a5c0: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
a5d0: 67 20 43 23 0d 0a 20 20 23 20 20 20 20 20 20 20  g C#..  #       
a5e0: 63 6f 64 65 20 66 72 61 67 6d 65 6e 74 20 74 6f  code fragment to
a5f0: 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65 20  gether with the 
a600: 54 6f 55 6e 69 78 45 70 6f 63 68 20 6d 65 74 68  ToUnixEpoch meth
a610: 6f 64 3a 0d 0a 20 20 23 0d 0a 20 20 23 20 20 20  od:..  #..  #   
a620: 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65          DateTime
a630: 20 64 61 74 65 54 69 6d 65 3b 0d 0a 20 20 23 20   dateTime;..  # 
a640: 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c            Consol
a650: 65 2e 57 72 69 74 65 4c 69 6e 65 28 22 64 61 74  e.WriteLine("dat
a660: 65 54 69 6d 65 20 3d 20 7b 30 7d 2c 20 75 6e 69  eTime = {0}, uni
a670: 78 54 69 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  xTime = {1}",.. 
a680: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
a690: 20 64 61 74 65 54 69 6d 65 20 3d 20 44 61 74 65   dateTime = Date
a6a0: 54 69 6d 65 2e 50 61 72 73 65 28 22 32 30 31 32  Time.Parse("2012
a6b0: 2d 30 31 2d 30 31 20 31 32 3a 30 30 3a 30 30 22  -01-01 12:00:00"
a6c0: 29 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 20 20  ),..  #         
a6d0: 20 20 20 20 20 20 54 6f 55 6e 69 78 45 70 6f 63        ToUnixEpoc
a6e0: 68 28 64 61 74 65 54 69 6d 65 29 29 3b 0d 0a 20  h(dateTime));.. 
a6f0: 20 23 0d 0a 20 20 23 20 20 20 20 20 20 20 54 68   #..  #       Th
a700: 65 20 62 61 73 69 63 20 70 72 6f 62 6c 65 6d 20  e basic problem 
a710: 68 65 72 65 20 69 73 20 74 68 61 74 20 74 68 65  here is that the
a720: 20 50 61 72 73 65 20 5b 61 6e 64 20 54 72 79 50   Parse [and TryP
a730: 61 72 73 65 5d 20 6d 65 74 68 6f 64 73 20 6f 66  arse] methods of
a740: 0d 0a 20 20 23 20 20 20 20 20 20 20 74 68 65 20  ..  #       the 
a750: 44 61 74 65 54 69 6d 65 20 73 74 72 75 63 74 75  DateTime structu
a760: 72 65 20 73 65 65 6d 20 74 6f 20 61 6c 77 61 79  re seem to alway
a770: 73 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 20 74  s return local t
a780: 69 6d 65 2c 20 65 76 65 6e 20 77 68 65 6e 0d 0a  ime, even when..
a790: 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67    #       string
a7a0: 20 76 61 6c 75 65 20 63 6c 65 61 72 6c 79 20 69   value clearly i
a7b0: 6e 64 69 63 61 74 65 73 20 6f 74 68 65 72 77 69  ndicates otherwi
a7c0: 73 65 20 28 69 2e 65 2e 20 74 68 65 20 74 72 61  se (i.e. the tra
a7d0: 69 6c 69 6e 67 20 22 5a 22 2c 0d 0a 20 20 23 20  iling "Z",..  # 
a7e0: 20 20 20 20 20 20 69 6e 64 69 63 61 74 69 6e 67        indicating
a7f0: 20 55 54 43 29 2e 0d 0a 20 20 23 0d 0a 20 20 65   UTC)...  #..  e
a800: 78 70 72 20 7b 72 6f 75 6e 64 28 5b 6f 62 6a 65  xpr {round([obje
a810: 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d  ct invoke System
a820: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
a830: 69 74 65 43 6f 6e 76 65 72 74 20 54 6f 55 6e 69  iteConvert ToUni
a840: 78 45 70 6f 63 68 20 5c 0d 0a 20 20 20 20 20 20  xEpoch \..      
a850: 22 32 30 31 32 2d 30 31 2d 30 31 20 31 32 3a 30  "2012-01-01 12:0
a860: 30 3a 30 30 22 5d 29 7d 0d 0a 7d 20 2d 63 6f 6e  0:00"])}..} -con
a870: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
a880: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
a890: 74 65 7d 20 2d 72 65 73 75 6c 74 20 7b 31 33 32  te} -result {132
a8a0: 35 34 31 39 32 30 30 7d 7d 0d 0a 0d 0a 23 23 23  5419200}}....###
a8b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a8c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a8d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a8f0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
a900: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
a910: 74 61 2d 31 2e 32 32 20 7b 53 51 4c 69 74 65 54  ta-1.22 {SQLiteT
a920: 72 61 6e 73 61 63 74 69 6f 6e 20 64 69 73 70 6f  ransaction dispo
a930: 73 61 6c 20 62 65 68 61 76 69 6f 72 7d 20 2d 73  sal behavior} -s
a940: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
a950: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
a960: 64 61 74 61 2d 31 2e 32 32 2e 64 62 5d 0d 0a 7d  data-1.22.db]..}
a970: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20   -body {..  sql 
a980: 65 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45  execute $db "CRE
a990: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 54  ATE TABLE t1(x T
a9a0: 45 58 54 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20  EXT);"....  sql 
a9b0: 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
a9c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
a9d0: 31 20 28 78 29 20 56 41 4c 55 45 53 28 27 74 65  1 (x) VALUES('te
a9e0: 73 74 31 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45  st1');..    INSE
a9f0: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
aa00: 41 4c 55 45 53 28 27 74 65 73 74 32 27 29 3b 0d  ALUES('test2');.
aa10: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
aa20: 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 27   t1 (x) VALUES('
aa30: 74 65 73 74 33 27 29 3b 0d 0a 20 20 7d 0d 0a 0d  test3');..  }...
aa40: 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45  .  set sql "SELE
aa50: 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT x FROM t1 ORD
aa60: 45 52 20 42 59 20 78 20 43 4f 4c 4c 41 54 45 20  ER BY x COLLATE 
aa70: 44 4f 54 48 52 4f 57 3b 22 0d 0a 0d 0a 20 20 73  DOTHROW;"....  s
aa80: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
aa90: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
aaa0: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
aab0: 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f  d]..  set dataSo
aac0: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
aad0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
aae0: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
aaf0: 5d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  ]....  unset -no
ab00: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
ab10: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
ab20: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
ab30: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
ab40: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
ab50: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
ab60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
ab70: 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73  te;....    names
ab80: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
ab90: 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d}..    {..     
aba0: 20 5c 5b 53 51 4c 69 74 65 46 75 6e 63 74 69 6f   \[SQLiteFunctio
abb0: 6e 28 4e 61 6d 65 20 3d 20 22 44 4f 54 48 52 4f  n(Name = "DOTHRO
abc0: 57 22 2c 20 46 75 6e 63 54 79 70 65 20 3d 20 46  W", FuncType = F
abd0: 75 6e 63 74 69 6f 6e 54 79 70 65 2e 43 6f 6c 6c  unctionType.Coll
abe0: 61 74 69 6f 6e 29 5c 5d 0d 0a 20 20 20 20 20 20  ation)\]..      
abf0: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 54 65 73  public class Tes
ac00: 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 46  t${id} : SQLiteF
ac10: 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b  unction..      {
ac20: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
ac30: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
ac40: 6d 70 61 72 65 28 0d 0a 20 20 20 20 20 20 20 20  mpare(..        
ac50: 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 31 2c    string param1,
ac60: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
ac70: 6e 67 20 70 61 72 61 6d 32 0d 0a 20 20 20 20 20  ng param2..     
ac80: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ac90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72  {..          thr
aca0: 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e  ow new Exception
acb0: 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74 65  ("not implemente
acc0: 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  d");..        }.
acd0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
ace0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
ad30: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
ad40: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
ad50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
ad60: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 52 65 67  LiteFunction.Reg
ad70: 69 73 74 65 72 46 75 6e 63 74 69 6f 6e 28 74 79  isterFunction(ty
ad80: 70 65 6f 66 28 54 65 73 74 24 7b 69 64 7d 29 29  peof(Test${id}))
ad90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
ada0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
adb0: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
adc0: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
add0: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
ade0: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
adf0: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
ae00: 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f  ce};[getFlagsPro
ae10: 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20 20  perty]"))..     
ae20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ae30: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f      connection.O
ae40: 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pen();....      
ae50: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
ae60: 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74  iteTransaction t
ae70: 72 61 6e 73 61 63 74 69 6f 6e 20 3d 0d 0a 20 20  ransaction =..  
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
ae90: 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e 54 72  nnection.BeginTr
aea0: 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a 20 20  ansaction())..  
aeb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
aec0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
aee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aef0: 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63   SQLiteCommand c
af00: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
af10: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
af20: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
af30: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
af40: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 24  CommandText = "$
af50: 7b 73 71 6c 7d 22 3b 0d 0a 20 20 20 20 20 20 20  {sql}";..       
af60: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
af70: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
af80: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
af90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
afa0: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
afb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
afd0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
afe0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
aff0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b000: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b010: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
b020: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
b030: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
b040: 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61  errors System.Da
b050: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a  ta.SQLite.dll]..
b060: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
b070: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
b080: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
b090: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
b0a0: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
b0b0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
b0c0: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
b0d0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
b0e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
b0f0: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
b100: 24 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20  ${id} Main..    
b110: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
b120: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
b130: 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61  $result..} -clea
b140: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
b150: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
b160: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
b170: 61 69 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c  ain result resul
b180: 74 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20 73  ts errors code s
b190: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
b1a0: 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
b1b0: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
b1c0: 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
b1d0: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
b1e0: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
b1f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b200: 74 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  te compileCSharp
b210: 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
b220: 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53  -result {^Ok\..S
b230: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
b240: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
b250: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
b260: 30 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23 23  0 \{\}$}}....###
b270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b2b0: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
b2c0: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
b2d0: 74 61 2d 31 2e 32 33 20 7b 53 51 4c 69 74 65 46  ta-1.23 {SQLiteF
b2e0: 75 6e 63 74 69 6f 6e 20 63 6f 6c 6c 61 74 69 6f  unction collatio
b2f0: 6e 20 65 78 63 65 70 74 69 6f 6e 7d 20 2d 73 65  n exception} -se
b300: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
b310: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
b320: 61 74 61 2d 31 2e 32 33 2e 64 62 5d 0d 0a 7d 20  ata-1.23.db]..} 
b330: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
b340: 78 65 63 75 74 65 20 24 64 62 20 22 43 52 45 41  xecute $db "CREA
b350: 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 54 45  TE TABLE t1(x TE
b360: 58 54 29 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65  XT);"....  sql e
b370: 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
b380: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
b390: 20 28 78 29 20 56 41 4c 55 45 53 28 27 74 65 73   (x) VALUES('tes
b3a0: 74 31 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  t1');..    INSER
b3b0: 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
b3c0: 4c 55 45 53 28 27 74 65 73 74 32 27 29 3b 0d 0a  LUES('test2');..
b3d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
b3e0: 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 27 74  t1 (x) VALUES('t
b3f0: 65 73 74 33 27 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a  est3');..  }....
b400: 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43    set sql "SELEC
b410: 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T x FROM t1 ORDE
b420: 52 20 42 59 20 78 20 43 4f 4c 4c 41 54 45 20 44  R BY x COLLATE D
b430: 4f 54 48 52 4f 57 32 3b 22 0d 0a 0d 0a 20 20 73  OTHROW2;"....  s
b440: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
b450: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
b460: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
b470: 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f  d]..  set dataSo
b480: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
b490: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
b4a0: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
b4b0: 5d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  ]....  unset -no
b4c0: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
b4d0: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
b4e0: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
b4f0: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
b500: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
b510: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
b520: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b530: 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73  te;....    names
b540: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
b550: 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d}..    {..     
b560: 20 5c 5b 53 51 4c 69 74 65 46 75 6e 63 74 69 6f   \[SQLiteFunctio
b570: 6e 28 4e 61 6d 65 20 3d 20 22 44 4f 54 48 52 4f  n(Name = "DOTHRO
b580: 57 32 22 2c 20 46 75 6e 63 54 79 70 65 20 3d 20  W2", FuncType = 
b590: 46 75 6e 63 74 69 6f 6e 54 79 70 65 2e 43 6f 6c  FunctionType.Col
b5a0: 6c 61 74 69 6f 6e 29 5c 5d 0d 0a 20 20 20 20 20  lation)\]..     
b5b0: 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 54 65   public class Te
b5c0: 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65  st${id} : SQLite
b5d0: 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Function..      
b5e0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
b5f0: 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  c override int C
b600: 6f 6d 70 61 72 65 28 0d 0a 20 20 20 20 20 20 20  ompare(..       
b610: 20 20 20 73 74 72 69 6e 67 20 70 61 72 61 6d 31     string param1
b620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ,..          str
b630: 69 6e 67 20 70 61 72 61 6d 32 0d 0a 20 20 20 20  ing param2..    
b640: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b650: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68   {..          th
b660: 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f  row new Exceptio
b670: 6e 28 22 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  n("not implement
b680: 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ed");..        }
b690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
b6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
b6f0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
b700: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
b710: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
b720: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 52 65 67  LiteFunction.Reg
b730: 69 73 74 65 72 46 75 6e 63 74 69 6f 6e 28 74 79  isterFunction(ty
b740: 70 65 6f 66 28 54 65 73 74 24 7b 69 64 7d 29 29  peof(Test${id}))
b750: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
b760: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
b770: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
b780: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
b790: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
b7a0: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
b7b0: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
b7c0: 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f  ce};[getFlagsPro
b7d0: 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20 20  perty]"))..     
b7e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b7f0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f      connection.O
b800: 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pen();....      
b810: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
b820: 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74  iteTransaction t
b830: 72 61 6e 73 61 63 74 69 6f 6e 20 3d 0d 0a 20 20  ransaction =..  
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b850: 6e 6e 65 63 74 69 6f 6e 2e 42 65 67 69 6e 54 72  nnection.BeginTr
b860: 61 6e 73 61 63 74 69 6f 6e 28 29 29 0d 0a 20 20  ansaction())..  
b870: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b880: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
b890: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
b8a0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
b8b0: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 3b 0d 0a  eateCommand();..
b8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b8d0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
b8e0: 65 78 74 20 3d 20 22 24 7b 73 71 6c 7d 22 3b 0d  ext = "${sql}";.
b8f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b900: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61   using (SQLiteDa
b910: 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
b920: 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78  der = command.Ex
b930: 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a  ecuteReader())..
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
b950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b960: 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 30 3b 0d   int count = 0;.
b970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b980: 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65     while (dataRe
b990: 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20  ader.Read())..  
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9b0: 63 6f 75 6e 74 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  count++;....    
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b9d0: 72 6e 20 63 6f 75 6e 74 3b 0d 0a 20 20 20 20 20  rn count;..     
b9e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b9f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
ba00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ba10: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
ba20: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
ba30: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
ba40: 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74  rrors System.Dat
ba50: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d  a.SQLite.dll]...
ba60: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
ba70: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
ba80: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
ba90: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
baa0: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
bab0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
bac0: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
bad0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
bae0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
baf0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
bb00: 7b 69 64 7d 20 4d 61 69 6e 0d 0a 20 20 20 20 20  {id} Main..     
bb10: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
bb20: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
bb30: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
bb40: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
bb50: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
bb60: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
bb70: 69 6e 20 72 65 73 75 6c 74 20 72 65 73 75 6c 74  in result result
bb80: 73 20 65 72 72 6f 72 73 20 63 6f 64 65 20 73 71  s errors code sq
bb90: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
bba0: 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
bbb0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
bbc0: 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
bbd0: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
bbe0: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
bbf0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
bc00: 65 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  e compileCSharp}
bc10: 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
bc20: 72 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  result {^Ok\..Sy
bc30: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
bc40: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
bc50: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 31  sults#\d+ \{\} 1
bc60: 5c 0d 0a 5c 7b 53 79 73 74 65 6d 5c 2e 52 65 66  \..\{System\.Ref
bc70: 6c 65 63 74 69 6f 6e 5c 2e 54 61 72 67 65 74 49  lection\.TargetI
bc80: 6e 76 6f 63 61 74 69 6f 6e 45 78 63 65 70 74 69  nvocationExcepti
bc90: 6f 6e 3a 20 45 78 63 65 70 74 69 6f 6e 20 68 61  on: Exception ha
bca0: 73 20 62 65 65 6e 20 74 68 72 6f 77 6e 20 62 79  s been thrown by
bcb0: 5c 0d 0a 74 68 65 20 74 61 72 67 65 74 20 6f 66  \..the target of
bcc0: 20 61 6e 20 69 6e 76 6f 63 61 74 69 6f 6e 5c 2e   an invocation\.
bcd0: 20 2d 2d 2d 3e 20 53 79 73 74 65 6d 5c 2e 44 61   ---> System\.Da
bce0: 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69  ta\.SQLite\.SQLi
bcf0: 74 65 45 78 63 65 70 74 69 6f 6e 3a 5c 0d 0a 69  teException:\..i
bd00: 6e 74 65 72 72 75 70 74 65 64 2e 2a 24 7d 7d 0d  nterrupted.*$}}.
bd10: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
bd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd60: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
bd70: 65 73 74 20 64 61 74 61 2d 31 2e 32 34 20 7b 4c  est data-1.24 {L
bd80: 49 4e 51 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49  INQ SQL_CONSTRAI
bd90: 4e 54 43 4f 4c 55 4d 4e 53 20 72 65 73 6f 75 72  NTCOLUMNS resour
bda0: 63 65 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 6f  ce} -body {..  o
bdb0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
bdc0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
bdd0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
bde0: 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
bdf0: 50 72 6f 70 65 72 74 69 65 73 2e 52 65 73 6f 75  Properties.Resou
be00: 72 63 65 73 20 53 51 4c 5f 43 4f 4e 53 54 52 41  rces SQL_CONSTRA
be10: 49 4e 54 43 4f 4c 55 4d 4e 53 0d 0a 7d 20 2d 63  INTCOLUMNS..} -c
be20: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
be30: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
be40: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
be50: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 7d 20 2d 72  .SQLite.Linq} -r
be60: 65 73 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 43  esult {..      C
be70: 52 45 41 54 45 20 54 45 4d 50 20 56 49 45 57 20  REATE TEMP VIEW 
be80: 53 43 48 45 4d 41 43 4f 4e 53 54 52 41 49 4e 54  SCHEMACONSTRAINT
be90: 43 4f 4c 55 4d 4e 53 20 41 53 0d 0a 20 20 20 20  COLUMNS AS..    
bea0: 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e 53 54      SELECT CONST
beb0: 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a  RAINT_CATALOG,..
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
bed0: 55 4c 4c 20 41 53 20 43 4f 4e 53 54 52 41 49 4e  ULL AS CONSTRAIN
bee0: 54 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20  T_SCHEMA,..     
bef0: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52            CONSTR
bf00: 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20  AINT_NAME,..    
bf10: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
bf20: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
bf30: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41            NULL A
bf40: 53 20 54 41 42 4c 45 5f 53 43 48 45 4d 41 2c 0d  S TABLE_SCHEMA,.
bf50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf60: 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20  TABLE_NAME,..   
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4c 55              COLU
bf80: 4d 4e 5f 4e 41 4d 45 0d 0a 20 20 20 20 20 20 20  MN_NAME..       
bf90: 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d   FROM TEMP.SCHEM
bfa0: 41 49 4e 44 45 58 43 4f 4c 55 4d 4e 53 0d 0a 20  AINDEXCOLUMNS.. 
bfb0: 20 20 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20 20         UNION..  
bfc0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f 4e        SELECT CON
bfd0: 53 54 52 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c  STRAINT_CATALOG,
bfe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bff0: 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20 20 20 20   NULL,..        
c000: 20 20 20 20 20 20 20 43 4f 4e 53 54 52 41 49 4e         CONSTRAIN
c010: 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20  T_NAME,..       
c020: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41          TABLE_CA
c030: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
c040: 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20         NULL,..  
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
c060: 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  LE_NAME,..      
c070: 20 20 20 20 20 20 20 20 20 46 4b 45 59 5f 46 52           FKEY_FR
c080: 4f 4d 5f 43 4f 4c 55 4d 4e 0d 0a 20 20 20 20 20  OM_COLUMN..     
c090: 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48     FROM TEMP.SCH
c0a0: 45 4d 41 46 4f 52 45 49 47 4e 4b 45 59 53 3b 0d  EMAFOREIGNKEYS;.
c0b0: 0a 20 20 20 20 7d 7d 0d 0a 0d 0a 23 23 23 23 23  .    }}....#####
c0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c100: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
c110: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
c120: 2d 31 2e 32 35 20 7b 45 46 36 20 53 51 4c 5f 43  -1.25 {EF6 SQL_C
c130: 4f 4e 53 54 52 41 49 4e 54 43 4f 4c 55 4d 4e 53  ONSTRAINTCOLUMNS
c140: 20 72 65 73 6f 75 72 63 65 7d 20 2d 62 6f 64 79   resource} -body
c150: 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76   {..  object inv
c160: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
c170: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53  ublic \..      S
c180: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c190: 65 2e 45 46 36 2e 50 72 6f 70 65 72 74 69 65 73  e.EF6.Properties
c1a0: 2e 52 65 73 6f 75 72 63 65 73 20 53 51 4c 5f 43  .Resources SQL_C
c1b0: 4f 4e 53 54 52 41 49 4e 54 43 4f 4c 55 4d 4e 53  ONSTRAINTCOLUMNS
c1c0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
c1d0: 20 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44   {eagle System.D
c1e0: 61 74 61 2e 53 51 4c 69 74 65 20 53 79 73 74 65  ata.SQLite Syste
c1f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
c200: 36 7d 20 2d 72 65 73 75 6c 74 20 7b 0d 0a 20 20  6} -result {..  
c210: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
c220: 56 49 45 57 20 53 43 48 45 4d 41 43 4f 4e 53 54  VIEW SCHEMACONST
c230: 52 41 49 4e 54 43 4f 4c 55 4d 4e 53 20 41 53 0d  RAINTCOLUMNS AS.
c240: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
c250: 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54 41 4c  CONSTRAINT_CATAL
c260: 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OG,..           
c270: 20 20 20 20 4e 55 4c 4c 20 41 53 20 43 4f 4e 53      NULL AS CONS
c280: 54 52 41 49 4e 54 5f 53 43 48 45 4d 41 2c 0d 0a  TRAINT_SCHEMA,..
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
c2a0: 4f 4e 53 54 52 41 49 4e 54 5f 4e 41 4d 45 2c 0d  ONSTRAINT_NAME,.
c2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c2c0: 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a  TABLE_CATALOG,..
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
c2e0: 55 4c 4c 20 41 53 20 54 41 42 4c 45 5f 53 43 48  ULL AS TABLE_SCH
c2f0: 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  EMA,..          
c300: 20 20 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c       TABLE_NAME,
c310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c320: 20 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 0d 0a 20 20   COLUMN_NAME..  
c330: 20 20 20 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e        FROM TEMP.
c340: 53 43 48 45 4d 41 49 4e 44 45 58 43 4f 4c 55 4d  SCHEMAINDEXCOLUM
c350: 4e 53 0d 0a 20 20 20 20 20 20 20 20 55 4e 49 4f  NS..        UNIO
c360: 4e 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43  N..        SELEC
c370: 54 20 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54  T CONSTRAINT_CAT
c380: 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20  ALOG,..         
c390: 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20        NULL,..   
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53              CONS
c3b0: 54 52 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20  TRAINT_NAME,..  
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
c3d0: 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20  LE_CATALOG,..   
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
c3f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c400: 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20    TABLE_NAME,.. 
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 4b                FK
c420: 45 59 5f 46 52 4f 4d 5f 43 4f 4c 55 4d 4e 0d 0a  EY_FROM_COLUMN..
c430: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45 4d          FROM TEM
c440: 50 2e 53 43 48 45 4d 41 46 4f 52 45 49 47 4e 4b  P.SCHEMAFOREIGNK
c450: 45 59 53 3b 0d 0a 20 20 20 20 7d 7d 0d 0a 0d 0a  EYS;..    }}....
c460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
c4b0: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
c4c0: 20 64 61 74 61 2d 31 2e 32 36 20 7b 4c 49 4e 51   data-1.26 {LINQ
c4d0: 20 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54 53   SQL_CONSTRAINTS
c4e0: 20 72 65 73 6f 75 72 63 65 7d 20 2d 62 6f 64 79   resource} -body
c4f0: 20 7b 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76   {..  object inv
c500: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
c510: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53  ublic \..      S
c520: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c530: 65 2e 4c 69 6e 71 2e 50 72 6f 70 65 72 74 69 65  e.Linq.Propertie
c540: 73 2e 52 65 73 6f 75 72 63 65 73 20 53 51 4c 5f  s.Resources SQL_
c550: 43 4f 4e 53 54 52 41 49 4e 54 53 0d 0a 7d 20 2d  CONSTRAINTS..} -
c560: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
c570: 6c 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  le System.Data.S
c580: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
c590: 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 7d 20 2d  a.SQLite.Linq} -
c5a0: 72 65 73 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20  result {..      
c5b0: 43 52 45 41 54 45 20 54 45 4d 50 20 56 49 45 57  CREATE TEMP VIEW
c5c0: 20 53 43 48 45 4d 41 43 4f 4e 53 54 52 41 49 4e   SCHEMACONSTRAIN
c5d0: 54 53 20 41 53 0d 0a 20 20 20 20 20 20 20 20 53  TS AS..        S
c5e0: 45 4c 45 43 54 20 49 4e 44 45 58 5f 43 41 54 41  ELECT INDEX_CATA
c5f0: 4c 4f 47 20 41 53 20 43 4f 4e 53 54 52 41 49 4e  LOG AS CONSTRAIN
c600: 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20  T_CATALOG,..    
c610: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 20             NULL 
c620: 41 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f 53 43  AS CONSTRAINT_SC
c630: 48 45 4d 41 2c 0d 0a 20 20 20 20 20 20 20 20 20  HEMA,..         
c640: 20 20 20 20 20 20 49 4e 44 45 58 5f 4e 41 4d 45        INDEX_NAME
c650: 20 41 53 20 43 4f 4e 53 54 52 41 49 4e 54 5f 4e   AS CONSTRAINT_N
c660: 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  AME,..          
c670: 20 20 20 20 20 54 41 42 4c 45 5f 43 41 54 41 4c       TABLE_CATAL
c680: 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OG,..           
c690: 20 20 20 20 4e 55 4c 4c 20 41 53 20 54 41 42 4c      NULL AS TABL
c6a0: 45 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20  E_SCHEMA,..     
c6b0: 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f            TABLE_
c6c0: 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20 20 20  NAME,..         
c6d0: 20 20 20 20 20 20 27 50 52 49 4d 41 52 59 20 4b        'PRIMARY K
c6e0: 45 59 27 20 41 53 20 43 4f 4e 53 54 52 41 49 4e  EY' AS CONSTRAIN
c6f0: 54 5f 54 59 50 45 2c 0d 0a 20 20 20 20 20 20 20  T_TYPE,..       
c700: 20 20 20 20 20 20 20 20 30 20 41 53 20 49 53 5f          0 AS IS_
c710: 44 45 46 45 52 52 41 42 4c 45 2c 0d 0a 20 20 20  DEFERRABLE,..   
c720: 20 20 20 20 20 20 20 20 20 20 20 20 30 20 41 53              0 AS
c730: 20 49 4e 49 54 49 41 4c 4c 59 5f 44 45 46 45 52   INITIALLY_DEFER
c740: 52 45 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  RED,..          
c750: 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 43 48 45       NULL AS CHE
c760: 43 4b 5f 43 4c 41 55 53 45 0d 0a 20 20 20 20 20  CK_CLAUSE..     
c770: 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48     FROM TEMP.SCH
c780: 45 4d 41 49 4e 44 45 58 45 53 0d 0a 20 20 20 20  EMAINDEXES..    
c790: 20 20 20 20 57 48 45 52 45 20 50 52 49 4d 41 52      WHERE PRIMAR
c7a0: 59 5f 4b 45 59 20 3d 20 31 0d 0a 20 20 20 20 20  Y_KEY = 1..     
c7b0: 20 20 20 55 4e 49 4f 4e 0d 0a 20 20 20 20 20 20     UNION..      
c7c0: 20 20 53 45 4c 45 43 54 20 49 4e 44 45 58 5f 43    SELECT INDEX_C
c7d0: 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20  ATALOG,..       
c7e0: 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20          NULL,.. 
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e                IN
c800: 44 45 58 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20  DEX_NAME,..     
c810: 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f            TABLE_
c820: 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20  CATALOG,..      
c830: 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a           NULL,..
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
c850: 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20  ABLE_NAME,..    
c860: 20 20 20 20 20 20 20 20 20 20 20 27 55 4e 49 51             'UNIQ
c870: 55 45 27 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  UE',..          
c880: 20 20 20 20 20 30 2c 0d 0a 20 20 20 20 20 20 20       0,..       
c890: 20 20 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20          0,..    
c8a0: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 0d             NULL.
c8b0: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 54 45  .        FROM TE
c8c0: 4d 50 2e 53 43 48 45 4d 41 49 4e 44 45 58 45 53  MP.SCHEMAINDEXES
c8d0: 0d 0a 20 20 20 20 20 20 20 20 57 48 45 52 45 20  ..        WHERE 
c8e0: 50 52 49 4d 41 52 59 5f 4b 45 59 20 3d 20 30 20  PRIMARY_KEY = 0 
c8f0: 41 4e 44 20 5b 55 4e 49 51 55 45 5d 20 3d 20 31  AND [UNIQUE] = 1
c900: 0d 0a 20 20 20 20 20 20 20 20 55 4e 49 4f 4e 0d  ..        UNION.
c910: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
c920: 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41 54 41 4c  CONSTRAINT_CATAL
c930: 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OG,..           
c940: 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20      NULL,..     
c950: 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53 54 52            CONSTR
c960: 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20  AINT_NAME,..    
c970: 20 20 20 20 20 20 20 20 20 20 20 54 41 42 4c 45             TABLE
c980: 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20  _CATALOG,..     
c990: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d            NULL,.
c9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c9b0: 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20  TABLE_NAME,..   
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e 53              CONS
c9d0: 54 52 41 49 4e 54 5f 54 59 50 45 2c 0d 0a 20 20  TRAINT_TYPE,..  
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 53 5f               IS_
c9f0: 44 45 46 45 52 52 41 42 4c 45 2c 0d 0a 20 20 20  DEFERRABLE,..   
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 49 54              INIT
ca10: 49 41 4c 4c 59 5f 44 45 46 45 52 52 45 44 2c 0d  IALLY_DEFERRED,.
ca20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca30: 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 46 52  NULL..        FR
ca40: 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d 41 46 4f  OM TEMP.SCHEMAFO
ca50: 52 45 49 47 4e 4b 45 59 53 3b 0d 0a 20 20 20 20  REIGNKEYS;..    
ca60: 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
ca70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
caa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cab0: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
cac0: 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 32 37   {test data-1.27
cad0: 20 7b 45 46 36 20 53 51 4c 5f 43 4f 4e 53 54 52   {EF6 SQL_CONSTR
cae0: 41 49 4e 54 53 20 72 65 73 6f 75 72 63 65 7d 20  AINTS resource} 
caf0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 6f 62 6a 65 63  -body {..  objec
cb00: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
cb10: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
cb20: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
cb30: 53 51 4c 69 74 65 2e 45 46 36 2e 50 72 6f 70 65  SQLite.EF6.Prope
cb40: 72 74 69 65 73 2e 52 65 73 6f 75 72 63 65 73 20  rties.Resources 
cb50: 53 51 4c 5f 43 4f 4e 53 54 52 41 49 4e 54 53 0d  SQL_CONSTRAINTS.
cb60: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
cb70: 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e 44 61  {eagle System.Da
cb80: 74 61 2e 53 51 4c 69 74 65 20 53 79 73 74 65 6d  ta.SQLite System
cb90: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
cba0: 7d 20 2d 72 65 73 75 6c 74 20 7b 0d 0a 20 20 20  } -result {..   
cbb0: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 56     CREATE TEMP V
cbc0: 49 45 57 20 53 43 48 45 4d 41 43 4f 4e 53 54 52  IEW SCHEMACONSTR
cbd0: 41 49 4e 54 53 20 41 53 0d 0a 20 20 20 20 20 20  AINTS AS..      
cbe0: 20 20 53 45 4c 45 43 54 20 49 4e 44 45 58 5f 43    SELECT INDEX_C
cbf0: 41 54 41 4c 4f 47 20 41 53 20 43 4f 4e 53 54 52  ATALOG AS CONSTR
cc00: 41 49 4e 54 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20  AINT_CATALOG,.. 
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55                NU
cc20: 4c 4c 20 41 53 20 43 4f 4e 53 54 52 41 49 4e 54  LL AS CONSTRAINT
cc30: 5f 53 43 48 45 4d 41 2c 0d 0a 20 20 20 20 20 20  _SCHEMA,..      
cc40: 20 20 20 20 20 20 20 20 20 49 4e 44 45 58 5f 4e           INDEX_N
cc50: 41 4d 45 20 41 53 20 43 4f 4e 53 54 52 41 49 4e  AME AS CONSTRAIN
cc60: 54 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20 20  T_NAME,..       
cc70: 20 20 20 20 20 20 20 20 54 41 42 4c 45 5f 43 41          TABLE_CA
cc80: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
cc90: 20 20 20 20 20 20 20 4e 55 4c 4c 20 41 53 20 54         NULL AS T
cca0: 41 42 4c 45 5f 53 43 48 45 4d 41 2c 0d 0a 20 20  ABLE_SCHEMA,..  
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
ccc0: 4c 45 5f 4e 41 4d 45 2c 0d 0a 20 20 20 20 20 20  LE_NAME,..      
ccd0: 20 20 20 20 20 20 20 20 20 27 50 52 49 4d 41 52           'PRIMAR
cce0: 59 20 4b 45 59 27 20 41 53 20 43 4f 4e 53 54 52  Y KEY' AS CONSTR
ccf0: 41 49 4e 54 5f 54 59 50 45 2c 0d 0a 20 20 20 20  AINT_TYPE,..    
cd00: 20 20 20 20 20 20 20 20 20 20 20 30 20 41 53 20             0 AS 
cd10: 49 53 5f 44 45 46 45 52 52 41 42 4c 45 2c 0d 0a  IS_DEFERRABLE,..
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
cd30: 20 41 53 20 49 4e 49 54 49 41 4c 4c 59 5f 44 45   AS INITIALLY_DE
cd40: 46 45 52 52 45 44 2c 0d 0a 20 20 20 20 20 20 20  FERRED,..       
cd50: 20 20 20 20 20 20 20 20 4e 55 4c 4c 20 41 53 20          NULL AS 
cd60: 43 48 45 43 4b 5f 43 4c 41 55 53 45 0d 0a 20 20  CHECK_CLAUSE..  
cd70: 20 20 20 20 20 20 46 52 4f 4d 20 54 45 4d 50 2e        FROM TEMP.
cd80: 53 43 48 45 4d 41 49 4e 44 45 58 45 53 0d 0a 20  SCHEMAINDEXES.. 
cd90: 20 20 20 20 20 20 20 57 48 45 52 45 20 50 52 49         WHERE PRI
cda0: 4d 41 52 59 5f 4b 45 59 20 3d 20 31 0d 0a 20 20  MARY_KEY = 1..  
cdb0: 20 20 20 20 20 20 55 4e 49 4f 4e 0d 0a 20 20 20        UNION..   
cdc0: 20 20 20 20 20 53 45 4c 45 43 54 20 49 4e 44 45       SELECT INDE
cdd0: 58 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20 20  X_CATALOG,..    
cde0: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 2c             NULL,
cdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce00: 20 49 4e 44 45 58 5f 4e 41 4d 45 2c 0d 0a 20 20   INDEX_NAME,..  
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41 42               TAB
ce20: 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20 20  LE_CATALOG,..   
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
ce40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ce50: 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a 20    TABLE_NAME,.. 
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 55                'U
ce70: 4e 49 51 55 45 27 2c 0d 0a 20 20 20 20 20 20 20  NIQUE',..       
ce80: 20 20 20 20 20 20 20 20 30 2c 0d 0a 20 20 20 20          0,..    
ce90: 20 20 20 20 20 20 20 20 20 20 20 30 2c 0d 0a 20             0,.. 
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55                NU
ceb0: 4c 4c 0d 0a 20 20 20 20 20 20 20 20 46 52 4f 4d  LL..        FROM
cec0: 20 54 45 4d 50 2e 53 43 48 45 4d 41 49 4e 44 45   TEMP.SCHEMAINDE
ced0: 58 45 53 0d 0a 20 20 20 20 20 20 20 20 57 48 45  XES..        WHE
cee0: 52 45 20 50 52 49 4d 41 52 59 5f 4b 45 59 20 3d  RE PRIMARY_KEY =
cef0: 20 30 20 41 4e 44 20 5b 55 4e 49 51 55 45 5d 20   0 AND [UNIQUE] 
cf00: 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 55 4e 49  = 1..        UNI
cf10: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45  ON..        SELE
cf20: 43 54 20 43 4f 4e 53 54 52 41 49 4e 54 5f 43 41  CT CONSTRAINT_CA
cf30: 54 41 4c 4f 47 2c 0d 0a 20 20 20 20 20 20 20 20  TALOG,..        
cf40: 20 20 20 20 20 20 20 4e 55 4c 4c 2c 0d 0a 20 20         NULL,..  
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4f 4e               CON
cf60: 53 54 52 41 49 4e 54 5f 4e 41 4d 45 2c 0d 0a 20  STRAINT_NAME,.. 
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 41                TA
cf80: 42 4c 45 5f 43 41 54 41 4c 4f 47 2c 0d 0a 20 20  BLE_CATALOG,..  
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
cfa0: 4c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  L,..            
cfb0: 20 20 20 54 41 42 4c 45 5f 4e 41 4d 45 2c 0d 0a     TABLE_NAME,..
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
cfd0: 4f 4e 53 54 52 41 49 4e 54 5f 54 59 50 45 2c 0d  ONSTRAINT_TYPE,.
cfe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cff0: 49 53 5f 44 45 46 45 52 52 41 42 4c 45 2c 0d 0a  IS_DEFERRABLE,..
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
d010: 4e 49 54 49 41 4c 4c 59 5f 44 45 46 45 52 52 45  NITIALLY_DEFERRE
d020: 44 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  D,..            
d030: 20 20 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20     NULL..       
d040: 20 46 52 4f 4d 20 54 45 4d 50 2e 53 43 48 45 4d   FROM TEMP.SCHEM
d050: 41 46 4f 52 45 49 47 4e 4b 45 59 53 3b 0d 0a 20  AFOREIGNKEYS;.. 
d060: 20 20 20 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23     }}....#######
d070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d0b0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
d0c0: 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
d0d0: 2e 32 38 20 7b 53 51 4c 69 74 65 44 61 74 61 52  .28 {SQLiteDataR
d0e0: 65 61 64 65 72 20 47 65 74 56 61 6c 75 65 73 20  eader GetValues 
d0f0: 77 2f 63 6f 6c 6c 65 63 74 69 6f 6e 7d 20 2d 73  w/collection} -s
d100: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44  etup {..  setupD
d110: 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  b [set fileName 
d120: 64 61 74 61 2d 31 2e 32 38 2e 64 62 5d 0d 0a 7d  data-1.28.db]..}
d130: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20   -body {..  sql 
d140: 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20  execute $db {.. 
d150: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
d160: 74 31 28 78 20 49 4e 54 45 47 45 52 20 50 52 49  t1(x INTEGER PRI
d170: 4d 41 52 59 20 4b 45 59 20 41 53 43 2c 20 79 20  MARY KEY ASC, y 
d180: 54 45 58 54 29 3b 0d 0a 20 20 20 20 49 4e 53 45  TEXT);..    INSE
d190: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
d1a0: 29 20 56 41 4c 55 45 53 28 31 2c 20 27 61 61 72  ) VALUES(1, 'aar
d1b0: 64 76 61 72 6b 27 29 3b 0d 0a 20 20 20 20 49 4e  dvark');..    IN
d1c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
d1d0: 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20 27 62   y) VALUES(2, 'b
d1e0: 65 61 72 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45  ear');..    INSE
d1f0: 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79  RT INTO t1 (x, y
d200: 29 20 56 41 4c 55 45 53 28 33 2c 20 27 63 68 69  ) VALUES(3, 'chi
d210: 63 6b 65 6e 27 29 3b 0d 0a 20 20 20 20 49 4e 53  cken');..    INS
d220: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
d230: 79 29 20 56 41 4c 55 45 53 28 34 2c 20 27 64 75  y) VALUES(4, 'du
d240: 63 6b 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  ck');..    INSER
d250: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
d260: 20 56 41 4c 55 45 53 28 35 2c 20 27 65 6c 65 70   VALUES(5, 'elep
d270: 68 61 6e 74 27 29 3b 0d 0a 20 20 20 20 49 4e 53  hant');..    INS
d280: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
d290: 79 29 20 56 41 4c 55 45 53 28 36 2c 20 27 66 72  y) VALUES(6, 'fr
d2a0: 6f 67 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  og');..    INSER
d2b0: 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
d2c0: 20 56 41 4c 55 45 53 28 37 2c 20 27 67 6f 6f 73   VALUES(7, 'goos
d2d0: 65 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  e');..    INSERT
d2e0: 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20   INTO t1 (x, y) 
d2f0: 56 41 4c 55 45 53 28 38 2c 20 27 68 6f 72 73 65  VALUES(8, 'horse
d300: 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  ');..    INSERT 
d310: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
d320: 41 4c 55 45 53 28 39 2c 20 27 69 67 75 61 6e 61  ALUES(9, 'iguana
d330: 27 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20  ');..    INSERT 
d340: 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56  INTO t1 (x, y) V
d350: 41 4c 55 45 53 28 31 30 2c 20 27 6a 65 6c 6c 79  ALUES(10, 'jelly
d360: 66 69 73 68 27 29 3b 0d 0a 20 20 20 20 49 4e 53  fish');..    INS
d370: 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20  ERT INTO t1 (x, 
d380: 79 29 20 56 41 4c 55 45 53 28 31 31 2c 20 27 6b  y) VALUES(11, 'k
d390: 61 6e 67 61 72 6f 6f 27 29 3b 0d 0a 20 20 20 20  angaroo');..    
d3a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
d3b0: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 32 2c  x, y) VALUES(12,
d3c0: 20 27 6c 6c 61 6d 61 27 29 3b 0d 0a 20 20 20 20   'llama');..    
d3d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
d3e0: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 33 2c  x, y) VALUES(13,
d3f0: 20 27 6d 6f 6f 73 65 27 29 3b 0d 0a 20 20 20 20   'moose');..    
d400: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
d410: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 34 2c  x, y) VALUES(14,
d420: 20 27 6e 65 77 74 27 29 3b 0d 0a 20 20 20 20 49   'newt');..    I
d430: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
d440: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 35 2c 20  , y) VALUES(15, 
d450: 27 6f 73 74 72 69 63 68 27 29 3b 0d 0a 20 20 20  'ostrich');..   
d460: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
d470: 28 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31 36  (x, y) VALUES(16
d480: 2c 20 27 70 69 67 27 29 3b 0d 0a 20 20 20 20 49  , 'pig');..    I
d490: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
d4a0: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 37 2c 20  , y) VALUES(17, 
d4b0: 27 71 75 61 69 6c 27 29 3b 0d 0a 20 20 20 20 49  'quail');..    I
d4c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
d4d0: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 38 2c 20  , y) VALUES(18, 
d4e0: 27 72 68 69 6e 6f 63 65 72 6f 73 27 29 3b 0d 0a  'rhinoceros');..
d4f0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
d500: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
d510: 28 31 39 2c 20 27 73 68 61 72 6b 27 29 3b 0d 0a  (19, 'shark');..
d520: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
d530: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
d540: 28 32 30 2c 20 27 74 69 67 65 72 27 29 3b 0d 0a  (20, 'tiger');..
d550: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
d560: 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45 53  t1 (x, y) VALUES
d570: 28 32 31 2c 20 27 75 6e 69 63 6f 72 6e 27 29 3b  (21, 'unicorn');
d580: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
d590: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
d5a0: 45 53 28 32 32 2c 20 27 76 69 70 65 72 27 29 3b  ES(22, 'viper');
d5b0: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
d5c0: 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55  O t1 (x, y) VALU
d5d0: 45 53 28 32 33 2c 20 27 77 65 61 73 65 6c 27 29  ES(23, 'weasel')
d5e0: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
d5f0: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
d600: 55 45 53 28 32 34 2c 20 27 78 65 72 75 73 27 29  UES(24, 'xerus')
d610: 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
d620: 54 4f 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c  TO t1 (x, y) VAL
d630: 55 45 53 28 32 35 2c 20 27 79 61 6b 27 29 3b 0d  UES(25, 'yak');.
d640: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
d650: 20 74 31 20 28 78 2c 20 79 29 20 56 41 4c 55 45   t1 (x, y) VALUE
d660: 53 28 32 36 2c 20 27 7a 65 62 72 61 27 29 3b 0d  S(26, 'zebra');.
d670: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  .  }....  set co
d680: 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
d690: 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....  
d6a0: 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6f 62 6a  set command [obj
d6b0: 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61  ect create -alia
d6c0: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
d6d0: 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d 61  Lite.SQLiteComma
d6e0: 6e 64 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c  nd \..      "SEL
d6f0: 45 43 54 20 78 2c 20 79 2c 20 78 2c 20 79 20 46  ECT x, y, x, y F
d700: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
d710: 79 20 44 45 53 43 3b 22 20 24 63 6f 6e 6e 65 63  y DESC;" $connec
d720: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  tion]....  set r
d730: 65 61 64 65 72 20 5b 24 63 6f 6d 6d 61 6e 64 20  eader [$command 
d740: 2d 61 6c 69 61 73 20 45 78 65 63 75 74 65 52 65  -alias ExecuteRe
d750: 61 64 65 72 5d 0d 0a 20 20 73 65 74 20 63 6f 6c  ader]..  set col
d760: 6c 65 63 74 69 6f 6e 20 5b 24 72 65 61 64 65 72  lection [$reader
d770: 20 2d 61 6c 69 61 73 20 47 65 74 56 61 6c 75 65   -alias GetValue
d780: 73 5d 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  s]..  set result
d790: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6f 62 6a   [list]....  obj
d7a0: 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
d7b0: 61 73 20 69 74 65 6d 20 24 63 6f 6c 6c 65 63 74  as item $collect
d7c0: 69 6f 6e 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65  ion {..    lappe
d7d0: 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6c 6c  nd result [$coll
d7e0: 65 63 74 69 6f 6e 20 47 65 74 56 61 6c 75 65 73  ection GetValues
d7f0: 20 24 69 74 65 6d 5d 0d 0a 20 20 7d 0d 0a 0d 0a   $item]..  }....
d800: 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20    set result..} 
d810: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 66 72  -cleanup {..  fr
d820: 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  eeDbConnection..
d830: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
d840: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 69 74 65  plain result ite
d850: 6d 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 72 65 61  m collection rea
d860: 64 65 72 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 6e  der command conn
d870: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61  ection....  clea
d880: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 3b  nupDb $fileName;
d890: 20 23 20 4e 4f 54 45 3a 20 41 66 74 65 72 20 6f   # NOTE: After o
d8a0: 62 6a 65 63 74 20 64 69 73 70 6f 73 61 6c 2e 0d  bject disposal..
d8b0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
d8c0: 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61  mplain db fileNa
d8d0: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
d8e0: 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
d8f0: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
d900: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
d910: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
d920: 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
d930: 6c 74 20 5c 0d 0a 7b 7b 32 36 20 32 36 7d 20 7b  lt \..{{26 26} {
d940: 7a 65 62 72 61 20 7a 65 62 72 61 7d 7d 7d 0d 0a  zebra zebra}}}..
d950: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
d960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d9a0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
d9b0: 73 74 20 64 61 74 61 2d 31 2e 32 39 20 7b 4c 49  st data-1.29 {LI
d9c0: 4e 51 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61  NQ ISQLiteSchema
d9d0: 45 78 74 65 6e 73 69 6f 6e 73 2e 42 75 69 6c 64  Extensions.Build
d9e0: 54 65 6d 70 53 63 68 65 6d 61 7d 20 2d 73 65 74  TempSchema} -set
d9f0: 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
da00: 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
da10: 74 61 2d 31 2e 32 39 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.29.db]..} -
da20: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63 6f  body {..  set co
da30: 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
da40: 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....  
da50: 73 65 74 20 70 72 6f 76 69 64 65 72 53 65 72 76  set providerServ
da60: 69 63 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76  ices [object inv
da70: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
da80: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53  ublic \..      S
da90: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
daa0: 65 2e 4c 69 6e 71 2e 53 51 4c 69 74 65 50 72 6f  e.Linq.SQLitePro
dab0: 76 69 64 65 72 53 65 72 76 69 63 65 73 20 49 6e  viderServices In
dac0: 73 74 61 6e 63 65 5d 0d 0a 0d 0a 20 20 6f 62 6a  stance]....  obj
dad0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
dae0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 74 79  s +NonPublic -ty
daf0: 70 65 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  pe \..      Syst
db00: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
db10: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
db20: 6e 73 69 6f 6e 73 20 24 70 72 6f 76 69 64 65 72  nsions $provider
db30: 53 65 72 76 69 63 65 73 20 5c 0d 0a 20 20 20 20  Services \..    
db40: 20 20 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d    BuildTempSchem
db50: 61 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 7d  a $connection..}
db60: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
db70: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
db80: 6d 65 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f  me....  freeDbCo
db90: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e  nnection....  un
dba0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
dbb0: 70 72 6f 76 69 64 65 72 53 65 72 76 69 63 65 73  providerServices
dbc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66   connection db f
dbd0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
dbe0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53  traints {eagle S
dbf0: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
dc00: 61 2e 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  a.SQLite System.
dc10: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
dc20: 7d 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 7d 7d  } \..-result {}}
dc30: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
dc40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dc50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dc60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dc80: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
dc90: 74 65 73 74 20 64 61 74 61 2d 31 2e 33 30 20 7b  test data-1.30 {
dca0: 45 46 36 20 49 53 51 4c 69 74 65 53 63 68 65 6d  EF6 ISQLiteSchem
dcb0: 61 45 78 74 65 6e 73 69 6f 6e 73 2e 42 75 69 6c  aExtensions.Buil
dcc0: 64 54 65 6d 70 53 63 68 65 6d 61 7d 20 2d 73 65  dTempSchema} -se
dcd0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
dce0: 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
dcf0: 61 74 61 2d 31 2e 33 30 2e 64 62 5d 0d 0a 7d 20  ata-1.30.db]..} 
dd00: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63  -body {..  set c
dd10: 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62  onnection [getDb
dd20: 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20  Connection].... 
dd30: 20 73 65 74 20 70 72 6f 76 69 64 65 72 53 65 72   set providerSer
dd40: 76 69 63 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e  vices [object in
dd50: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
dd60: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..      
dd70: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
dd80: 74 65 2e 45 46 36 2e 53 51 4c 69 74 65 50 72 6f  te.EF6.SQLitePro
dd90: 76 69 64 65 72 53 65 72 76 69 63 65 73 20 49 6e  viderServices In
dda0: 73 74 61 6e 63 65 5d 0d 0a 0d 0a 20 20 6f 62 6a  stance]....  obj
ddb0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
ddc0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 74 79  s +NonPublic -ty
ddd0: 70 65 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  pe \..      Syst
dde0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
ddf0: 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74 65  SQLiteSchemaExte
de00: 6e 73 69 6f 6e 73 20 24 70 72 6f 76 69 64 65 72  nsions $provider
de10: 53 65 72 76 69 63 65 73 20 5c 0d 0a 20 20 20 20  Services \..    
de20: 20 20 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d    BuildTempSchem
de30: 61 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 7d  a $connection..}
de40: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
de50: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
de60: 6d 65 0d 0a 0d 0a 20 20 66 72 65 65 44 62 43 6f  me....  freeDbCo
de70: 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e  nnection....  un
de80: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
de90: 70 72 6f 76 69 64 65 72 53 65 72 76 69 63 65 73  providerServices
dea0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 62 20 66   connection db f
deb0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
dec0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 53  traints {eagle S
ded0: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
dee0: 61 2e 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  a.SQLite System.
def0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 7d  Data.SQLite.EF6}
df00: 20 5c 0d 0a 2d 72 65 73 75 6c 74 20 7b 7d 7d 0d   \..-result {}}.
df10: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
df20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
df30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
df40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
df50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
df60: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
df70: 65 73 74 20 64 61 74 61 2d 31 2e 33 31 20 7b 56  est data-1.31 {V
df80: 41 52 43 48 41 52 20 2f 20 4e 56 41 52 43 48 41  ARCHAR / NVARCHA
df90: 52 20 74 79 70 65 73 20 77 69 74 68 20 73 70 61  R types with spa
dfa0: 63 65 73 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  ces} -body {..  
dfb0: 6c 69 73 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  list [object inv
dfc0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
dfd0: 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74  ublic System.Dat
dfe0: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
dff0: 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20 20 20 20  onvert \..      
e000: 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70 65  TypeNameToDbType
e010: 20 6e 75 6c 6c 20 56 41 52 43 48 41 52 20 4e 6f   null VARCHAR No
e020: 6e 65 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 6f 62  ne] \..      [ob
e030: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
e040: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79  gs +NonPublic Sy
e050: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
e060: 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 5c  .SQLiteConvert \
e070: 0d 0a 20 20 20 20 20 20 54 79 70 65 4e 61 6d 65  ..      TypeName
e080: 54 6f 44 62 54 79 70 65 20 6e 75 6c 6c 20 4e 56  ToDbType null NV
e090: 41 52 43 48 41 52 20 4e 6f 6e 65 5d 20 5c 0d 0a  ARCHAR None] \..
e0a0: 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e        [object in
e0b0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
e0c0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61  Public System.Da
e0d0: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
e0e0: 43 6f 6e 76 65 72 74 20 5c 0d 0a 20 20 20 20 20  Convert \..     
e0f0: 20 54 79 70 65 4e 61 6d 65 54 6f 44 62 54 79 70   TypeNameToDbTyp
e100: 65 20 6e 75 6c 6c 20 56 41 52 43 48 41 52 28 31  e null VARCHAR(1
e110: 29 20 4e 6f 6e 65 5d 20 5c 0d 0a 20 20 20 20 20  ) None] \..     
e120: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
e130: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
e140: 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  c System.Data.SQ
e150: 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 76 65  Lite.SQLiteConve
e160: 72 74 20 5c 0d 0a 20 20 20 20 20 20 54 79 70 65  rt \..      Type
e170: 4e 61 6d 65 54 6f 44 62 54 79 70 65 20 6e 75 6c  NameToDbType nul
e180: 6c 20 4e 56 41 52 43 48 41 52 28 31 29 20 4e 6f  l NVARCHAR(1) No
e190: 6e 65 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 6f 62  ne] \..      [ob
e1a0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
e1b0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79  gs +NonPublic Sy
e1c0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
e1d0: 2e 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 5c  .SQLiteConvert \
e1e0: 0d 0a 20 20 20 20 20 20 54 79 70 65 4e 61 6d 65  ..      TypeName
e1f0: 54 6f 44 62 54 79 70 65 20 6e 75 6c 6c 20 22 56  ToDbType null "V
e200: 41 52 43 48 41 52 20 28 31 29 22 20 4e 6f 6e 65  ARCHAR (1)" None
e210: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 6f 62 6a 65  ] \..      [obje
e220: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
e230: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74   +NonPublic Syst
e240: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
e250: 51 4c 69 74 65 43 6f 6e 76 65 72 74 20 5c 0d 0a  QLiteConvert \..
e260: 20 20 20 20 20 20 54 79 70 65 4e 61 6d 65 54 6f        TypeNameTo
e270: 44 62 54 79 70 65 20 6e 75 6c 6c 20 22 4e 56 41  DbType null "NVA
e280: 52 43 48 41 52 20 28 31 29 22 20 4e 6f 6e 65 5d  RCHAR (1)" None]
e290: 20 5c 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e   \..} -constrain
e2a0: 74 73 20 7b 65 61 67 6c 65 20 53 79 73 74 65 6d  ts {eagle System
e2b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
e2c0: 65 73 75 6c 74 20 5c 0d 0a 7b 41 6e 73 69 53 74  esult \..{AnsiSt
e2d0: 72 69 6e 67 20 53 74 72 69 6e 67 20 41 6e 73 69  ring String Ansi
e2e0: 53 74 72 69 6e 67 20 53 74 72 69 6e 67 20 41 6e  String String An
e2f0: 73 69 53 74 72 69 6e 67 20 53 74 72 69 6e 67 7d  siString String}
e300: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
e310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e350: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
e360: 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 33 32 20  {test data-1.32 
e370: 7b 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73  {SetMemoryStatus
e380: 20 6d 65 74 68 6f 64 7d 20 2d 73 65 74 75 70 20   method} -setup 
e390: 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  {..  #..  # NOTE
e3a0: 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
e3b0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
e3c0: 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65  rary is complete
e3d0: 6c 79 20 73 68 75 74 64 6f 77 6e 20 70 72 69 6f  ly shutdown prio
e3e0: 72 20 74 6f 0d 0a 20 20 23 20 20 20 20 20 20 20  r to..  #       
e3f0: 73 74 61 72 74 69 6e 67 20 74 68 69 73 20 74 65  starting this te
e400: 73 74 2e 0d 0a 20 20 23 0d 0a 20 20 73 68 75 74  st...  #..  shut
e410: 64 6f 77 6e 53 51 4c 69 74 65 20 24 74 65 73 74  downSQLite $test
e420: 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 23 0d  _channel....  #.
e430: 0a 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74  .  # NOTE: Creat
e440: 65 20 61 6e 20 49 6e 74 50 74 72 20 69 6e 73 74  e an IntPtr inst
e450: 61 6e 63 65 20 77 69 74 68 20 61 20 76 61 6c 75  ance with a valu
e460: 65 20 6f 66 20 7a 65 72 6f 2e 0d 0a 20 20 23 0d  e of zero...  #.
e470: 0a 20 20 73 65 74 20 7a 65 72 6f 20 5b 6f 62 6a  .  set zero [obj
e480: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61  ect invoke -crea
e490: 74 65 20 49 6e 74 50 74 72 20 5a 65 72 6f 5d 0d  te IntPtr Zero].
e4a0: 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
e4b0: 3a 20 43 72 65 61 74 65 20 61 6e 20 69 6e 73 74  : Create an inst
e4c0: 61 6e 63 65 20 6f 66 20 74 68 65 20 63 6f 72 65  ance of the core
e4d0: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20   SQLite library 
e4e0: 69 6e 74 65 72 6f 70 20 77 72 61 70 70 65 72 20  interop wrapper 
e4f0: 63 6c 61 73 73 2e 0d 0a 20 20 23 0d 0a 20 20 73  class...  #..  s
e500: 65 74 20 73 71 6c 69 74 65 33 20 5b 6f 62 6a 65  et sqlite3 [obje
e510: 63 74 20 63 72 65 61 74 65 20 2d 66 6c 61 67 73  ct create -flags
e520: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74   +NonPublic Syst
e530: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
e540: 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20  QLite3 \..      
e550: 44 65 66 61 75 6c 74 20 55 6e 73 70 65 63 69 66  Default Unspecif
e560: 69 65 64 20 6e 75 6c 6c 20 24 7a 65 72 6f 20 6e  ied null $zero n
e570: 75 6c 6c 20 74 72 75 65 5d 0d 0a 7d 20 2d 62 6f  ull true]..} -bo
e580: 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75  dy {..  set resu
e590: 6c 74 28 72 63 31 29 20 5b 6f 62 6a 65 63 74 20  lt(rc1) [object 
e5a0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
e5b0: 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c 69 74 65  onPublic $sqlite
e5c0: 33 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  3 SetMemoryStatu
e5d0: 73 20 5c 0d 0a 20 20 20 20 20 20 66 61 6c 73 65  s \..      false
e5e0: 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
e5f0: 74 28 62 65 66 6f 72 65 29 20 5b 6f 62 6a 65 63  t(before) [objec
e600: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
e610: 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c 69  +NonPublic $sqli
e620: 74 65 33 20 4d 65 6d 6f 72 79 55 73 65 64 5d 0d  te3 MemoryUsed].
e630: 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28  ...  set result(
e640: 70 74 72 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e  ptr1) [object in
e650: 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 2d 66 6c  voke -create -fl
e660: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
e670: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
e680: 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
e690: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73  eNativeMethods s
e6a0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 31 30  qlite3_malloc 10
e6b0: 30 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  0]....  set resu
e6c0: 6c 74 28 61 66 74 65 72 31 29 20 5b 6f 62 6a 65  lt(after1) [obje
e6d0: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
e6e0: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c   +NonPublic $sql
e6f0: 69 74 65 33 20 4d 65 6d 6f 72 79 55 73 65 64 5d  ite3 MemoryUsed]
e700: 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76  ....  object inv
e710: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
e720: 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74  ublic System.Dat
e730: 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
e740: 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
e750: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
e760: 65 65 20 24 72 65 73 75 6c 74 28 70 74 72 31 29  ee $result(ptr1)
e770: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
e780: 28 61 66 74 65 72 32 29 20 5b 6f 62 6a 65 63 74  (after2) [object
e790: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
e7a0: 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c 69 74  NonPublic $sqlit
e7b0: 65 33 20 4d 65 6d 6f 72 79 55 73 65 64 5d 0d 0a  e3 MemoryUsed]..
e7c0: 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 72  ..  set result(r
e7d0: 63 32 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  c2) [object invo
e7e0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
e7f0: 62 6c 69 63 20 24 73 71 6c 69 74 65 33 20 53 65  blic $sqlite3 Se
e800: 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 20 5c 0d  tMemoryStatus \.
e810: 0a 20 20 20 20 20 20 74 72 75 65 5d 0d 0a 0d 0a  .      true]....
e820: 20 20 73 65 74 20 72 65 73 75 6c 74 28 72 63 33    set result(rc3
e830: 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ) [object invoke
e840: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
e850: 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  ic \..      Syst
e860: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
e870: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e880: 64 73 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  ds sqlite3_shutd
e890: 6f 77 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  own]....  set re
e8a0: 73 75 6c 74 28 72 63 34 29 20 5b 6f 62 6a 65 63  sult(rc4) [objec
e8b0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
e8c0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71 6c 69  +NonPublic $sqli
e8d0: 74 65 33 20 53 65 74 4d 65 6d 6f 72 79 53 74 61  te3 SetMemorySta
e8e0: 74 75 73 20 5c 0d 0a 20 20 20 20 20 20 74 72 75  tus \..      tru
e8f0: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  e]....  set resu
e900: 6c 74 28 70 74 72 32 29 20 5b 6f 62 6a 65 63 74  lt(ptr2) [object
e910: 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20   invoke -create 
e920: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
e930: 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  c \..      Syste
e940: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
e950: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e960: 73 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  s sqlite3_malloc
e970: 20 31 30 30 5d 0d 0a 0d 0a 20 20 73 65 74 20 72   100]....  set r
e980: 65 73 75 6c 74 28 61 66 74 65 72 33 29 20 5b 6f  esult(after3) [o
e990: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
e9a0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24  ags +NonPublic $
e9b0: 73 71 6c 69 74 65 33 20 4d 65 6d 6f 72 79 55 73  sqlite3 MemoryUs
e9c0: 65 64 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20  ed]....  object 
e9d0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
e9e0: 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e  onPublic System.
e9f0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
ea00: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods 
ea10: 5c 0d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  \..      sqlite3
ea20: 5f 66 72 65 65 20 24 72 65 73 75 6c 74 28 70 74  _free $result(pt
ea30: 72 32 29 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  r2)....  set res
ea40: 75 6c 74 28 61 66 74 65 72 34 29 20 5b 6f 62 6a  ult(after4) [obj
ea50: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
ea60: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 73 71  s +NonPublic $sq
ea70: 6c 69 74 65 33 20 4d 65 6d 6f 72 79 55 73 65 64  lite3 MemoryUsed
ea80: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 72 65 73  ]....  list $res
ea90: 75 6c 74 28 72 63 31 29 20 24 72 65 73 75 6c 74  ult(rc1) $result
eaa0: 28 72 63 32 29 20 24 72 65 73 75 6c 74 28 72 63  (rc2) $result(rc
eab0: 33 29 20 24 72 65 73 75 6c 74 28 72 63 34 29 20  3) $result(rc4) 
eac0: 24 72 65 73 75 6c 74 28 70 74 72 31 29 20 5c 0d  $result(ptr1) \.
ead0: 0a 20 20 20 20 20 20 24 72 65 73 75 6c 74 28 70  .      $result(p
eae0: 74 72 32 29 20 24 72 65 73 75 6c 74 28 62 65 66  tr2) $result(bef
eaf0: 6f 72 65 29 20 24 72 65 73 75 6c 74 28 61 66 74  ore) $result(aft
eb00: 65 72 31 29 20 24 72 65 73 75 6c 74 28 61 66 74  er1) $result(aft
eb10: 65 72 32 29 20 5c 0d 0a 20 20 20 20 20 20 24 72  er2) \..      $r
eb20: 65 73 75 6c 74 28 61 66 74 65 72 33 29 20 24 72  esult(after3) $r
eb30: 65 73 75 6c 74 28 61 66 74 65 72 34 29 20 5c 0d  esult(after4) \.
eb40: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 72  .      [expr {$r
eb50: 65 73 75 6c 74 28 62 65 66 6f 72 65 29 20 3d 3d  esult(before) ==
eb60: 20 24 72 65 73 75 6c 74 28 61 66 74 65 72 31 29   $result(after1)
eb70: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
eb80: 72 20 7b 24 72 65 73 75 6c 74 28 62 65 66 6f 72  r {$result(befor
eb90: 65 29 20 3d 3d 20 24 72 65 73 75 6c 74 28 61 66  e) == $result(af
eba0: 74 65 72 32 29 7d 5d 20 5c 0d 0a 20 20 20 20 20  ter2)}] \..     
ebb0: 20 5b 65 78 70 72 20 7b 24 72 65 73 75 6c 74 28   [expr {$result(
ebc0: 61 66 74 65 72 33 29 20 3e 20 30 7d 5d 20 5c 0d  after3) > 0}] \.
ebd0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 72  .      [expr {$r
ebe0: 65 73 75 6c 74 28 62 65 66 6f 72 65 29 20 3c 20  esult(before) < 
ebf0: 24 72 65 73 75 6c 74 28 61 66 74 65 72 33 29 7d  $result(after3)}
ec00: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
ec10: 20 7b 24 72 65 73 75 6c 74 28 61 66 74 65 72 31   {$result(after1
ec20: 29 20 3c 20 24 72 65 73 75 6c 74 28 61 66 74 65  ) < $result(afte
ec30: 72 33 29 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  r3)}] \..      [
ec40: 65 78 70 72 20 7b 24 72 65 73 75 6c 74 28 61 66  expr {$result(af
ec50: 74 65 72 34 29 20 3c 20 24 72 65 73 75 6c 74 28  ter4) < $result(
ec60: 61 66 74 65 72 33 29 7d 5d 0d 0a 7d 20 2d 63 6c  after3)}]..} -cl
ec70: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74 63 68  eanup {..  catch
ec80: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
ec90: 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65   NOTE: Make sure
eca0: 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72   that SQLite cor
ecb0: 65 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d  e library is com
ecc0: 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e  pletely shutdown
ecd0: 20 70 72 69 6f 72 0d 0a 20 20 20 20 23 20 20 20   prior..    #   
ece0: 20 20 20 20 74 6f 20 61 74 74 65 6d 70 74 69 6e      to attemptin
ecf0: 67 20 74 6f 20 72 65 63 6f 6e 66 69 67 75 72 65  g to reconfigure
ed00: 20 74 68 65 20 6d 65 6d 6f 72 79 20 73 74 61 74   the memory stat
ed10: 75 73 20 73 65 74 74 69 6e 67 2e 0d 0a 20 20 20  us setting...   
ed20: 20 23 0d 0a 20 20 20 20 73 68 75 74 64 6f 77 6e   #..    shutdown
ed30: 53 51 4c 69 74 65 20 24 74 65 73 74 5f 63 68 61  SQLite $test_cha
ed40: 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20  nnel....    #.. 
ed50: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
ed60: 70 74 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  pt to make sure 
ed70: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
ed80: 65 20 66 6f 72 20 74 68 65 20 70 72 6f 63 65 73  e for the proces
ed90: 73 2d 77 69 64 65 0d 0a 20 20 20 20 23 20 20 20  s-wide..    #   
eda0: 20 20 20 20 6d 65 6d 6f 72 79 20 75 73 61 67 65      memory usage
edb0: 20 74 72 61 63 6b 69 6e 67 20 73 65 74 74 69 6e   tracking settin
edc0: 67 20 69 73 20 72 65 73 74 6f 72 65 64 2e 20 20  g is restored.  
edd0: 54 68 69 73 20 69 73 20 6e 6f 74 20 31 30 30 25  This is not 100%
ede0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 72 65  ..    #       re
edf0: 6c 69 61 62 6c 65 20 62 65 63 61 75 73 65 20 77  liable because w
ee00: 65 20 68 61 76 65 20 6e 6f 20 69 64 65 61 20 77  e have no idea w
ee10: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
ee20: 20 76 61 6c 75 65 20 77 61 73 0d 0a 20 20 20 20   value was..    
ee30: 23 20 20 20 20 20 20 20 75 70 6f 6e 20 65 6e 74  #       upon ent
ee40: 72 79 20 69 6e 74 6f 20 74 68 69 73 20 74 65 73  ry into this tes
ee50: 74 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20  t (i.e. because 
ee60: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 63  the underlying c
ee70: 6f 72 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20  ore..    #      
ee80: 20 6c 69 62 72 61 72 79 20 70 72 6f 70 65 72 74   library propert
ee90: 79 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 77  y is currently w
eea0: 72 69 74 65 2d 6f 6e 6c 79 29 2e 0d 0a 20 20 20  rite-only)...   
eeb0: 20 23 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 69   #..    object i
eec0: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
eed0: 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44  nPublic System.D
eee0: 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
eef0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
ef00: 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ..        sqlite
ef10: 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 20 53 51 4c  3_config_int SQL
ef20: 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54  ITE_CONFIG_MEMST
ef30: 41 54 55 53 20 31 0d 0a 20 20 7d 0d 0a 0d 0a 20  ATUS 1..  }.... 
ef40: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
ef50: 69 6e 20 72 65 73 75 6c 74 20 73 71 6c 69 74 65  in result sqlite
ef60: 33 20 7a 65 72 6f 0d 0a 7d 20 2d 63 6f 6e 73 74  3 zero..} -const
ef70: 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
ef80: 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
ef90: 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
efa0: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
efb0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
efc0: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
efd0: 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 20 4d 69 73  -result {^Ok Mis
efe0: 75 73 65 20 4f 6b 20 4f 6b 20 53 79 73 74 65 6d  use Ok Ok System
eff0: 23 49 6e 74 50 74 72 23 5c 64 2b 20 53 79 73 74  #IntPtr#\d+ Syst
f000: 65 6d 23 49 6e 74 50 74 72 23 5c 64 2b 20 5c 64  em#IntPtr#\d+ \d
f010: 2b 20 5c 64 2b 5c 0d 0a 5c 64 2b 20 5c 64 2b 20  + \d+\..\d+ \d+ 
f020: 5c 64 2b 20 54 72 75 65 20 54 72 75 65 20 54 72  \d+ True True Tr
f030: 75 65 20 54 72 75 65 20 54 72 75 65 20 54 72 75  ue True True Tru
f040: 65 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  e$}}....########
f050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f090: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
f0a0: 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
f0b0: 33 33 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63  33 {SQLiteConnec
f0c0: 74 69 6f 6e 2e 4f 70 65 6e 20 77 69 74 68 20 53  tion.Open with S
f0d0: 65 74 44 65 66 61 75 6c 74 73 3d 46 61 6c 73 65  etDefaults=False
f0e0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
f0f0: 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
f100: 61 6d 65 20 64 61 74 61 2d 31 2e 33 33 2e 64 62  ame data-1.33.db
f110: 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 53 65  ] "" "" "" "" Se
f120: 74 44 65 66 61 75 6c 74 73 3d 46 61 6c 73 65 0d  tDefaults=False.
f130: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
f140: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
f150: 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
f160: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
f170: 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
f180: 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61 67   $db "PRAGMA pag
f190: 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70  e_size;"]..  lap
f1a0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
f1b0: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
f1c0: 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52  e scalar $db "PR
f1d0: 41 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f  AGMA max_page_co
f1e0: 75 6e 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  unt;"]..  lappen
f1f0: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
f200: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
f210: 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM
f220: 41 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f  A legacy_file_fo
f230: 72 6d 61 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  rmat;"]..  lappe
f240: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f250: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f260: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f270: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 22  MA synchronous;"
f280: 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ]..  lappend res
f290: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
f2a0: 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
f2b0: 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 61 63   $db "PRAGMA cac
f2c0: 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61  he_size;"]..  la
f2d0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
f2e0: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
f2f0: 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50  te scalar $db "P
f300: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
f310: 64 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  de;"]..  lappend
f320: 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
f330: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
f340: 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA
f350: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3b 22 5d   foreign_keys;"]
f360: 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
f370: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
f380: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
f390: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
f3a0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
f3b0: 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ult db fileName.
f3c0: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
f3d0: 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
f3e0: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
f3f0: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
f400: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
f410: 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20  SQLite} -result 
f420: 5c 0d 0a 7b 31 30 32 34 20 31 30 37 33 37 34 31  \..{1024 1073741
f430: 38 32 33 20 30 20 32 20 32 30 30 30 20 64 65 6c  823 0 2 2000 del
f440: 65 74 65 20 30 7d 7d 0d 0a 0d 0a 23 23 23 23 23  ete 0}}....#####
f450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
f4a0: 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
f4b0: 2d 31 2e 33 34 20 7b 53 51 4c 69 74 65 43 6f 6e  -1.34 {SQLiteCon
f4c0: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 20 77 69 74  nection.Open wit
f4d0: 68 20 53 65 74 44 65 66 61 75 6c 74 73 3d 54 72  h SetDefaults=Tr
f4e0: 75 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ue} -setup {..  
f4f0: 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
f500: 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 33 34 2e  eName data-1.34.
f510: 64 62 5d 20 22 22 20 22 22 20 22 22 20 22 22 20  db] "" "" "" "" 
f520: 53 65 74 44 65 66 61 75 6c 74 73 3d 54 72 75 65  SetDefaults=True
f530: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
f540: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
f550: 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
f560: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
f570: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
f580: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61  r $db "PRAGMA pa
f590: 67 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c 61  ge_size;"]..  la
f5a0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
f5b0: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
f5c0: 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50  te scalar $db "P
f5d0: 52 41 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63  RAGMA max_page_c
f5e0: 6f 75 6e 74 3b 22 5d 0d 0a 20 20 6c 61 70 70 65  ount;"]..  lappe
f5f0: 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65  nd result [sql e
f600: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
f610: 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47  scalar $db "PRAG
f620: 4d 41 20 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  MA legacy_file_f
f630: 6f 72 6d 61 74 3b 22 5d 0d 0a 20 20 6c 61 70 70  ormat;"]..  lapp
f640: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
f650: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
f660: 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41   scalar $db "PRA
f670: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
f680: 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
f690: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
f6a0: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
f6b0: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 61  r $db "PRAGMA ca
f6c0: 63 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 6c  che_size;"]..  l
f6d0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73  append result [s
f6e0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
f6f0: 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db "
f700: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
f710: 6f 64 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e  ode;"]..  lappen
f720: 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
f730: 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
f740: 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM
f750: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 3b 22  A foreign_keys;"
f760: 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
f770: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
f780: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
f790: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
f7a0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
f7b0: 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61 6d 65  sult db fileName
f7c0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
f7d0: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
f7e0: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
f7f0: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
f800: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
f810: 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
f820: 20 5c 0d 0a 7b 31 30 32 34 20 31 30 37 33 37 34   \..{1024 107374
f830: 31 38 32 33 20 30 20 32 20 32 30 30 30 20 64 65  1823 0 2 2000 de
f840: 6c 65 74 65 20 30 7d 7d 0d 0a 0d 0a 23 23 23 23  lete 0}}....####
f850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f890: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
f8a0: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
f8b0: 61 2d 31 2e 33 35 20 7b 53 51 4c 69 74 65 43 6f  a-1.35 {SQLiteCo
f8c0: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 20 77 69  nnection.Open wi
f8d0: 74 68 6f 75 74 20 53 65 74 44 65 66 61 75 6c 74  thout SetDefault
f8e0: 73 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  s} -setup {..  s
f8f0: 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65  etupDb [set file
f900: 4e 61 6d 65 20 64 61 74 61 2d 31 2e 33 35 2e 64  Name data-1.35.d
f910: 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  b]..} -body {.. 
f920: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
f930: 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t]....  lappend 
f940: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
f950: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
f960: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
f970: 70 61 67 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20  page_size;"]..  
f980: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
f990: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
f9a0: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
f9b0: 22 50 52 41 47 4d 41 20 6d 61 78 5f 70 61 67 65  "PRAGMA max_page
f9c0: 5f 63 6f 75 6e 74 3b 22 5d 0d 0a 20 20 6c 61 70  _count;"]..  lap
f9d0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
f9e0: 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
f9f0: 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52  e scalar $db "PR
fa00: 41 47 4d 41 20 6c 65 67 61 63 79 5f 66 69 6c 65  AGMA legacy_file
fa10: 5f 66 6f 72 6d 61 74 3b 22 5d 0d 0a 20 20 6c 61  _format;"]..  la
fa20: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71  ppend result [sq
fa30: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
fa40: 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50  te scalar $db "P
fa50: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
fa60: 73 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  s;"]..  lappend 
fa70: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
fa80: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
fa90: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
faa0: 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20  cache_size;"].. 
fab0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
fac0: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
fad0: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
fae0: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
faf0: 5f 6d 6f 64 65 3b 22 5d 0d 0a 20 20 6c 61 70 70  _mode;"]..  lapp
fb00: 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
fb10: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
fb20: 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41   scalar $db "PRA
fb30: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73  GMA foreign_keys
fb40: 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  ;"]....  set res
fb50: 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
fb60: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
fb70: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
fb80: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
fb90: 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e 61  result db fileNa
fba0: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
fbb0: 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
fbc0: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
fbd0: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
fbe0: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
fbf0: 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
fc00: 6c 74 20 5c 0d 0a 7b 31 30 32 34 20 31 30 37 33  lt \..{1024 1073
fc10: 37 34 31 38 32 33 20 30 20 32 20 32 30 30 30 20  741823 0 2 2000 
fc20: 64 65 6c 65 74 65 20 30 7d 7d 0d 0a 0d 0a 23 23  delete 0}}....##
fc30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
fc80: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
fc90: 61 74 61 2d 31 2e 33 36 20 7b 53 51 4c 69 74 65  ata-1.36 {SQLite
fca0: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 20  Connection.Open 
fcb0: 77 69 74 68 20 50 52 41 47 4d 41 20 6f 76 65 72  with PRAGMA over
fcc0: 72 69 64 65 73 7d 20 2d 73 65 74 75 70 20 7b 0d  rides} -setup {.
fcd0: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE: 
fce0: 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20  Attempt to open 
fcf0: 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74  a connection wit
fd00: 68 20 61 6c 6c 20 61 76 61 69 6c 61 62 6c 65 20  h all available 
fd10: 50 52 41 47 4d 41 20 73 65 74 74 69 6e 67 73 0d  PRAGMA settings.
fd20: 0a 20 20 23 20 20 20 20 20 20 20 73 65 74 20 74  .  #       set t
fd30: 6f 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 76 61  o non-default va
fd40: 6c 75 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 6e  lues in the conn
fd50: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a  ection string...
fd60: 20 20 23 0d 0a 20 20 73 65 74 75 70 44 62 20 5b    #..  setupDb [
fd70: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
fd80: 61 2d 31 2e 33 36 2e 64 62 5d 20 22 22 20 22 22  a-1.36.db] "" ""
fd90: 20 22 22 20 22 22 20 5b 6a 6f 69 6e 20 5b 6c 69   "" "" [join [li
fda0: 73 74 20 5c 0d 0a 20 20 20 20 20 20 22 50 61 67  st \..      "Pag
fdb0: 65 20 53 69 7a 65 3d 34 30 39 36 22 20 22 4d 61  e Size=4096" "Ma
fdc0: 78 20 50 61 67 65 20 43 6f 75 6e 74 3d 32 30 34  x Page Count=204
fdd0: 38 22 20 22 4c 65 67 61 63 79 20 46 6f 72 6d 61  8" "Legacy Forma
fde0: 74 3d 54 72 75 65 22 20 5c 0d 0a 20 20 20 20 20  t=True" \..     
fdf0: 20 53 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 6f 72   Synchronous=Nor
fe00: 6d 61 6c 20 22 43 61 63 68 65 20 53 69 7a 65 3d  mal "Cache Size=
fe10: 34 30 39 36 22 20 22 4a 6f 75 72 6e 61 6c 20 4d  4096" "Journal M
fe20: 6f 64 65 3d 57 61 6c 22 20 5c 0d 0a 20 20 20 20  ode=Wal" \..    
fe30: 20 20 22 46 6f 72 65 69 67 6e 20 4b 65 79 73 3d    "Foreign Keys=
fe40: 54 72 75 65 22 5d 20 5c 3b 5d 0d 0a 7d 20 2d 62  True"] \;]..} -b
fe50: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73  ody {..  set res
fe60: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
fe70: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
fe80: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
fe90: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
fea0: 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a  "PRAGMA page_siz
feb0: 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  e;"]..  lappend 
fec0: 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
fed0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
fee0: 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20  lar $db "PRAGMA 
fef0: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3b 22  max_page_count;"
ff00: 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ]..  lappend res
ff10: 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65  ult [sql execute
ff20: 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
ff30: 20 24 64 62 20 22 50 52 41 47 4d 41 20 6c 65 67   $db "PRAGMA leg
ff40: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  acy_file_format;
ff50: 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
ff60: 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
ff70: 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
ff80: 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 73 79  r $db "PRAGMA sy
ff90: 6e 63 68 72 6f 6e 6f 75 73 3b 22 5d 0d 0a 20 20  nchronous;"]..  
ffa0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
ffb0: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
ffc0: 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
ffd0: 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69  "PRAGMA cache_si
ffe0: 7a 65 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64  ze;"]..  lappend
fff0: 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
10000 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
10010 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA
10020 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3b 22 5d   journal_mode;"]
10030 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
10040 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
10050 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
10060 24 64 62 20 22 50 52 41 47 4d 41 20 66 6f 72 65  $db "PRAGMA fore
10070 69 67 6e 5f 6b 65 79 73 3b 22 5d 0d 0a 0d 0a 20  ign_keys;"].... 
10080 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
10090 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
100a0 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
100b0 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
100c0 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 64  omplain result d
100d0 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
100e0 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
100f0 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
10100 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
10110 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
10120 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
10130 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 34  e} -result \..{4
10140 30 39 36 20 32 30 34 38 20 31 20 31 20 34 30 39  096 2048 1 1 409
10150 36 20 77 61 6c 20 31 7d 7d 0d 0a 0d 0a 23 23 23  6 wal 1}}....###
10160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
101a0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
101b0 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
101c0 74 61 2d 31 2e 33 37 20 7b 73 71 6c 69 74 65 33  ta-1.37 {sqlite3
101d0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
101e0 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 7d 20 2d  tory function} -
101f0 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 64  setup {..  set d
10200 69 72 65 63 74 6f 72 79 28 62 61 73 65 29 20 5b  irectory(base) [
10210 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
10220 74 6f 72 79 5d 0d 0a 0d 0a 20 20 69 66 20 7b 5b  tory]....  if {[
10230 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64  string length $d
10240 69 72 65 63 74 6f 72 79 28 62 61 73 65 29 5d 20  irectory(base)] 
10250 3d 3d 20 30 20 7c 7c 20 5c 0d 0a 20 20 20 20 20  == 0 || \..     
10260 20 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   ![file exists $
10270 64 69 72 65 63 74 6f 72 79 28 62 61 73 65 29 5d  directory(base)]
10280 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 21 5b 66   || \..      ![f
10290 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20  ile isdirectory 
102a0 24 64 69 72 65 63 74 6f 72 79 28 62 61 73 65 29  $directory(base)
102b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65  ]} then {..    e
102c0 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
102d0 20 22 62 61 73 65 20 64 69 72 65 63 74 6f 72 79   "base directory
102e0 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 28   \"" $directory(
102f0 62 61 73 65 29 20 22 5c 22 20 69 73 20 69 6e 76  base) "\" is inv
10300 61 6c 69 64 22 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  alid"]..  }.... 
10310 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 28 64   set directory(d
10320 61 74 61 29 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  ata) [file join 
10330 24 64 69 72 65 63 74 6f 72 79 28 62 61 73 65 29  $directory(base)
10340 20 5c 0d 0a 20 20 20 20 20 20 5b 61 70 70 65 6e   \..      [appen
10350 64 41 72 67 73 20 73 71 6c 69 74 65 20 2e 64 61  dArgs sqlite .da
10360 74 61 2e 20 5b 70 69 64 5d 5d 5d 0d 0a 0d 0a 20  ta. [pid]]].... 
10370 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 64 69 72   file mkdir $dir
10380 65 63 74 6f 72 79 28 64 61 74 61 29 0d 0a 0d 0a  ectory(data)....
10390 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68    tputs $test_ch
103a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
103b0 73 20 22 2d 2d 2d 2d 20 63 72 65 61 74 65 64 20  s "---- created 
103c0 64 61 74 61 20 64 69 72 65 63 74 6f 72 79 20 5c  data directory \
103d0 22 22 20 5c 0d 0a 20 20 20 20 20 20 24 64 69 72  "" \..      $dir
103e0 65 63 74 6f 72 79 28 64 61 74 61 29 20 5c 22 5c  ectory(data) \"\
103f0 6e 5d 0d 0a 0d 0a 20 20 73 65 74 20 64 69 72 65  n]....  set dire
10400 63 74 6f 72 79 28 74 65 6d 70 29 20 5b 66 69 6c  ctory(temp) [fil
10410 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director
10420 79 28 62 61 73 65 29 20 5c 0d 0a 20 20 20 20 20  y(base) \..     
10430 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 71 6c   [appendArgs sql
10440 69 74 65 20 2e 74 65 6d 70 2e 20 5b 70 69 64 5d  ite .temp. [pid]
10450 5d 5d 0d 0a 0d 0a 20 20 66 69 6c 65 20 6d 6b 64  ]]....  file mkd
10460 69 72 20 24 64 69 72 65 63 74 6f 72 79 28 74 65  ir $directory(te
10470 6d 70 29 0d 0a 0d 0a 20 20 74 70 75 74 73 20 24  mp)....  tputs $
10480 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
10490 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63  pendArgs "---- c
104a0 72 65 61 74 65 64 20 74 65 6d 70 6f 72 61 72 79  reated temporary
104b0 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c   directory \"" \
104c0 0d 0a 20 20 20 20 20 20 24 64 69 72 65 63 74 6f  ..      $directo
104d0 72 79 28 74 65 6d 70 29 20 5c 22 5c 6e 5d 0d 0a  ry(temp) \"\n]..
104e0 0d 0a 20 20 70 72 6f 63 20 74 68 72 65 61 64 53  ..  proc threadS
104f0 74 61 72 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 77  tart {} {..    w
10500 68 69 6c 65 20 7b 24 3a 3a 69 20 3c 20 31 30 30  hile {$::i < 100
10510 30 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20  0} {..      set 
10520 3a 3a 66 6f 75 6e 64 28 74 65 6d 70 29 20 5b 65  ::found(temp) [e
10530 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  xpr \..         
10540 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 66 69 6c 65   {[llength [file
10550 20 6c 69 73 74 20 24 3a 3a 64 69 72 65 63 74 6f   list $::directo
10560 72 79 28 74 65 6d 70 29 20 65 74 69 6c 71 73 5f  ry(temp) etilqs_
10570 2a 5d 5d 20 3e 20 30 7d 5d 0d 0a 0d 0a 20 20 20  *]] > 0}]....   
10580 20 20 20 69 66 20 7b 24 3a 3a 66 6f 75 6e 64 28     if {$::found(
10590 74 65 6d 70 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  temp)} then {.. 
105a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20         return.. 
105b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
105c0 20 7d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69   }....  object i
105d0 6d 70 6f 72 74 20 53 79 73 74 65 6d 2e 54 68 72  mport System.Thr
105e0 65 61 64 69 6e 67 0d 0a 7d 20 2d 62 6f 64 79 20  eading..} -body 
105f0 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20  {..  set result 
10600 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 23 0d 0a 20  [list]....  #.. 
10610 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
10620 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 70   to modify the p
10630 72 6f 63 65 73 73 2d 77 69 64 65 20 64 61 74 61  rocess-wide data
10640 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64   and temporary d
10650 69 72 65 63 74 6f 72 79 0d 0a 20 20 23 20 20 20  irectory..  #   
10660 20 20 20 20 73 65 74 74 69 6e 67 73 20 66 6f 72      settings for
10670 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
10680 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 23 0d 0a   library...  #..
10690 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
106a0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
106b0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
106c0 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  c \..      Syste
106d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
106e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
106f0 73 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  s sqlite3_win32_
10700 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 31 20  set_directory 1 
10710 5c 0d 0a 20 20 20 20 20 20 24 64 69 72 65 63 74  \..      $direct
10720 6f 72 79 28 64 61 74 61 29 5d 0d 0a 0d 0a 20 20  ory(data)]....  
10730 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
10740 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
10750 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
10760 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  \..      System.
10770 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
10780 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods 
10790 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
107a0 74 5f 64 69 72 65 63 74 6f 72 79 20 32 20 5c 0d  t_directory 2 \.
107b0 0a 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72  .      $director
107c0 79 28 74 65 6d 70 29 5d 0d 0a 0d 0a 20 20 73 65  y(temp)]....  se
107d0 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
107e0 61 6d 65 20 64 61 74 61 2d 31 2e 33 37 2e 64 62  ame data-1.37.db
107f0 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22  ] "" "" "" "" ""
10800 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c   false false fal
10810 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 71  se false....  sq
10820 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 43  l execute $db "C
10830 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
10840 20 4e 4f 54 20 4e 55 4c 4c 29 3b 22 0d 0a 0d 0a   NOT NULL);"....
10850 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20    for {set i 1} 
10860 7b 24 69 20 3c 20 31 30 30 7d 20 7b 69 6e 63 72  {$i < 100} {incr
10870 20 69 7d 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65   i} {..    sql e
10880 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
10890 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
108a0 41 4c 55 45 53 28 3f 29 3b 22 20 5b 6c 69 73 74  ALUES(?);" [list
108b0 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24   param1 String $
108c0 69 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74  i]..  }....  set
108d0 20 66 6f 75 6e 64 28 64 61 74 61 29 20 5b 65 78   found(data) [ex
108e0 70 72 20 5c 0d 0a 20 20 20 20 20 20 7b 5b 6c 6c  pr \..      {[ll
108f0 65 6e 67 74 68 20 5b 66 69 6c 65 20 6c 69 73 74  ength [file list
10900 20 24 64 69 72 65 63 74 6f 72 79 28 64 61 74 61   $directory(data
10910 29 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 20 3d 3d  ) $fileName]] ==
10920 20 31 7d 5d 0d 0a 0d 0a 20 20 73 65 74 20 74 20   1}]....  set t 
10930 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
10940 61 6c 69 61 73 20 54 68 72 65 61 64 20 74 68 72  alias Thread thr
10950 65 61 64 53 74 61 72 74 5d 0d 0a 20 20 73 71 6c  eadStart]..  sql
10960 20 65 78 65 63 75 74 65 20 24 64 62 20 22 42 45   execute $db "BE
10970 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  GIN TRANSACTION;
10980 22 3b 20 24 74 20 53 74 61 72 74 0d 0a 0d 0a 20  "; $t Start.... 
10990 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b   for {set i 1} {
109a0 24 69 20 3c 20 31 30 30 30 7d 20 7b 69 6e 63 72  $i < 1000} {incr
109b0 20 69 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20   i} {..    #..  
109c0 20 20 23 20 4e 4f 54 45 3a 20 45 78 65 63 75 74    # NOTE: Execut
109d0 65 20 61 20 71 75 65 72 79 20 74 68 61 74 20 73  e a query that s
109e0 68 6f 75 6c 64 20 66 6f 72 63 65 20 74 68 65 20  hould force the 
109f0 63 72 65 61 74 69 6f 6e 20 6f 66 20 61 20 74 65  creation of a te
10a00 6d 70 6f 72 61 72 79 20 66 69 6c 65 0d 0a 20 20  mporary file..  
10a10 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 69 74    #       for it
10a20 73 20 73 74 61 74 65 6d 65 6e 74 20 6a 6f 75 72  s statement jour
10a30 6e 61 6c 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  nal...    #..   
10a40 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
10a50 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
10a60 78 20 3d 20 3f 3b 22 20 5b 6c 69 73 74 20 70 61  x = ?;" [list pa
10a70 72 61 6d 31 20 53 74 72 69 6e 67 20 24 69 5d 0d  ram1 String $i].
10a80 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
10a90 4e 4f 54 45 3a 20 47 69 76 65 20 74 68 65 20 6f  NOTE: Give the o
10aa0 74 68 65 72 20 74 68 72 65 61 64 20 73 6f 6d 65  ther thread some
10ab0 20 74 69 6d 65 20 74 6f 20 6e 6f 74 69 63 65 20   time to notice 
10ac0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69  the temporary fi
10ad0 6c 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  le...    #..    
10ae0 61 66 74 65 72 20 5b 65 78 70 72 20 7b 69 6e 74  after [expr {int
10af0 28 72 61 6e 64 28 29 20 2a 20 31 30 30 30 29 7d  (rand() * 1000)}
10b00 5d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ]....    #..    
10b10 23 20 4e 4f 54 45 3a 20 53 74 6f 70 20 77 68 65  # NOTE: Stop whe
10b20 6e 20 74 68 65 20 6f 74 68 65 72 20 74 68 72 65  n the other thre
10b30 61 64 20 63 6f 6e 66 69 72 6d 73 20 74 68 61 74  ad confirms that
10b40 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66   the temporary f
10b50 69 6c 65 20 77 61 73 0d 0a 20 20 20 20 23 20 20  ile was..    #  
10b60 20 20 20 20 20 63 72 65 61 74 65 64 20 69 6e 20       created in 
10b70 74 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65  the correct dire
10b80 63 74 6f 72 79 2e 0d 0a 20 20 20 20 23 0d 0a 20  ctory...    #.. 
10b90 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
10ba0 73 74 73 20 66 6f 75 6e 64 28 74 65 6d 70 29 5d  sts found(temp)]
10bb0 20 26 26 20 24 66 6f 75 6e 64 28 74 65 6d 70 29   && $found(temp)
10bc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
10bd0 62 72 65 61 6b 0d 0a 20 20 20 20 7d 0d 0a 20 20  break..    }..  
10be0 7d 0d 0a 0d 0a 20 20 24 74 20 4a 6f 69 6e 3b 20  }....  $t Join; 
10bf0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
10c00 22 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54  "COMMIT TRANSACT
10c10 49 4f 4e 3b 22 0d 0a 0d 0a 20 20 6c 61 70 70 65  ION;"....  lappe
10c20 6e 64 20 72 65 73 75 6c 74 20 24 66 6f 75 6e 64  nd result $found
10c30 28 64 61 74 61 29 20 5b 65 78 70 72 20 7b 5b 69  (data) [expr {[i
10c40 6e 66 6f 20 65 78 69 73 74 73 20 66 6f 75 6e 64  nfo exists found
10c50 28 74 65 6d 70 29 5d 20 3f 20 5c 0d 0a 20 20 20  (temp)] ? \..   
10c60 20 20 20 24 66 6f 75 6e 64 28 74 65 6d 70 29 20     $found(temp) 
10c70 3a 20 46 61 6c 73 65 7d 5d 3b 20 73 65 74 20 72  : False}]; set r
10c80 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
10c90 70 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  p {..  #..  # NO
10ca0 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 64 61  TE: Close the da
10cb0 74 61 62 61 73 65 3b 20 68 6f 77 65 76 65 72 2c  tabase; however,
10cc0 20 64 6f 20 6e 6f 74 20 61 74 74 65 6d 70 74 20   do not attempt 
10cd0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69  to delete the fi
10ce0 6c 65 20 61 73 0d 0a 20 20 23 20 20 20 20 20 20  le as..  #      
10cf0 20 69 74 20 69 73 20 6e 6f 74 20 6c 6f 63 61 74   it is not locat
10d00 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
10d10 73 65 20 64 69 72 65 63 74 6f 72 79 20 6b 6e 6f  se directory kno
10d20 77 6e 20 74 6f 20 74 68 65 20 63 6c 65 61 6e 75  wn to the cleanu
10d30 70 44 62 0d 0a 20 20 23 20 20 20 20 20 20 20 70  pDb..  #       p
10d40 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20 74  rocedure (i.e. t
10d50 68 65 20 6f 6e 65 20 72 65 74 75 72 6e 65 64 20  he one returned 
10d60 62 79 20 67 65 74 44 61 74 61 62 61 73 65 44 69  by getDatabaseDi
10d70 72 65 63 74 6f 72 79 29 2e 0d 0a 20 20 23 0d 0a  rectory)...  #..
10d80 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
10d90 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61  eName db true fa
10da0 6c 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 23  lse false....  #
10db0 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65  ..  # NOTE: Atte
10dc0 6d 70 74 20 74 6f 20 72 65 73 74 6f 72 65 20 74  mpt to restore t
10dd0 68 65 20 70 72 6f 63 65 73 73 2d 77 69 64 65 20  he process-wide 
10de0 64 61 74 61 20 61 6e 64 20 74 65 6d 70 6f 72 61  data and tempora
10df0 72 79 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ry directory..  
10e00 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 73  #       settings
10e10 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
10e20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
10e30 20 23 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20   #..  catch {.. 
10e40 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
10e50 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
10e60 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ic System.Data.S
10e70 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
10e80 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..   
10e90 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e       sqlite3_win
10ea0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
10eb0 20 31 20 6e 75 6c 6c 0d 0a 20 20 7d 0d 0a 0d 0a   1 null..  }....
10ec0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 6f    catch {..    o
10ed0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
10ee0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53  ags +NonPublic S
10ef0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
10f00 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
10f10 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..       
10f20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
10f30 65 74 5f 64 69 72 65 63 74 6f 72 79 20 32 20 6e  et_directory 2 n
10f40 75 6c 6c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66  ull..  }....  if
10f50 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64   {[info exists d
10f60 69 72 65 63 74 6f 72 79 28 64 61 74 61 29 5d 20  irectory(data)] 
10f70 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69 6c  && \..      [fil
10f80 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63 74  e exists $direct
10f90 6f 72 79 28 64 61 74 61 29 5d 20 26 26 20 5c 0d  ory(data)] && \.
10fa0 0a 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64  .      [file isd
10fb0 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74  irectory $direct
10fc0 6f 72 79 28 64 61 74 61 29 5d 7d 20 74 68 65 6e  ory(data)]} then
10fd0 20 7b 0d 0a 20 20 20 20 66 69 6c 65 20 64 65 6c   {..    file del
10fe0 65 74 65 20 2d 72 65 63 75 72 73 69 76 65 20 2d  ete -recursive -
10ff0 66 6f 72 63 65 20 24 64 69 72 65 63 74 6f 72 79  force $directory
11000 28 64 61 74 61 29 0d 0a 20 20 7d 0d 0a 0d 0a 20  (data)..  }.... 
11010 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
11020 73 20 64 69 72 65 63 74 6f 72 79 28 74 65 6d 70  s directory(temp
11030 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b  )] && \..      [
11040 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72  file exists $dir
11050 65 63 74 6f 72 79 28 74 65 6d 70 29 5d 20 26 26  ectory(temp)] &&
11060 20 5c 0d 0a 20 20 20 20 20 20 5b 66 69 6c 65 20   \..      [file 
11070 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72  isdirectory $dir
11080 65 63 74 6f 72 79 28 74 65 6d 70 29 5d 7d 20 74  ectory(temp)]} t
11090 68 65 6e 20 7b 0d 0a 20 20 20 20 66 69 6c 65 20  hen {..    file 
110a0 64 65 6c 65 74 65 20 2d 72 65 63 75 72 73 69 76  delete -recursiv
110b0 65 20 2d 66 6f 72 63 65 20 24 64 69 72 65 63 74  e -force $direct
110c0 6f 72 79 28 74 65 6d 70 29 0d 0a 20 20 7d 0d 0a  ory(temp)..  }..
110d0 0d 0a 20 20 6f 62 6a 65 63 74 20 75 6e 69 6d 70  ..  object unimp
110e0 6f 72 74 20 2d 69 6d 70 6f 72 74 70 61 74 74 65  ort -importpatte
110f0 72 6e 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64  rn System.Thread
11100 69 6e 67 0d 0a 0d 0a 20 20 69 66 20 7b 5b 69 6e  ing....  if {[in
11110 66 6f 20 65 78 69 73 74 73 20 74 5d 20 26 26 20  fo exists t] && 
11120 5b 63 6c 65 61 6e 75 70 54 68 72 65 61 64 20 24  [cleanupThread $
11130 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  t]} then {..    
11140 75 6e 73 65 74 20 74 0d 0a 20 20 7d 0d 0a 0d 0a  unset t..  }....
11150 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20    catch {object 
11160 72 65 6d 6f 76 65 63 61 6c 6c 62 61 63 6b 20 74  removecallback t
11170 68 72 65 61 64 53 74 61 72 74 7d 0d 0a 0d 0a 20  hreadStart}.... 
11180 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
11190 69 6e 20 74 20 66 6f 75 6e 64 20 69 20 64 62 20  in t found i db 
111a0 66 69 6c 65 4e 61 6d 65 20 72 65 73 75 6c 74 20  fileName result 
111b0 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 72  directory....  r
111c0 65 6e 61 6d 65 20 74 68 72 65 61 64 53 74 61 72  ename threadStar
111d0 74 20 22 22 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  t ""..} -constra
111e0 69 6e 74 73 20 7b 65 61 67 6c 65 20 77 69 6e 64  ints {eagle wind
111f0 6f 77 73 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  ows monoBug28 co
11200 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
11210 65 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a  e.DATA SQLite\..
11220 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
11230 74 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  te sqlite3_win32
11240 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 7d 20  _set_directory} 
11250 2d 72 65 73 75 6c 74 20 7b 4f 6b 20 4f 6b 20 54  -result {Ok Ok T
11260 72 75 65 20 54 72 75 65 7d 7d 0d 0a 0d 0a 23 23  rue True}}....##
11270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
112b0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
112c0 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
112d0 61 74 61 2d 31 2e 33 38 20 7b 73 65 72 69 61 6c  ata-1.38 {serial
112e0 69 7a 61 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74  ization of SQLit
112f0 65 45 78 63 65 70 74 69 6f 6e 7d 20 2d 62 6f 64  eException} -bod
11300 79 20 7b 0d 0a 20 20 73 65 74 20 73 65 72 69 61  y {..  set seria
11310 6c 69 7a 65 72 20 5b 6f 62 6a 65 63 74 20 63 72  lizer [object cr
11320 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20  eate -alias \.. 
11330 20 20 20 20 20 53 79 73 74 65 6d 2e 52 75 6e 74       System.Runt
11340 69 6d 65 2e 53 65 72 69 61 6c 69 7a 61 74 69 6f  ime.Serializatio
11350 6e 2e 46 6f 72 6d 61 74 74 65 72 73 2e 42 69 6e  n.Formatters.Bin
11360 61 72 79 2e 42 69 6e 61 72 79 46 6f 72 6d 61 74  ary.BinaryFormat
11370 74 65 72 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 74  ter]....  set st
11380 72 65 61 6d 20 5b 6f 62 6a 65 63 74 20 63 72 65  ream [object cre
11390 61 74 65 20 2d 61 6c 69 61 73 20 53 79 73 74 65  ate -alias Syste
113a0 6d 2e 49 4f 2e 4d 65 6d 6f 72 79 53 74 72 65 61  m.IO.MemoryStrea
113b0 6d 5d 0d 0a 0d 0a 20 20 73 65 74 20 65 78 63 65  m]....  set exce
113c0 70 74 69 6f 6e 28 31 29 20 5b 6f 62 6a 65 63 74  ption(1) [object
113d0 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
113e0 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
113f0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
11400 65 45 78 63 65 70 74 69 6f 6e 20 31 34 20 22 74  eException 14 "t
11410 68 69 73 20 69 73 20 61 20 74 65 73 74 22 5d 3b  his is a test"];
11420 20 23 20 43 61 6e 74 4f 70 65 6e 0d 0a 0d 0a 20   # CantOpen.... 
11430 20 24 73 65 72 69 61 6c 69 7a 65 72 20 53 65 72   $serializer Ser
11440 69 61 6c 69 7a 65 20 24 73 74 72 65 61 6d 20 24  ialize $stream $
11450 65 78 63 65 70 74 69 6f 6e 28 31 29 0d 0a 0d 0a  exception(1)....
11460 20 20 24 73 74 72 65 61 6d 20 53 65 65 6b 20 30    $stream Seek 0
11470 20 42 65 67 69 6e 0d 0a 0d 0a 20 20 73 65 74 20   Begin....  set 
11480 65 78 63 65 70 74 69 6f 6e 28 32 29 20 5b 24 73  exception(2) [$s
11490 65 72 69 61 6c 69 7a 65 72 20 2d 61 6c 69 61 73  erializer -alias
114a0 20 44 65 73 65 72 69 61 6c 69 7a 65 20 24 73 74   Deserialize $st
114b0 72 65 61 6d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  ream]....  list 
114c0 5b 24 65 78 63 65 70 74 69 6f 6e 28 31 29 20 52  [$exception(1) R
114d0 65 73 75 6c 74 43 6f 64 65 5d 20 5b 24 65 78 63  esultCode] [$exc
114e0 65 70 74 69 6f 6e 28 31 29 20 4d 65 73 73 61 67  eption(1) Messag
114f0 65 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 65 78  e] \..      [$ex
11500 63 65 70 74 69 6f 6e 28 32 29 20 52 65 73 75 6c  ception(2) Resul
11510 74 43 6f 64 65 5d 20 5b 24 65 78 63 65 70 74 69  tCode] [$excepti
11520 6f 6e 28 32 29 20 4d 65 73 73 61 67 65 5d 20 5c  on(2) Message] \
11530 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
11540 24 65 78 63 65 70 74 69 6f 6e 28 31 29 20 52 65  $exception(1) Re
11550 73 75 6c 74 43 6f 64 65 5d 20 65 71 20 5b 24 65  sultCode] eq [$e
11560 78 63 65 70 74 69 6f 6e 28 32 29 20 52 65 73 75  xception(2) Resu
11570 6c 74 43 6f 64 65 5d 7d 5d 20 5c 0d 0a 20 20 20  ltCode]}] \..   
11580 20 20 20 5b 65 78 70 72 20 7b 5b 24 65 78 63 65     [expr {[$exce
11590 70 74 69 6f 6e 28 31 29 20 4d 65 73 73 61 67 65  ption(1) Message
115a0 5d 20 65 71 20 5b 24 65 78 63 65 70 74 69 6f 6e  ] eq [$exception
115b0 28 32 29 20 4d 65 73 73 61 67 65 5d 7d 5d 0d 0a  (2) Message]}]..
115c0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
115d0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
115e0 6e 20 65 78 63 65 70 74 69 6f 6e 20 73 74 72 65  n exception stre
115f0 61 6d 20 73 65 72 69 61 6c 69 7a 65 72 0d 0a 7d  am serializer..}
11600 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
11610 61 67 6c 65 20 53 51 4c 69 74 65 20 53 79 73 74  agle SQLite Syst
11620 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
11630 2d 72 65 73 75 6c 74 20 5c 0d 0a 5b 73 74 72 69  -result \..[stri
11640 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20  ng map [list \n 
11650 5c 72 5c 6e 5d 20 7b 43 61 6e 74 4f 70 65 6e 20  \r\n] {CantOpen 
11660 7b 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  {unable to open 
11670 64 61 74 61 62 61 73 65 20 66 69 6c 65 0d 0a 74  database file..t
11680 68 69 73 20 69 73 20 61 20 74 65 73 74 7d 20 43  his is a test} C
11690 61 6e 74 4f 70 65 6e 20 7b 75 6e 61 62 6c 65 20  antOpen {unable 
116a0 74 6f 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  to open database
116b0 20 66 69 6c 65 0d 0a 74 68 69 73 20 69 73 20 61   file..this is a
116c0 20 74 65 73 74 7d 20 54 72 75 65 20 54 72 75 65   test} True True
116d0 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }]}....#########
116e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
116f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11720 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
11730 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 33  t {test data-1.3
11740 39 20 7b 75 6e 65 6e 63 72 79 70 74 65 64 20 64  9 {unencrypted d
11750 61 74 61 62 61 73 65 2c 20 77 69 74 68 20 70 61  atabase, with pa
11760 73 73 77 6f 72 64 7d 20 2d 73 65 74 75 70 20 7b  ssword} -setup {
11770 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
11780 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
11790 2e 33 39 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .39.db]..} -body
117a0 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
117b0 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
117c0 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20 73  BLE t1(x);"..  s
117d0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
117e0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
117f0 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d 0a  x) VALUES(1);"..
11800 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
11810 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20  ileName db true 
11820 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73  false false..  s
11830 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
11840 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61   "" "" "" "" "Pa
11850 73 73 77 6f 72 64 3d 31 32 33 34 35 3b 22 20 74  ssword=12345;" t
11860 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73  rue false....  s
11870 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
11880 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
11890 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
118a0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
118b0 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a  e scalar $db \..
118c0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f        "SELECT CO
118d0 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22  UNT(*) FROM t1;"
118e0 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
118f0 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
11900 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
11910 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
11920 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
11930 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
11940 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  1);"} error] $er
11950 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ror....  cleanup
11960 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
11970 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65  true false false
11980 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c  ..  setupDb $fil
11990 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
119a0 22 20 22 22 20 74 72 75 65 20 66 61 6c 73 65 0d  " "" true false.
119b0 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
119c0 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
119d0 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
119e0 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
119f0 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
11a00 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  1);"} error] $er
11a10 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  ror....  lappend
11a20 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
11a30 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
11a40 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
11a50 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
11a60 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74   COUNT(*) FROM t
11a70 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  1;"} error] $err
11a80 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  or....  set resu
11a90 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
11aa0 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
11ab0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
11ac0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65  et -nocomplain e
11ad0 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20 66  rror result db f
11ae0 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
11af0 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 64  traints {eagle d
11b00 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
11b10 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
11b20 2e 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 6d  .INTEROP_CODEC m
11b30 6f 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61  onoBug28\..comma
11b40 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
11b50 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
11b60 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
11b70 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65  match regexp -re
11b80 73 75 6c 74 20 7b 5e 31 5c 0d 0a 5c 7b 53 79 73  sult {^1\..\{Sys
11b90 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74  tem\.Data\.SQLit
11ba0 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69  e\.SQLiteExcepti
11bb0 6f 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c  on \(0x80004005\
11bc0 29 3a 20 66 69 6c 65 20 69 73 20 65 6e 63 72 79  ): file is encry
11bd0 70 74 65 64 20 6f 72 20 69 73 5c 0d 0a 6e 6f 74  pted or is\..not
11be0 20 61 20 64 61 74 61 62 61 73 65 2e 2a 3f 5c 7d   a database.*?\}
11bf0 20 31 20 5c 7b 53 79 73 74 65 6d 5c 2e 44 61 74   1 \{System\.Dat
11c00 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74  a\.SQLite\.SQLit
11c10 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38  eException \(0x8
11c20 30 30 30 34 30 30 35 5c 29 3a 5c 0d 0a 66 69 6c  0004005\):\..fil
11c30 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f  e is encrypted o
11c40 72 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62  r is not a datab
11c50 61 73 65 2e 2a 3f 5c 7d 20 30 20 31 20 30 20 32  ase.*?\} 0 1 0 2
11c60 24 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  $}}....#########
11c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11ca0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11cb0 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
11cc0 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34  t {test data-1.4
11cd0 30 20 7b 65 6e 63 72 79 70 74 65 64 20 64 61 74  0 {encrypted dat
11ce0 61 62 61 73 65 2c 20 77 72 6f 6e 67 20 70 61 73  abase, wrong pas
11cf0 73 77 6f 72 64 7d 20 2d 73 65 74 75 70 20 7b 0d  sword} -setup {.
11d00 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20  .  setupDb [set 
11d10 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e  fileName data-1.
11d20 34 30 2e 64 62 5d 20 22 22 20 22 22 20 22 22 20  40.db] "" "" "" 
11d30 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31 32 33  "" "Password=123
11d40 34 35 3b 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  45;"..} -body {.
11d50 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
11d60 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
11d70 20 74 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20   t1(x);"..  sql 
11d80 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
11d90 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
11da0 56 41 4c 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20  VALUES(1);".... 
11db0 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
11dc0 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c  Name db true fal
11dd0 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75  se false..  setu
11de0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22  pDb $fileName ""
11df0 20 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77   "" "" "" "Passw
11e00 6f 72 64 3d 31 32 33 34 36 3b 22 20 74 72 75 65  ord=12346;" true
11e10 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73 65 74 20   false....  set 
11e20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
11e30 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
11e40 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78  t [catch {sql ex
11e50 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
11e60 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20  calar $db \..   
11e70 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54     "SELECT COUNT
11e80 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65  (*) FROM t1;"} e
11e90 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a  rror] $error....
11ea0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
11eb0 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65   [catch {sql exe
11ec0 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20  cute $db \..    
11ed0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
11ee0 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
11ef0 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72  "} error] $error
11f00 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
11f10 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75  $fileName db tru
11f20 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false.. 
11f30 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
11f40 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
11f50 50 61 73 73 77 6f 72 64 3d 31 32 33 34 35 3b 22  Password=12345;"
11f60 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20   true false.... 
11f70 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
11f80 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
11f90 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  ute $db \..     
11fa0 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
11fb0 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
11fc0 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
11fd0 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
11fe0 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
11ff0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
12000 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
12010 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55       "SELECT COU
12020 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d  NT(*) FROM t1;"}
12030 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
12040 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
12050 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
12060 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
12070 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
12080 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72  nocomplain error
12090 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
120a0 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
120b0 6e 74 73 20 7b 65 61 67 6c 65 20 64 65 66 69 6e  nts {eagle defin
120c0 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
120d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
120e0 45 52 4f 50 5f 43 4f 44 45 43 20 6d 6f 6e 6f 42  EROP_CODEC monoB
120f0 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e 73  ug28\..command.s
12100 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
12110 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
12120 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63  ta.SQLite} -matc
12130 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
12140 20 7b 5e 31 5c 0d 0a 5c 7b 53 79 73 74 65 6d 5c   {^1\..\{System\
12150 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53  .Data\.SQLite\.S
12160 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c  QLiteException \
12170 28 30 78 38 30 30 30 34 30 30 35 5c 29 3a 20 66  (0x80004005\): f
12180 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65 64  ile is encrypted
12190 20 6f 72 20 69 73 5c 0d 0a 6e 6f 74 20 61 20 64   or is\..not a d
121a0 61 74 61 62 61 73 65 2e 2a 3f 5c 7d 20 31 20 5c  atabase.*?\} 1 \
121b0 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53  {System\.Data\.S
121c0 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63  QLite\.SQLiteExc
121d0 65 70 74 69 6f 6e 20 5c 28 30 78 38 30 30 30 34  eption \(0x80004
121e0 30 30 35 5c 29 3a 5c 0d 0a 66 69 6c 65 20 69 73  005\):\..file is
121f0 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69 73   encrypted or is
12200 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 2e   not a database.
12210 2a 3f 5c 7d 20 30 20 31 20 30 20 32 24 7d 7d 0d  *?\} 0 1 0 2$}}.
12220 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
12230 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12270 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
12280 65 73 74 20 64 61 74 61 2d 31 2e 34 31 20 7b 65  est data-1.41 {e
12290 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73  ncrypted databas
122a0 65 2c 20 70 61 73 73 77 6f 72 64 20 77 2f 73 74  e, password w/st
122b0 61 72 74 2d 73 70 61 63 65 7d 20 2d 73 65 74 75  art-space} -setu
122c0 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
122d0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
122e0 61 2d 31 2e 34 31 2e 64 62 5d 20 22 22 20 22 22  a-1.41.db] "" ""
122f0 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64   "" "" "Password
12300 3d 20 31 32 33 34 3b 22 0d 0a 7d 20 2d 62 6f 64  = 1234;"..} -bod
12310 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
12320 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54  te $db "CREATE T
12330 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20  ABLE t1(x);"..  
12340 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
12350 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
12360 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d  (x) VALUES(1);".
12370 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
12380 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65  fileName db true
12390 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
123a0 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
123b0 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  e "" "" "" "" "P
123c0 61 73 73 77 6f 72 64 3d 31 32 33 34 3b 22 20 74  assword=1234;" t
123d0 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73  rue false....  s
123e0 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
123f0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
12400 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
12410 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
12420 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a  e scalar $db \..
12430 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f        "SELECT CO
12440 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22  UNT(*) FROM t1;"
12450 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
12460 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
12470 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
12480 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
12490 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
124a0 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
124b0 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  1);"} error] $er
124c0 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ror....  cleanup
124d0 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
124e0 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65  true false false
124f0 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c  ..  setupDb $fil
12500 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
12510 22 20 22 50 61 73 73 77 6f 72 64 3d 20 31 32 33  " "Password= 123
12520 34 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a  4;" true false..
12530 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
12540 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
12550 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20  xecute $db \..  
12560 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
12570 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
12580 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  );"} error] $err
12590 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  or....  lappend 
125a0 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
125b0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
125c0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
125d0 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
125e0 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
125f0 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f  ;"} error] $erro
12600 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  r....  set resul
12610 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
12620 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
12630 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
12640 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72  t -nocomplain er
12650 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20 66 69  ror result db fi
12660 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
12670 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 64 65  raints {eagle de
12680 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
12690 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
126a0 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 6d 6f  INTEROP_CODEC mo
126b0 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e  noBug28\..comman
126c0 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
126d0 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
126e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
126f0 65 73 75 6c 74 20 7b 30 20 31 20 30 20 31 20 30  esult {0 1 0 1 0
12700 20 31 20 30 20 33 7d 7d 0d 0a 0d 0a 23 23 23 23   1 0 3}}....####
12710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12730 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12750 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
12760 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74  unTest {test dat
12770 61 2d 31 2e 34 32 20 7b 65 6e 63 72 79 70 74 65  a-1.42 {encrypte
12780 64 20 64 61 74 61 62 61 73 65 2c 20 77 2f 71 75  d database, w/qu
12790 6f 74 65 64 2d 73 74 61 72 74 2d 73 70 61 63 65  oted-start-space
127a0 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
127b0 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e  tupDb [set fileN
127c0 61 6d 65 20 64 61 74 61 2d 31 2e 34 32 2e 64 62  ame data-1.42.db
127d0 5d 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  ] "" "" "" "" "P
127e0 61 73 73 77 6f 72 64 3d 5c 22 20 31 32 33 34 5c  assword=\" 1234\
127f0 22 3b 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  ";"..} -body {..
12800 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
12810 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
12820 74 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65  t1(x);"..  sql e
12830 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45  xecute $db "INSE
12840 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
12850 41 4c 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20  ALUES(1);"....  
12860 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
12870 61 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c 73  ame db true fals
12880 65 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70  e false..  setup
12890 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20  Db $fileName "" 
128a0 22 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f  "" "" "" "Passwo
128b0 72 64 3d 31 32 33 34 3b 22 20 74 72 75 65 20 66  rd=1234;" true f
128c0 61 6c 73 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65  alse....  set re
128d0 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list].... 
128e0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
128f0 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
12900 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
12910 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
12920 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a   "SELECT COUNT(*
12930 29 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72  ) FROM t1;"} err
12940 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20  or] $error....  
12950 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
12960 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
12970 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  te $db \..      
12980 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
12990 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d  (x) VALUES(1);"}
129a0 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
129b0 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
129c0 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20  ileName db true 
129d0 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73  false false..  s
129e0 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName
129f0 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61   "" "" "" "" "Pa
12a00 73 73 77 6f 72 64 3d 5c 22 20 31 32 33 34 5c 22  ssword=\" 1234\"
12a10 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d  ;" true false...
12a20 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
12a30 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78  t [catch {sql ex
12a40 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20  ecute $db \..   
12a50 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
12a60 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29  t1 (x) VALUES(1)
12a70 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f  ;"} error] $erro
12a80 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  r....  lappend r
12a90 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
12aa0 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
12ab0 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \.
12ac0 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43  .      "SELECT C
12ad0 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
12ae0 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72  "} error] $error
12af0 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
12b00 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
12b10 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
12b20 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
12b30 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72   -nocomplain err
12b40 6f 72 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c  or result db fil
12b50 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
12b60 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 64 65 66  aints {eagle def
12b70 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
12b80 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
12b90 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 6d 6f 6e  NTEROP_CODEC mon
12ba0 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e 64  oBug28\..command
12bb0 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
12bc0 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
12bd0 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61  Data.SQLite} -ma
12be0 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75  tch regexp -resu
12bf0 6c 74 20 7b 5e 31 5c 0d 0a 5c 7b 53 79 73 74 65  lt {^1\..\{Syste
12c00 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c  m\.Data\.SQLite\
12c10 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  .SQLiteException
12c20 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c 29 3a   \(0x80004005\):
12c30 20 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74   file is encrypt
12c40 65 64 20 6f 72 20 69 73 5c 0d 0a 6e 6f 74 20 61  ed or is\..not a
12c50 20 64 61 74 61 62 61 73 65 2e 2a 3f 5c 7d 20 31   database.*?\} 1
12c60 20 5c 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c   \{System\.Data\
12c70 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45  .SQLite\.SQLiteE
12c80 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30 30  xception \(0x800
12c90 30 34 30 30 35 5c 29 3a 5c 0d 0a 66 69 6c 65 20  04005\):\..file 
12ca0 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20  is encrypted or 
12cb0 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
12cc0 65 2e 2a 3f 5c 7d 20 30 20 31 20 30 20 32 24 7d  e.*?\} 0 1 0 2$}
12cd0 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
12ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12d20 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
12d30 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34 33 20  {test data-1.43 
12d40 7b 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62  {encrypted datab
12d50 61 73 65 2c 20 70 61 73 73 77 6f 72 64 20 77 2f  ase, password w/
12d60 6d 69 64 2d 73 70 61 63 65 7d 20 2d 73 65 74 75  mid-space} -setu
12d70 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
12d80 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
12d90 61 2d 31 2e 34 33 2e 64 62 5d 20 22 22 20 22 22  a-1.43.db] "" ""
12da0 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64   "" "" "Password
12db0 3d 31 32 20 34 35 3b 22 0d 0a 7d 20 2d 62 6f 64  =12 45;"..} -bod
12dc0 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75  y {..  sql execu
12dd0 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54  te $db "CREATE T
12de0 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20  ABLE t1(x);"..  
12df0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
12e00 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
12e10 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d  (x) VALUES(1);".
12e20 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  ...  cleanupDb $
12e30 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65  fileName db true
12e40 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..  
12e50 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam
12e60 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50  e "" "" "" "" "P
12e70 61 73 73 77 6f 72 64 3d 31 32 34 35 3b 22 20 74  assword=1245;" t
12e80 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 73  rue false....  s
12e90 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
12ea0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
12eb0 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
12ec0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
12ed0 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a  e scalar $db \..
12ee0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f        "SELECT CO
12ef0 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22  UNT(*) FROM t1;"
12f00 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
12f10 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
12f20 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
12f30 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
12f40 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
12f50 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
12f60 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  1);"} error] $er
12f70 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70  ror....  cleanup
12f80 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20  Db $fileName db 
12f90 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65  true false false
12fa0 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c  ..  setupDb $fil
12fb0 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22  eName "" "" "" "
12fc0 22 20 22 50 61 73 73 77 6f 72 64 3d 31 32 20 34  " "Password=12 4
12fd0 35 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a  5;" true false..
12fe0 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
12ff0 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
13000 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20  xecute $db \..  
13010 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
13020 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
13030 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  );"} error] $err
13040 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  or....  lappend 
13050 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73  result [catch {s
13060 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
13070 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c  ute scalar $db \
13080 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  ..      "SELECT 
13090 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31  COUNT(*) FROM t1
130a0 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f  ;"} error] $erro
130b0 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  r....  set resul
130c0 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
130d0 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
130e0 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
130f0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72  t -nocomplain er
13100 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20 66 69  ror result db fi
13110 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
13120 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 64 65  raints {eagle de
13130 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
13140 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
13150 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 6d 6f  INTEROP_CODEC mo
13160 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e  noBug28\..comman
13170 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
13180 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
13190 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d  .Data.SQLite} -m
131a0 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65 73  atch regexp -res
131b0 75 6c 74 20 7b 5e 31 5c 0d 0a 5c 7b 53 79 73 74  ult {^1\..\{Syst
131c0 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65  em\.Data\.SQLite
131d0 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  \.SQLiteExceptio
131e0 6e 20 5c 28 30 78 38 30 30 30 34 30 30 35 5c 29  n \(0x80004005\)
131f0 3a 20 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70  : file is encryp
13200 74 65 64 20 6f 72 20 69 73 5c 0d 0a 6e 6f 74 20  ted or is\..not 
13210 61 20 64 61 74 61 62 61 73 65 2e 2a 3f 5c 7d 20  a database.*?\} 
13220 31 20 5c 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61  1 \{System\.Data
13230 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65  \.SQLite\.SQLite
13240 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30  Exception \(0x80
13250 30 30 34 30 30 35 5c 29 3a 5c 0d 0a 66 69 6c 65  004005\):\..file
13260 20 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72   is encrypted or
13270 20 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61   is not a databa
13280 73 65 2e 2a 3f 5c 7d 20 30 20 31 20 30 20 32 24  se.*?\} 0 1 0 2$
13290 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
132a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
132e0 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
132f0 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34 34   {test data-1.44
13300 20 7b 65 6e 63 72 79 70 74 65 64 20 64 61 74 61   {encrypted data
13310 62 61 73 65 2c 20 70 61 73 73 77 6f 72 64 20 77  base, password w
13320 2f 65 6e 64 2d 73 70 61 63 65 7d 20 2d 73 65 74  /end-space} -set
13330 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
13340 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
13350 74 61 2d 31 2e 34 34 2e 64 62 5d 20 22 22 20 22  ta-1.44.db] "" "
13360 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72  " "" "" "Passwor
13370 64 3d 31 32 33 34 20 3b 22 0d 0a 7d 20 2d 62 6f  d=1234 ;"..} -bo
13380 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63  dy {..  sql exec
13390 75 74 65 20 24 64 62 20 22 43 52 45 41 54 45 20  ute $db "CREATE 
133a0 54 41 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20  TABLE t1(x);".. 
133b0 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
133c0 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
133d0 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22   (x) VALUES(1);"
133e0 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20  ....  cleanupDb 
133f0 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75  $fileName db tru
13400 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false.. 
13410 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61   setupDb $fileNa
13420 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22  me "" "" "" "" "
13430 50 61 73 73 77 6f 72 64 3d 31 32 33 34 3b 22 20  Password=1234;" 
13440 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20  true false....  
13450 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
13460 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
13470 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
13480 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
13490 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \.
134a0 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43  .      "SELECT C
134b0 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b  OUNT(*) FROM t1;
134c0 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72  "} error] $error
134d0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
134e0 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
134f0 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a   execute $db \..
13500 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e        "INSERT IN
13510 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53  TO t1 (x) VALUES
13520 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65  (1);"} error] $e
13530 72 72 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  rror....  cleanu
13540 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62  pDb $fileName db
13550 20 74 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73   true false fals
13560 65 0d 0a 20 20 73 65 74 75 70 44 62 20 24 66 69  e..  setupDb $fi
13570 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20  leName "" "" "" 
13580 22 22 20 22 50 61 73 73 77 6f 72 64 3d 31 32 33  "" "Password=123
13590 34 20 3b 22 20 74 72 75 65 20 66 61 6c 73 65 0d  4 ;" true false.
135a0 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
135b0 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
135c0 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20  execute $db \.. 
135d0 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
135e0 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
135f0 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72  1);"} error] $er
13600 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  ror....  lappend
13610 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b   result [catch {
13620 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
13630 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
13640 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
13650 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74   COUNT(*) FROM t
13660 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  1;"} error] $err
13670 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  or....  set resu
13680 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
13690 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
136a0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
136b0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65  et -nocomplain e
136c0 72 72 6f 72 20 72 65 73 75 6c 74 20 64 62 20 66  rror result db f
136d0 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
136e0 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 64  traints {eagle d
136f0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
13700 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
13710 2e 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 6d  .INTEROP_CODEC m
13720 6f 6e 6f 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61  onoBug28\..comma
13730 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
13740 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
13750 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
13760 72 65 73 75 6c 74 20 7b 30 20 31 20 30 20 31 20  result {0 1 0 1 
13770 30 20 31 20 30 20 33 7d 7d 0d 0a 0d 0a 23 23 23  0 1 0 3}}....###
13780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
137a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
137b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
137c0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
137d0 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
137e0 74 61 2d 31 2e 34 35 20 7b 65 6e 63 72 79 70 74  ta-1.45 {encrypt
137f0 65 64 20 64 61 74 61 62 61 73 65 2c 20 77 2f 71  ed database, w/q
13800 75 6f 74 65 64 2d 65 6e 64 2d 73 70 61 63 65 7d  uoted-end-space}
13810 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
13820 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
13830 6d 65 20 64 61 74 61 2d 31 2e 34 35 2e 64 62 5d  me data-1.45.db]
13840 20 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61   "" "" "" "" "Pa
13850 73 73 77 6f 72 64 3d 5c 22 31 32 33 34 20 5c 22  ssword=\"1234 \"
13860 3b 22 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  ;"..} -body {.. 
13870 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
13880 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
13890 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78  1(x);"..  sql ex
138a0 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
138b0 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
138c0 4c 55 45 53 28 31 29 3b 22 0d 0a 0d 0a 20 20 63  LUES(1);"....  c
138d0 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
138e0 6d 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65  me db true false
138f0 20 66 61 6c 73 65 0d 0a 20 20 73 65 74 75 70 44   false..  setupD
13900 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22  b $fileName "" "
13910 22 20 22 22 20 22 22 20 22 50 61 73 73 77 6f 72  " "" "" "Passwor
13920 64 3d 31 32 33 34 3b 22 20 74 72 75 65 20 66 61  d=1234;" true fa
13930 6c 73 65 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73  lse....  set res
13940 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
13950 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
13960 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75  catch {sql execu
13970 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
13980 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  ar $db \..      
13990 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29  "SELECT COUNT(*)
139a0 20 46 52 4f 4d 20 74 31 3b 22 7d 20 65 72 72 6f   FROM t1;"} erro
139b0 72 5d 20 24 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c  r] $error....  l
139c0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63  append result [c
139d0 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74  atch {sql execut
139e0 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  e $db \..      "
139f0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
13a00 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 7d 20  x) VALUES(1);"} 
13a10 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a 0d  error] $error...
13a20 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
13a30 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20 66  leName db true f
13a40 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 73 65  alse false..  se
13a50 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  tupDb $fileName 
13a60 22 22 20 22 22 20 22 22 20 22 22 20 22 50 61 73  "" "" "" "" "Pas
13a70 73 77 6f 72 64 3d 5c 22 31 32 33 34 20 5c 22 3b  sword=\"1234 \";
13a80 22 20 74 72 75 65 20 66 61 6c 73 65 0d 0a 0d 0a  " true false....
13a90 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
13aa0 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65   [catch {sql exe
13ab0 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20 20 20  cute $db \..    
13ac0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
13ad0 31 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  1 (x) VALUES(1);
13ae0 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72  "} error] $error
13af0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
13b00 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c  sult [catch {sql
13b10 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
13b20 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a  e scalar $db \..
13b30 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f        "SELECT CO
13b40 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22  UNT(*) FROM t1;"
13b50 7d 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d  } error] $error.
13b60 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d  ...  set result.
13b70 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
13b80 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
13b90 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
13ba0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f  -nocomplain erro
13bb0 72 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65  r result db file
13bc0 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
13bd0 69 6e 74 73 20 7b 65 61 67 6c 65 20 64 65 66 69  ints {eagle defi
13be0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
13bf0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
13c00 54 45 52 4f 50 5f 43 4f 44 45 43 20 6d 6f 6e 6f  TEROP_CODEC mono
13c10 42 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e  Bug28\..command.
13c20 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
13c30 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
13c40 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74  ata.SQLite} -mat
13c50 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c  ch regexp -resul
13c60 74 20 7b 5e 31 5c 0d 0a 5c 7b 53 79 73 74 65 6d  t {^1\..\{System
13c70 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e  \.Data\.SQLite\.
13c80 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20  SQLiteException 
13c90 5c 28 30 78 38 30 30 30 34 30 30 35 5c 29 3a 20  \(0x80004005\): 
13ca0 66 69 6c 65 20 69 73 20 65 6e 63 72 79 70 74 65  file is encrypte
13cb0 64 20 6f 72 20 69 73 5c 0d 0a 6e 6f 74 20 61 20  d or is\..not a 
13cc0 64 61 74 61 62 61 73 65 2e 2a 3f 5c 7d 20 31 20  database.*?\} 1 
13cd0 5c 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e  \{System\.Data\.
13ce0 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78  SQLite\.SQLiteEx
13cf0 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30 30 30  ception \(0x8000
13d00 34 30 30 35 5c 29 3a 5c 0d 0a 66 69 6c 65 20 69  4005\):\..file i
13d10 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20 69  s encrypted or i
13d20 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  s not a database
13d30 2e 2a 3f 5c 7d 20 30 20 31 20 30 20 32 24 7d 7d  .*?\} 0 1 0 2$}}
13d40 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
13d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13d90 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
13da0 74 65 73 74 20 64 61 74 61 2d 31 2e 34 36 20 7b  test data-1.46 {
13db0 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 61  encrypted databa
13dc0 73 65 2c 20 70 61 73 73 77 6f 72 64 20 76 69 61  se, password via
13dd0 20 62 75 69 6c 64 65 72 7d 20 2d 73 65 74 75 70   builder} -setup
13de0 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73   {..  setupDb [s
13df0 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61  et fileName data
13e00 2d 31 2e 34 36 2e 64 62 5d 20 22 22 20 22 22 20  -1.46.db] "" "" 
13e10 22 22 20 22 22 20 22 50 61 73 73 77 6f 72 64 3d  "" "" "Password=
13e20 36 37 20 38 39 3b 22 0d 0a 7d 20 2d 62 6f 64 79  67 89;"..} -body
13e30 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
13e40 65 20 24 64 62 20 22 43 52 45 41 54 45 20 54 41  e $db "CREATE TA
13e50 42 4c 45 20 74 31 28 78 29 3b 22 0d 0a 20 20 73  BLE t1(x);"..  s
13e60 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
13e70 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
13e80 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d 0a  x) VALUES(1);"..
13e90 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
13ea0 69 6c 65 4e 61 6d 65 20 64 62 20 74 72 75 65 20  ileName db true 
13eb0 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20  false false.... 
13ec0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 53   set connectionS
13ed0 74 72 69 6e 67 42 75 69 6c 64 65 72 20 5b 6f 62  tringBuilder [ob
13ee0 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69  ject create -ali
13ef0 61 73 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  as \..      Syst
13f00 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
13f10 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53  QLiteConnectionS
13f20 74 72 69 6e 67 42 75 69 6c 64 65 72 5d 0d 0a 0d  tringBuilder]...
13f30 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  .  $connectionSt
13f40 72 69 6e 67 42 75 69 6c 64 65 72 20 44 61 74 61  ringBuilder Data
13f50 53 6f 75 72 63 65 20 5c 0d 0a 20 20 20 20 20 20  Source \..      
13f60 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
13f70 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
13f80 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
13f90 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72    $connectionStr
13fa0 69 6e 67 42 75 69 6c 64 65 72 20 50 61 73 73 77  ingBuilder Passw
13fb0 6f 72 64 20 22 36 37 20 38 39 22 0d 0a 0d 0a 20  ord "67 89".... 
13fc0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   set connection 
13fd0 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
13fe0 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 53  alias \..      S
13ff0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14000 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e.SQLiteConnecti
14010 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 5b 24 63 6f  on \..      [$co
14020 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75  nnectionStringBu
14030 69 6c 64 65 72 20 54 6f 53 74 72 69 6e 67 5d 20  ilder ToString] 
14040 74 72 75 65 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e  true]....  $conn
14050 65 63 74 69 6f 6e 20 4f 70 65 6e 3b 20 61 64 64  ection Open; add
14060 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 24 63 6f  DbConnection $co
14070 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 73 65  nnection....  se
14080 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
14090 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  ...  lappend res
140a0 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20  ult [catch {sql 
140b0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
140c0 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d 0a 20   scalar $db \.. 
140d0 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55       "SELECT COU
140e0 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 7d  NT(*) FROM t1;"}
140f0 20 65 72 72 6f 72 5d 20 24 65 72 72 6f 72 0d 0a   error] $error..
14100 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
14110 6c 74 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 65  lt [catch {sql e
14120 78 65 63 75 74 65 20 24 64 62 20 5c 0d 0a 20 20  xecute $db \..  
14130 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
14140 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28 31   t1 (x) VALUES(1
14150 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65 72 72  );"} error] $err
14160 6f 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  or....  cleanupD
14170 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 74  b $fileName db t
14180 72 75 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d  rue false false.
14190 0a 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65  .  setupDb $file
141a0 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22  Name "" "" "" ""
141b0 20 22 50 61 73 73 77 6f 72 64 3d 5c 22 36 37 20   "Password=\"67 
141c0 38 39 5c 22 3b 22 20 74 72 75 65 20 66 61 6c 73  89\";" true fals
141d0 65 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  e....  lappend r
141e0 65 73 75 6c 74 20 5b 63 61 74 63 68 20 7b 73 71  esult [catch {sq
141f0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5c 0d  l execute $db \.
14200 0a 20 20 20 20 20 20 22 49 4e 53 45 52 54 20 49  .      "INSERT I
14210 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45  NTO t1 (x) VALUE
14220 53 28 31 29 3b 22 7d 20 65 72 72 6f 72 5d 20 24  S(1);"} error] $
14230 65 72 72 6f 72 0d 0a 0d 0a 20 20 6c 61 70 70 65  error....  lappe
14240 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74 63 68  nd result [catch
14250 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   {sql execute -e
14260 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
14270 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45  b \..      "SELE
14280 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d  CT COUNT(*) FROM
14290 20 74 31 3b 22 7d 20 65 72 72 6f 72 5d 20 24 65   t1;"} error] $e
142a0 72 72 6f 72 0d 0a 0d 0a 20 20 73 65 74 20 72 65  rror....  set re
142b0 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
142c0 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
142d0 6f 6d 70 6c 61 69 6e 20 63 6f 6e 6e 65 63 74 69  omplain connecti
142e0 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75 70 44  on....  cleanupD
142f0 62 20 24 66 69 6c 65 4e 61 6d 65 3b 20 23 20 4e  b $fileName; # N
14300 4f 54 45 3a 20 41 66 74 65 72 20 6f 62 6a 65 63  OTE: After objec
14310 74 20 64 69 73 70 6f 73 61 6c 2e 0d 0a 0d 0a 20  t disposal..... 
14320 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
14330 69 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72  in connectionStr
14340 69 6e 67 42 75 69 6c 64 65 72 20 65 72 72 6f 72  ingBuilder error
14350 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c 65 4e   result db fileN
14360 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
14370 6e 74 73 20 7b 65 61 67 6c 65 20 64 65 66 69 6e  nts {eagle defin
14380 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
14390 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
143a0 45 52 4f 50 5f 43 4f 44 45 43 20 6d 6f 6e 6f 42  EROP_CODEC monoB
143b0 75 67 32 38 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e 73  ug28\..command.s
143c0 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
143d0 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
143e0 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
143f0 6c 74 20 7b 30 20 31 20 30 20 31 20 30 20 31 20  lt {0 1 0 1 0 1 
14400 30 20 33 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  0 3}}....#######
14410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14450 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
14460 65 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31  est {test data-1
14470 2e 34 37 20 7b 71 75 6f 74 65 64 20 63 6f 6e 6e  .47 {quoted conn
14480 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72  ection string pr
14490 6f 70 65 72 74 69 65 73 7d 20 2d 73 65 74 75 70  operties} -setup
144a0 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63   {..  unset -noc
144b0 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 6c  omplain result l
144c0 69 73 74 20 70 61 69 72 20 73 74 72 69 6e 67 73  ist pair strings
144d0 20 73 74 72 69 6e 67 0d 0a 7d 20 2d 62 6f 64 79   string..} -body
144e0 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74   {..  set result
144f0 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 73 65 74   [list]....  set
14500 20 73 74 72 69 6e 67 73 20 5b 6c 69 73 74 20 5c   strings [list \
14510 0d 0a 20 20 20 20 20 20 22 4f 6e 65 54 77 6f 3d  ..      "OneTwo=
14520 54 68 72 65 65 46 6f 75 72 22 20 22 5c 22 4f 6e  ThreeFour" "\"On
14530 65 54 77 6f 5c 22 3d 5c 22 54 68 72 65 65 46 6f  eTwo\"=\"ThreeFo
14540 75 72 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 22  ur\"" \..      "
14550 4f 6e 65 20 54 77 6f 3d 54 68 72 65 65 20 46 6f  One Two=Three Fo
14560 75 72 22 20 22 5c 22 4f 6e 65 20 54 77 6f 5c 22  ur" "\"One Two\"
14570 3d 5c 22 54 68 72 65 65 20 46 6f 75 72 5c 22 22  =\"Three Four\""
14580 20 5c 0d 0a 20 20 20 20 20 20 22 4f 6e 65 54 77   \..      "OneTw
14590 6f 3d 54 68 72 65 65 46 6f 75 72 3b 22 20 22 5c  o=ThreeFour;" "\
145a0 22 4f 6e 65 54 77 6f 5c 22 3d 5c 22 54 68 72 65  "OneTwo\"=\"Thre
145b0 65 46 6f 75 72 5c 22 3b 22 20 5c 0d 0a 20 20 20  eFour\";" \..   
145c0 20 20 20 22 4f 6e 65 20 54 77 6f 3d 54 68 72 65     "One Two=Thre
145d0 65 20 46 6f 75 72 3b 22 20 22 5c 22 4f 6e 65 20  e Four;" "\"One 
145e0 54 77 6f 5c 22 3d 5c 22 54 68 72 65 65 20 46 6f  Two\"=\"Three Fo
145f0 75 72 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 66 6f 72  ur\";"]....  for
14600 65 61 63 68 20 73 74 72 69 6e 67 20 24 73 74 72  each string $str
14610 69 6e 67 73 20 7b 0d 0a 20 20 20 20 73 65 74 20  ings {..    set 
14620 6c 69 73 74 20 5b 6f 62 6a 65 63 74 20 69 6e 76  list [object inv
14630 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
14640 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..       
14650 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
14660 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
14670 74 69 6f 6e 20 50 61 72 73 65 43 6f 6e 6e 65 63  tion ParseConnec
14680 74 69 6f 6e 53 74 72 69 6e 67 20 24 73 74 72 69  tionString $stri
14690 6e 67 5d 0d 0a 0d 0a 20 20 20 20 6f 62 6a 65 63  ng]....    objec
146a0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
146b0 20 70 61 69 72 20 24 6c 69 73 74 20 7b 0d 0a 20   pair $list {.. 
146c0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
146d0 75 6c 74 20 5b 6c 69 73 74 20 5b 24 70 61 69 72  ult [list [$pair
146e0 20 4b 65 79 5d 20 5b 24 70 61 69 72 20 56 61 6c   Key] [$pair Val
146f0 75 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  ue]]..    }..  }
14700 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
14710 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
14720 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
14730 61 69 6e 20 72 65 73 75 6c 74 20 6c 69 73 74 20  ain result list 
14740 70 61 69 72 20 73 74 72 69 6e 67 73 20 73 74 72  pair strings str
14750 69 6e 67 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ing..} -constrai
14760 6e 74 73 20 7b 65 61 67 6c 65 20 53 79 73 74 65  nts {eagle Syste
14770 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
14780 72 65 73 75 6c 74 20 7b 7b 4f 6e 65 54 77 6f 20  result {{OneTwo 
14790 54 68 72 65 65 46 6f 75 72 7d 20 7b 4f 6e 65 54  ThreeFour} {OneT
147a0 77 6f 5c 0d 0a 54 68 72 65 65 46 6f 75 72 7d 20  wo\..ThreeFour} 
147b0 7b 7b 4f 6e 65 20 54 77 6f 7d 20 7b 54 68 72 65  {{One Two} {Thre
147c0 65 20 46 6f 75 72 7d 7d 20 7b 7b 4f 6e 65 20 54  e Four}} {{One T
147d0 77 6f 7d 20 7b 54 68 72 65 65 20 46 6f 75 72 7d  wo} {Three Four}
147e0 7d 20 7b 4f 6e 65 54 77 6f 20 54 68 72 65 65 46  } {OneTwo ThreeF
147f0 6f 75 72 7d 5c 0d 0a 7b 4f 6e 65 54 77 6f 20 54  our}\..{OneTwo T
14800 68 72 65 65 46 6f 75 72 7d 20 7b 7b 4f 6e 65 20  hreeFour} {{One 
14810 54 77 6f 7d 20 7b 54 68 72 65 65 20 46 6f 75 72  Two} {Three Four
14820 7d 7d 20 7b 7b 4f 6e 65 20 54 77 6f 7d 20 7b 54  }} {{One Two} {T
14830 68 72 65 65 20 46 6f 75 72 7d 7d 7d 7d 0d 0a 0d  hree Four}}}}...
14840 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
14850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14890 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
148a0 74 20 64 61 74 61 2d 31 2e 34 38 20 7b 72 6f 6c  t data-1.48 {rol
148b0 6c 62 61 63 6b 20 74 6f 20 6e 65 73 74 65 64 20  lback to nested 
148c0 73 61 76 65 70 6f 69 6e 74 7d 20 2d 73 65 74 75  savepoint} -setu
148d0 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
148e0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
148f0 61 2d 31 2e 34 38 2e 64 62 5d 0d 0a 7d 20 2d 62  a-1.48.db]..} -b
14900 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65  ody {..  sql exe
14910 63 75 74 65 20 24 64 62 20 22 42 45 47 49 4e 20  cute $db "BEGIN 
14920 49 4d 4d 45 44 49 41 54 45 20 54 52 41 4e 53 41  IMMEDIATE TRANSA
14930 43 54 49 4f 4e 3b 22 0d 0a 20 20 73 71 6c 20 65  CTION;"..  sql e
14940 78 65 63 75 74 65 20 24 64 62 20 22 53 41 56 45  xecute $db "SAVE
14950 50 4f 49 4e 54 20 6f 6e 65 3b 22 0d 0a 0d 0a 20  POINT one;".... 
14960 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
14970 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
14980 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20 65 78  1(x);"..  sql ex
14990 65 63 75 74 65 20 24 64 62 20 22 53 41 56 45 50  ecute $db "SAVEP
149a0 4f 49 4e 54 20 74 77 6f 3b 22 0d 0a 0d 0a 20 20  OINT two;"....  
149b0 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 
149c0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
149d0 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 22 0d  (x) VALUES(1);".
149e0 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c  .  lappend resul
149f0 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d  t [sql execute -
14a00 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24  execute scalar $
14a10 64 62 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54  db "SELECT COUNT
14a20 28 2a 29 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a  (*) FROM t1;"]..
14a30 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
14a40 62 20 22 53 41 56 45 50 4f 49 4e 54 20 74 68 72  b "SAVEPOINT thr
14a50 65 65 3b 22 0d 0a 0d 0a 20 20 73 71 6c 20 65 78  ee;"....  sql ex
14a60 65 63 75 74 65 20 24 64 62 20 22 49 4e 53 45 52  ecute $db "INSER
14a70 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41  T INTO t1 (x) VA
14a80 4c 55 45 53 28 32 29 3b 22 0d 0a 20 20 6c 61 70  LUES(2);"..  lap
14a90 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c  pend result [sql
14aa0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
14ab0 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45  e scalar $db "SE
14ac0 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
14ad0 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 71  OM t1;"]....  sq
14ae0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22 52  l execute $db "R
14af0 4f 4c 4c 42 41 43 4b 20 54 52 41 4e 53 41 43 54  OLLBACK TRANSACT
14b00 49 4f 4e 20 54 4f 20 53 41 56 45 50 4f 49 4e 54  ION TO SAVEPOINT
14b10 20 74 68 72 65 65 3b 22 0d 0a 20 20 6c 61 70 70   three;"..  lapp
14b20 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
14b30 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
14b40 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c   scalar $db "SEL
14b50 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f  ECT COUNT(*) FRO
14b60 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74  M t1;"]....  set
14b70 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61   result..} -clea
14b80 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
14b90 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
14ba0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
14bb0 61 69 6e 20 72 65 73 75 6c 74 20 64 62 20 66 69  ain result db fi
14bc0 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
14bd0 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
14be0 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
14bf0 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
14c00 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
14c10 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
14c20 72 65 73 75 6c 74 20 5c 0d 0a 7b 31 20 32 20 31  result \..{1 2 1
14c30 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
14c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c80 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
14c90 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 34 39   {test data-1.49
14ca0 20 7b 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e   {NoExtensionFun
14cb0 63 74 69 6f 6e 73 20 63 6f 6e 6e 65 63 74 69 6f  ctions connectio
14cc0 6e 20 66 6c 61 67 7d 20 2d 73 65 74 75 70 20 7b  n flag} -setup {
14cd0 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
14ce0 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
14cf0 2e 34 39 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .49.db]..} -body
14d00 20 7b 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74   {..  set result
14d10 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 6c 61 70   [list]....  lap
14d20 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61 74  pend result [cat
14d30 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65 20  ch {sql execute 
14d40 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
14d50 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53 45  $db \..      "SE
14d60 4c 45 43 54 20 72 65 70 6c 69 63 61 74 65 28 27  LECT replicate('
14d70 31 32 33 34 27 2c 20 32 29 3b 22 7d 20 6f 75 74  1234', 2);"} out
14d80 70 75 74 5d 20 24 6f 75 74 70 75 74 0d 0a 0d 0a  put] $output....
14d90 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
14da0 65 4e 61 6d 65 0d 0a 20 20 73 65 74 75 70 44 62  eName..  setupDb
14db0 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" ""
14dc0 20 22 22 20 4e 6f 45 78 74 65 6e 73 69 6f 6e 46   "" NoExtensionF
14dd0 75 6e 63 74 69 6f 6e 73 0d 0a 0d 0a 20 20 6c 61  unctions....  la
14de0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 63 61  ppend result [ca
14df0 74 63 68 20 7b 73 71 6c 20 65 78 65 63 75 74 65  tch {sql execute
14e00 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72   -execute scalar
14e10 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22 53   $db \..      "S
14e20 45 4c 45 43 54 20 72 65 70 6c 69 63 61 74 65 28  ELECT replicate(
14e30 27 31 32 33 34 27 2c 20 33 29 3b 22 7d 20 6f 75  '1234', 3);"} ou
14e40 74 70 75 74 5d 20 24 6f 75 74 70 75 74 0d 0a 0d  tput] $output...
14e50 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
14e60 6c 65 4e 61 6d 65 0d 0a 20 20 73 65 74 75 70 44  leName..  setupD
14e70 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
14e80 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
14e90 5b 63 61 74 63 68 20 7b 73 71 6c 20 65 78 65 63  [catch {sql exec
14ea0 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61  ute -execute sca
14eb0 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20  lar $db \..     
14ec0 20 22 53 45 4c 45 43 54 20 72 65 70 6c 69 63 61   "SELECT replica
14ed0 74 65 28 27 31 32 33 34 27 2c 20 34 29 3b 22 7d  te('1234', 4);"}
14ee0 20 6f 75 74 70 75 74 5d 20 24 6f 75 74 70 75 74   output] $output
14ef0 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74  ....  set result
14f00 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
14f10 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
14f20 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
14f30 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6f 75 74   -nocomplain out
14f40 70 75 74 20 72 65 73 75 6c 74 20 64 62 20 66 69  put result db fi
14f50 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
14f60 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
14f70 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
14f80 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
14f90 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
14fa0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d  m.Data.SQLite} -
14fb0 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
14fc0 2d 72 65 73 75 6c 74 20 7b 5e 30 20 31 32 33 34  -result {^0 1234
14fd0 31 32 33 34 20 31 20 5c 7b 53 79 73 74 65 6d 5c  1234 1 \{System\
14fe0 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53  .Data\.SQLite\.S
14ff0 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 5c 0d  QLiteException\.
15000 0a 5c 28 30 78 38 30 30 30 34 30 30 35 5c 29 3a  .\(0x80004005\):
15010 20 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72   SQL logic error
15020 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
15030 62 61 73 65 2e 2a 3f 5c 7d 20 30 20 31 32 33 34  base.*?\} 0 1234
15040 31 32 33 34 31 32 33 34 31 32 33 34 24 7d 7d 0d  123412341234$}}.
15050 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
15060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15080 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15090 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
150a0 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
150b0 65 73 74 20 64 61 74 61 2d 31 2e 35 30 20 7b 63  est data-1.50 {c
150c0 6f 6c 75 6d 6e 20 6e 61 6d 65 20 61 6e 64 20 69  olumn name and i
150d0 6e 64 65 78 20 6c 6f 6f 6b 75 70 7d 20 2d 73 65  ndex lookup} -se
150e0 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
150f0 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
15100 61 74 61 2d 31 2e 35 30 2e 64 62 5d 0d 0a 7d 20  ata-1.50.db]..} 
15110 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65  -body {..  sql e
15120 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {..  
15130 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
15140 31 28 78 2c 20 79 2c 20 7a 29 3b 0d 0a 20 20 20  1(x, y, z);..   
15150 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
15160 28 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53  (x, y, z) VALUES
15170 28 31 2c 20 27 66 6f 6f 27 2c 20 31 32 33 34 29  (1, 'foo', 1234)
15180 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ;..  }....  set 
15190 64 61 74 61 52 65 61 64 65 72 20 5b 73 71 6c 20  dataReader [sql 
151a0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
151b0 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
151c0 64 61 74 61 72 65 61 64 65 72 20 5c 0d 0a 20 20  datareader \..  
151d0 20 20 20 20 2d 61 6c 69 61 73 20 24 64 62 20 22      -alias $db "
151e0 53 45 4c 45 43 54 20 78 2c 20 79 2c 20 7a 20 46  SELECT x, y, z F
151f0 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73  ROM t1;"]....  s
15200 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
15210 0d 0a 0d 0a 20 20 77 68 69 6c 65 20 7b 5b 24 64  ....  while {[$d
15220 61 74 61 52 65 61 64 65 72 20 52 65 61 64 5d 7d  ataReader Read]}
15230 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
15240 72 65 73 75 6c 74 20 5c 0d 0a 20 20 20 20 20 20  result \..      
15250 20 20 5b 6c 69 73 74 20 5b 24 64 61 74 61 52 65    [list [$dataRe
15260 61 64 65 72 20 47 65 74 4e 61 6d 65 20 30 5d 20  ader GetName 0] 
15270 5b 24 64 61 74 61 52 65 61 64 65 72 20 47 65 74  [$dataReader Get
15280 4f 72 64 69 6e 61 6c 20 78 5d 20 5c 0d 0a 20 20  Ordinal x] \..  
15290 20 20 20 20 20 20 20 20 20 20 5b 24 64 61 74 61            [$data
152a0 52 65 61 64 65 72 20 49 74 65 6d 20 78 5d 5d 20  Reader Item x]] 
152b0 5c 0d 0a 20 20 20 20 20 20 20 20 5b 6c 69 73 74  \..        [list
152c0 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 47 65   [$dataReader Ge
152d0 74 4e 61 6d 65 20 31 5d 20 5b 24 64 61 74 61 52  tName 1] [$dataR
152e0 65 61 64 65 72 20 47 65 74 4f 72 64 69 6e 61 6c  eader GetOrdinal
152f0 20 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   y] \..         
15300 20 20 20 5b 24 64 61 74 61 52 65 61 64 65 72 20     [$dataReader 
15310 49 74 65 6d 20 79 5d 5d 20 5c 0d 0a 20 20 20 20  Item y]] \..    
15320 20 20 20 20 5b 6c 69 73 74 20 5b 24 64 61 74 61      [list [$data
15330 52 65 61 64 65 72 20 47 65 74 4e 61 6d 65 20 32  Reader GetName 2
15340 5d 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 47  ] [$dataReader G
15350 65 74 4f 72 64 69 6e 61 6c 20 7a 5d 20 5c 0d 0a  etOrdinal z] \..
15360 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 64 61              [$da
15370 74 61 52 65 61 64 65 72 20 49 74 65 6d 20 7a 5d  taReader Item z]
15380 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  ]..  }....  set 
15390 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
153a0 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  up {..  unset -n
153b0 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 61 52 65  ocomplain dataRe
153c0 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65 61 6e 75  ader....  cleanu
153d0 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
153e0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
153f0 6c 61 69 6e 20 72 65 73 75 6c 74 20 64 62 20 66  lain result db f
15400 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
15410 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c  traints \..{eagl
15420 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  e monoBug28 comm
15430 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
15440 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
15450 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20  em.Data.SQLite} 
15460 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 7b 78 20 30  -result \..{{x 0
15470 20 31 7d 20 7b 79 20 31 20 66 6f 6f 7d 20 7b 7a   1} {y 1 foo} {z
15480 20 32 20 31 32 33 34 7d 7d 7d 0d 0a 0d 0a 23 23   2 1234}}}....##
15490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154d0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
154e0 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64  .runTest {test d
154f0 61 74 61 2d 31 2e 35 31 20 7b 6e 75 6c 6c 61 62  ata-1.51 {nullab
15500 6c 65 20 76 61 6c 75 65 20 74 79 70 65 73 7d 20  le value types} 
15510 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
15520 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
15530 65 20 64 61 74 61 2d 31 2e 35 31 2e 64 62 5d 0d  e data-1.51.db].
15540 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 71  .} -body {..  sq
15550 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d  l execute $db {.
15560 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
15570 45 20 74 31 28 78 20 49 4e 54 45 47 45 52 29 3b  E t1(x INTEGER);
15580 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
15590 4f 20 74 31 20 28 78 29 20 56 41 4c 55 45 53 28  O t1 (x) VALUES(
155a0 4e 55 4c 4c 29 3b 0d 0a 20 20 20 20 49 4e 53 45  NULL);..    INSE
155b0 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20 56  RT INTO t1 (x) V
155c0 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20 7d 0d 0a  ALUES(1);..  }..
155d0 0d 0a 20 20 73 65 74 20 64 61 74 61 52 65 61 64  ..  set dataRead
155e0 65 72 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  er [sql execute 
155f0 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
15600 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61 64  -format dataread
15610 65 72 20 5c 0d 0a 20 20 20 20 20 20 2d 61 6c 69  er \..      -ali
15620 61 73 20 24 64 62 20 22 53 45 4c 45 43 54 20 78  as $db "SELECT x
15630 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
15640 59 20 78 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20  Y x;"]....  set 
15650 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
15660 0a 20 20 77 68 69 6c 65 20 7b 5b 24 64 61 74 61  .  while {[$data
15670 52 65 61 64 65 72 20 52 65 61 64 5d 7d 20 7b 0d  Reader Read]} {.
15680 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b 61 20  .    foreach {a 
15690 62 20 63 20 64 20 65 7d 20 5b 6c 69 73 74 20 22  b c d e} [list "
156a0 22 20 22 22 20 22 22 20 22 22 20 22 22 5d 20 62  " "" "" "" ""] b
156b0 72 65 61 6b 0d 0a 0d 0a 20 20 20 20 73 65 74 20  reak....    set 
156c0 78 20 5b 24 64 61 74 61 52 65 61 64 65 72 20 47  x [$dataReader G
156d0 65 74 4f 72 64 69 6e 61 6c 20 78 5d 0d 0a 0d 0a  etOrdinal x]....
156e0 20 20 20 20 66 6f 72 65 61 63 68 20 7b 61 20 62      foreach {a b
156f0 20 63 20 65 7d 20 5b 6c 69 73 74 20 5c 0d 0a 20   c e} [list \.. 
15700 20 20 20 20 20 20 20 5b 24 64 61 74 61 52 65 61         [$dataRea
15710 64 65 72 20 47 65 74 4e 61 6d 65 20 24 78 5d 20  der GetName $x] 
15720 5b 24 64 61 74 61 52 65 61 64 65 72 20 47 65 74  [$dataReader Get
15730 56 61 6c 75 65 20 24 78 5d 20 5c 0d 0a 20 20 20  Value $x] \..   
15740 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 64 61       [catch {$da
15750 74 61 52 65 61 64 65 72 20 47 65 74 49 6e 74 36  taReader GetInt6
15760 34 20 24 78 7d 20 64 5d 20 5b 24 64 61 74 61 52  4 $x} d] [$dataR
15770 65 61 64 65 72 20 49 74 65 6d 20 78 5d 5d 20 62  eader Item x]] b
15780 72 65 61 6b 0d 0a 0d 0a 20 20 20 20 6c 61 70 70  reak....    lapp
15790 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  end result [list
157a0 20 24 78 20 24 61 20 24 62 20 24 63 20 24 64 20   $x $a $b $c $d 
157b0 24 65 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  $e]..  }....  se
157c0 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65  t result..} -cle
157d0 61 6e 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20  anup {..  unset 
157e0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 61 74 61  -nocomplain data
157f0 52 65 61 64 65 72 0d 0a 0d 0a 20 20 63 6c 65 61  Reader....  clea
15800 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
15810 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
15820 6d 70 6c 61 69 6e 20 65 20 64 20 63 20 62 20 61  mplain e d c b a
15830 20 78 20 72 65 73 75 6c 74 20 64 62 20 66 69 6c   x result db fil
15840 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
15850 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
15860 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
15870 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
15880 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
15890 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d  .Data.SQLite} -m
158a0 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d  atch \..regexp -
158b0 72 65 73 75 6c 74 20 7b 5e 5c 7b 30 20 78 20 53  result {^\{0 x S
158c0 79 73 74 65 6d 23 44 42 4e 75 6c 6c 23 5c 64 2b  ystem#DBNull#\d+
158d0 20 31 5c 0d 0a 5c 7b 53 79 73 74 65 6d 5c 2e 52   1\..\{System\.R
158e0 65 66 6c 65 63 74 69 6f 6e 5c 2e 54 61 72 67 65  eflection\.Targe
158f0 74 49 6e 76 6f 63 61 74 69 6f 6e 45 78 63 65 70  tInvocationExcep
15900 74 69 6f 6e 3a 20 45 78 63 65 70 74 69 6f 6e 20  tion: Exception 
15910 68 61 73 20 62 65 65 6e 20 74 68 72 6f 77 6e 20  has been thrown 
15920 62 79 5c 0d 0a 74 68 65 20 74 61 72 67 65 74 20  by\..the target 
15930 6f 66 20 61 6e 20 69 6e 76 6f 63 61 74 69 6f 6e  of an invocation
15940 5c 2e 20 2d 2d 2d 3e 20 53 79 73 74 65 6d 5c 2e  \. ---> System\.
15950 49 6e 76 61 6c 69 64 43 61 73 74 45 78 63 65 70  InvalidCastExcep
15960 74 69 6f 6e 3a 2e 2a 5c 7d 5c 0d 0a 53 79 73 74  tion:.*\}\..Syst
15970 65 6d 23 44 42 4e 75 6c 6c 23 5c 64 2b 5c 7d 20  em#DBNull#\d+\} 
15980 5c 7b 30 20 78 20 31 20 30 20 31 20 31 5c 7d 24  \{0 x 1 0 1 1\}$
15990 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
159a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
159e0 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
159f0 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 35 32   {test data-1.52
15a00 20 7b 73 74 61 74 69 63 20 53 51 4c 69 74 65 43   {static SQLiteC
15a10 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 20 6d  ommand.Execute m
15a20 65 74 68 6f 64 7d 20 2d 73 65 74 75 70 20 7b 0d  ethod} -setup {.
15a30 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
15a40 6c 61 69 6e 20 72 65 73 75 6c 74 20 73 71 6c 0d  lain result sql.
15a50 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
15a60 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
15a70 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
15a80 31 28 78 29 3b 20 5c 0d 0a 20 20 20 20 49 4e 53  1(x); \..    INS
15a90 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
15aa0 56 41 4c 55 45 53 20 28 4e 55 4c 4c 29 3b 20 5c  VALUES (NULL); \
15ab0 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20 46  ..    SELECT x F
15ac0 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
15ad0 78 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  x; \..  }....  s
15ae0 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
15af0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
15b00 74 31 28 78 29 3b 20 5c 0d 0a 20 20 20 20 49 4e  t1(x); \..    IN
15b10 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29  SERT INTO t1 (x)
15b20 20 56 41 4c 55 45 53 20 28 3f 29 3b 20 5c 0d 0a   VALUES (?); \..
15b30 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f      SELECT x FRO
15b40 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 3b  M t1 ORDER BY x;
15b50 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
15b60 20 72 65 73 75 6c 74 28 31 29 20 5b 6f 62 6a 65   result(1) [obje
15b70 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d  ct invoke System
15b80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
15b90 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78 65 63 75  iteCommand Execu
15ba0 74 65 20 5c 0d 0a 20 20 20 20 20 20 22 74 68 69  te \..      "thi
15bb0 73 20 77 69 6c 6c 20 6e 6f 74 20 65 78 65 63 75  s will not execu
15bc0 74 65 22 20 4e 6f 6e 65 20 6e 75 6c 6c 5d 0d 0a  te" None null]..
15bd0 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 28 32  ..  set result(2
15be0 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ) [object invoke
15bf0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
15c00 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ite.SQLiteComman
15c10 64 20 45 78 65 63 75 74 65 20 5c 0d 0a 20 20 20  d Execute \..   
15c20 20 20 20 24 73 71 6c 28 31 29 20 4e 6f 6e 51 75     $sql(1) NonQu
15c30 65 72 79 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20 20 73  ery null]....  s
15c40 65 74 20 72 65 73 75 6c 74 28 33 29 20 5b 6f 62  et result(3) [ob
15c50 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74  ject invoke Syst
15c60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
15c70 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45 78 65  QLiteCommand Exe
15c80 63 75 74 65 20 5c 0d 0a 20 20 20 20 20 20 24 73  cute \..      $s
15c90 71 6c 28 31 29 20 53 63 61 6c 61 72 20 6e 75 6c  ql(1) Scalar nul
15ca0 6c 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75  l]....  set resu
15cb0 6c 74 28 34 29 20 5b 6f 62 6a 65 63 74 20 69 6e  lt(4) [object in
15cc0 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61  voke System.Data
15cd0 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
15ce0 6d 6d 61 6e 64 20 45 78 65 63 75 74 65 20 5c 0d  mmand Execute \.
15cf0 0a 20 20 20 20 20 20 24 73 71 6c 28 31 29 20 52  .      $sql(1) R
15d00 65 61 64 65 72 20 6e 75 6c 6c 5d 0d 0a 0d 0a 20  eader null].... 
15d10 20 73 65 74 20 72 65 73 75 6c 74 28 35 29 20 5b   set result(5) [
15d20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79  object invoke Sy
15d30 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15d40 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 45  .SQLiteCommand E
15d50 78 65 63 75 74 65 20 5c 0d 0a 20 20 20 20 20 20  xecute \..      
15d60 22 74 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20 65  "this will not e
15d70 78 65 63 75 74 65 22 20 4e 6f 6e 65 20 6e 75 6c  xecute" None nul
15d80 6c 20 31 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  l 1]....  set re
15d90 73 75 6c 74 28 36 29 20 5b 6f 62 6a 65 63 74 20  sult(6) [object 
15da0 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61  invoke System.Da
15db0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
15dc0 43 6f 6d 6d 61 6e 64 20 45 78 65 63 75 74 65 20  Command Execute 
15dd0 5c 0d 0a 20 20 20 20 20 20 24 73 71 6c 28 32 29  \..      $sql(2)
15de0 20 4e 6f 6e 51 75 65 72 79 20 6e 75 6c 6c 20 31   NonQuery null 1
15df0 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  ]....  set resul
15e00 74 28 37 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t(7) [object inv
15e10 6f 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  oke System.Data.
15e20 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6d  SQLite.SQLiteCom
15e30 6d 61 6e 64 20 45 78 65 63 75 74 65 20 5c 0d 0a  mand Execute \..
15e40 20 20 20 20 20 20 24 73 71 6c 28 32 29 20 53 63        $sql(2) Sc
15e50 61 6c 61 72 20 6e 75 6c 6c 20 31 5d 0d 0a 0d 0a  alar null 1]....
15e60 20 20 73 65 74 20 72 65 73 75 6c 74 28 38 29 20    set result(8) 
15e70 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53  [object invoke S
15e80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
15e90 65 2e 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20  e.SQLiteCommand 
15ea0 45 78 65 63 75 74 65 20 5c 0d 0a 20 20 20 20 20  Execute \..     
15eb0 20 24 73 71 6c 28 32 29 20 52 65 61 64 65 72 20   $sql(2) Reader 
15ec0 6e 75 6c 6c 20 31 5d 0d 0a 0d 0a 20 20 6c 69 73  null 1]....  lis
15ed0 74 20 24 72 65 73 75 6c 74 28 31 29 20 24 72 65  t $result(1) $re
15ee0 73 75 6c 74 28 32 29 20 24 72 65 73 75 6c 74 28  sult(2) $result(
15ef0 33 29 20 24 72 65 73 75 6c 74 28 34 29 20 24 72  3) $result(4) $r
15f00 65 73 75 6c 74 28 35 29 20 24 72 65 73 75 6c 74  esult(5) $result
15f10 28 36 29 20 5c 0d 0a 20 20 20 20 20 20 24 72 65  (6) \..      $re
15f20 73 75 6c 74 28 37 29 20 24 72 65 73 75 6c 74 28  sult(7) $result(
15f30 38 29 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  8)..} -cleanup {
15f40 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
15f50 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 73 71 6c  plain result sql
15f60 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
15f70 20 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32   {eagle monoBug2
15f80 38 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  8 SQLite System.
15f90 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 6d 61  Data.SQLite} -ma
15fa0 74 63 68 20 72 65 67 65 78 70 20 5c 0d 0a 2d 72  tch regexp \..-r
15fb0 65 73 75 6c 74 20 7b 5e 5c 7b 5c 7d 20 31 20 53  esult {^\{\} 1 S
15fc0 79 73 74 65 6d 23 44 42 4e 75 6c 6c 23 5c 64 2b  ystem#DBNull#\d+
15fd0 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c   System#Data#SQL
15fe0 69 74 65 23 53 51 4c 69 74 65 44 61 74 61 52 65  ite#SQLiteDataRe
15ff0 61 64 65 72 23 5c 64 2b 20 5c 7b 5c 7d 5c 0d 0a  ader#\d+ \{\}\..
16000 31 20 31 20 53 79 73 74 65 6d 23 44 61 74 61 23  1 1 System#Data#
16010 53 51 4c 69 74 65 23 53 51 4c 69 74 65 44 61 74  SQLite#SQLiteDat
16020 61 52 65 61 64 65 72 23 5c 64 2b 24 7d 7d 0d 0a  aReader#\d+$}}..
16030 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
16040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16080 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
16090 73 74 20 64 61 74 61 2d 31 2e 35 33 20 7b 42 69  st data-1.53 {Bi
160a0 6e 64 41 6c 6c 41 73 54 65 78 74 20 77 2f 44 61  ndAllAsText w/Da
160b0 74 65 54 69 6d 65 7d 20 2d 73 65 74 75 70 20 7b  teTime} -setup {
160c0 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
160d0 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
160e0 2e 35 33 2e 64 62 5d 20 22 22 20 54 69 63 6b 73  .53.db] "" Ticks
160f0 20 55 74 63 20 42 69 6e 64 41 6c 6c 41 73 54 65   Utc BindAllAsTe
16100 78 74 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  xt..} -body {.. 
16110 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
16120 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
16130 31 28 78 29 3b 22 0d 0a 0d 0a 20 20 6c 69 73 74  1(x);"....  list
16140 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64   [sql execute $d
16150 62 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  b "INSERT INTO t
16160 31 20 28 78 29 20 56 41 4c 55 45 53 28 3f 29 3b  1 (x) VALUES(?);
16170 22 20 5c 0d 0a 20 20 20 20 20 20 5b 6c 69 73 74  " \..      [list
16180 20 70 61 72 61 6d 31 20 44 61 74 65 54 69 6d 65   param1 DateTime
16190 20 5b 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b   [set dateTime [
161a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 44 61  object invoke Da
161b0 74 65 54 69 6d 65 20 50 61 72 73 65 20 5c 0d 0a  teTime Parse \..
161c0 20 20 20 20 20 20 22 32 30 30 30 2e 30 32 2e 32        "2000.02.2
161d0 39 20 31 33 3a 35 39 3a 35 38 2e 31 32 33 34 35  9 13:59:58.12345
161e0 36 37 5a 22 5d 5d 5d 5d 20 5b 73 71 6c 20 65 78  67Z"]]]] [sql ex
161f0 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72  ecute -execute r
16200 65 61 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 2d  eader \..      -
16210 66 6f 72 6d 61 74 20 6c 69 73 74 20 24 64 62 20  format list $db 
16220 22 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74  "SELECT x FROM t
16230 31 3b 22 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  1;"]..} -cleanup
16240 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
16250 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
16260 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
16270 20 64 61 74 65 54 69 6d 65 20 64 62 20 66 69 6c   dateTime db fil
16280 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
16290 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20  aints \..{eagle 
162a0 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e  monoBug28 comman
162b0 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41  d.sql compile.DA
162c0 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
162d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72  .Data.SQLite} -r
162e0 65 73 75 6c 74 20 5c 0d 0a 7b 31 20 36 33 30 38  esult \..{1 6308
162f0 37 34 30 30 37 39 38 30 30 30 30 30 30 30 7d 7d  74007980000000}}
16300 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
16310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16340 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16350 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
16360 74 65 73 74 20 64 61 74 61 2d 31 2e 35 34 20 7b  test data-1.54 {
16370 62 69 6e 64 20 53 51 4c 69 74 65 46 75 6e 63 74  bind SQLiteFunct
16380 69 6f 6e 20 74 6f 20 6f 6e 65 20 53 51 4c 69 74  ion to one SQLit
16390 65 43 6f 6e 6e 65 63 74 69 6f 6e 7d 20 2d 73 65  eConnection} -se
163a0 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
163b0 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 35 34 2e  eName data-1.54.
163c0 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  db..} -body {.. 
163d0 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20   set id [object 
163e0 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74  invoke Interpret
163f0 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78  er.GetActive Nex
16400 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61  tId]..  set data
16410 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  Source [file joi
16420 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69  n [getDatabaseDi
16430 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61  rectory] $fileNa
16440 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c  me]....  set sql
16450 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
16460 20 4d 79 52 61 6e 64 6f 6d 28 29 3b 20 5c 0d 0a   MyRandom(); \..
16470 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
16480 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
16490 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
164a0 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
164b0 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
164c0 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
164d0 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
164e0 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
164f0 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  Lite;....    nam
16500 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
16510 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
16520 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20     public class 
16530 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
16540 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  teFunction..    
16550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 72 69    {..        pri
16560 76 61 74 65 20 52 61 6e 64 6f 6d 20 72 61 6e 64  vate Random rand
16570 6f 6d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  om;....        /
16580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
165d0 20 20 70 75 62 6c 69 63 20 54 65 73 74 24 7b 69    public Test${i
165e0 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  d}()..        {.
165f0 0a 20 20 20 20 20 20 20 20 20 20 72 61 6e 64 6f  .          rando
16600 6d 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29  m = new Random()
16610 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
16620 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
16670 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
16680 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  c override objec
16690 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20  t Invoke(..     
166a0 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20       object\[\] 
166b0 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
166c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
166d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
166e0 61 6e 64 6f 6d 2e 4e 65 78 74 28 29 3b 0d 0a 20  andom.Next();.. 
166f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16700 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16750 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
16760 61 74 69 63 20 6f 62 6a 65 63 74 20 44 6f 54 65  atic object DoTe
16770 73 74 28 62 6f 6f 6c 20 62 69 6e 64 46 75 6e 63  st(bool bindFunc
16780 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 7b  tion)..        {
16790 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
167a0 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
167b0 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
167c0 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
167d0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
167e0 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
167f0 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
16800 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  ;[getFlagsProper
16810 74 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ty]"))..        
16820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16830 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
16840 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
16850 20 20 20 69 66 20 28 62 69 6e 64 46 75 6e 63 74     if (bindFunct
16860 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
16870 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16880 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 69     connection.Bi
16890 6e 64 46 75 6e 63 74 69 6f 6e 28 6e 65 77 20 53  ndFunction(new S
168a0 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
168b0 72 69 62 75 74 65 28 0d 0a 20 20 20 20 20 20 20  ribute(..       
168c0 20 20 20 20 20 20 20 20 20 22 4d 79 52 61 6e 64           "MyRand
168d0 6f 6d 22 2c 20 30 2c 20 46 75 6e 63 74 69 6f 6e  om", 0, Function
168e0 54 79 70 65 2e 53 63 61 6c 61 72 29 2c 20 6e 65  Type.Scalar), ne
168f0 77 20 54 65 73 74 24 7b 69 64 7d 28 29 29 3b 0d  w Test${id}());.
16900 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
16920 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
16930 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65 77  nd command = new
16940 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 22   SQLiteCommand("
16950 24 7b 73 71 6c 7d 22 2c 0d 0a 20 20 20 20 20 20  ${sql}",..      
16960 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
16970 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  tion))..        
16980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16990 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d       return comm
169a0 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
169b0 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
169c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
169d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
169e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
169f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16a30 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
16a40 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
16a50 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
16a60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
16a70 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
16a80 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
16a90 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
16aa0 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
16ab0 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44   errors System.D
16ac0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d  ata.SQLite.dll].
16ad0 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
16ae0 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
16af0 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
16b00 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
16b10 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
16b20 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
16b30 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
16b40 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
16b50 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
16b60 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
16b70 74 24 7b 69 64 7d 20 44 6f 54 65 73 74 20 66 61  t${id} DoTest fa
16b80 6c 73 65 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  lse..      } res
16b90 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
16ba0 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74  lt ""]}] $result
16bb0 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
16bc0 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
16bd0 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
16be0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
16bf0 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
16c00 65 73 74 24 7b 69 64 7d 20 44 6f 54 65 73 74 20  est${id} DoTest 
16c10 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 20 72 65  true..      } re
16c20 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
16c30 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
16c40 74 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  t \..      [expr
16c50 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
16c60 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
16c70 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
16c80 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
16c90 54 65 73 74 24 7b 69 64 7d 20 44 6f 54 65 73 74  Test${id} DoTest
16ca0 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 20   false..      } 
16cb0 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
16cc0 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73  esult ""]}] $res
16cd0 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
16ce0 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
16cf0 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
16d00 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
16d10 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
16d20 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
16d30 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
16d40 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
16d50 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 6d 6f 6e  aints {eagle mon
16d60 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
16d70 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
16d80 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e  SQLite\..System.
16d90 44 61 74 61 2e 53 51 4c 69 74 65 20 63 6f 6d 70  Data.SQLite comp
16da0 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
16db0 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
16dc0 20 5c 0d 0a 5b 73 74 72 69 6e 67 20 6d 61 70 20   \..[string map 
16dd0 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b  [list \n \r\n] {
16de0 5e 4f 6b 20 53 79 73 74 65 6d 23 43 6f 64 65 44  ^Ok System#CodeD
16df0 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
16e00 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 5c  ilerResults#\d+\
16e10 0d 0a 5c 7b 5c 7d 20 31 20 5c 7b 53 79 73 74 65  ..\{\} 1 \{Syste
16e20 6d 5c 2e 52 65 66 6c 65 63 74 69 6f 6e 5c 2e 54  m\.Reflection\.T
16e30 61 72 67 65 74 49 6e 76 6f 63 61 74 69 6f 6e 45  argetInvocationE
16e40 78 63 65 70 74 69 6f 6e 3a 20 45 78 63 65 70 74  xception: Except
16e50 69 6f 6e 20 68 61 73 20 62 65 65 6e 5c 0d 0a 74  ion has been\..t
16e60 68 72 6f 77 6e 20 62 79 20 74 68 65 20 74 61 72  hrown by the tar
16e70 67 65 74 20 6f 66 20 61 6e 20 69 6e 76 6f 63 61  get of an invoca
16e80 74 69 6f 6e 5c 2e 20 2d 2d 2d 3e 5c 0d 0a 53 79  tion\. --->\..Sy
16e90 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69  stem\.Data\.SQLi
16ea0 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74  te\.SQLiteExcept
16eb0 69 6f 6e 3a 20 53 51 4c 20 6c 6f 67 69 63 20 65  ion: SQL logic e
16ec0 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
16ed0 64 61 74 61 62 61 73 65 0d 0a 6e 6f 20 73 75 63  database..no suc
16ee0 68 20 66 75 6e 63 74 69 6f 6e 3a 20 4d 79 52 61  h function: MyRa
16ef0 6e 64 6f 6d 2e 2a 5c 7d 20 30 20 28 3f 3a 2d 29  ndom.*\} 0 (?:-)
16f00 3f 5c 64 2b 20 31 5c 0d 0a 5c 7b 53 79 73 74 65  ?\d+ 1\..\{Syste
16f10 6d 5c 2e 52 65 66 6c 65 63 74 69 6f 6e 5c 2e 54  m\.Reflection\.T
16f20 61 72 67 65 74 49 6e 76 6f 63 61 74 69 6f 6e 45  argetInvocationE
16f30 78 63 65 70 74 69 6f 6e 3a 20 45 78 63 65 70 74  xception: Except
16f40 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 74 68 72  ion has been thr
16f50 6f 77 6e 20 62 79 5c 0d 0a 74 68 65 20 74 61 72  own by\..the tar
16f60 67 65 74 20 6f 66 20 61 6e 20 69 6e 76 6f 63 61  get of an invoca
16f70 74 69 6f 6e 5c 2e 20 2d 2d 2d 3e 20 53 79 73 74  tion\. ---> Syst
16f80 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65  em\.Data\.SQLite
16f90 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  \.SQLiteExceptio
16fa0 6e 3a 20 53 51 4c 5c 0d 0a 6c 6f 67 69 63 20 65  n: SQL\..logic e
16fb0 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
16fc0 64 61 74 61 62 61 73 65 0d 0a 6e 6f 20 73 75 63  database..no suc
16fd0 68 20 66 75 6e 63 74 69 6f 6e 3a 20 4d 79 52 61  h function: MyRa
16fe0 6e 64 6f 6d 2e 2a 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  ndom.*\}$}]}....
16ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
17040 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
17050 20 64 61 74 61 2d 31 2e 35 35 20 7b 53 51 4c 69   data-1.55 {SQLi
17060 74 65 43 6f 6e 76 65 72 74 20 54 79 70 65 4e 61  teConvert TypeNa
17070 6d 65 54 6f 44 62 54 79 70 65 7d 20 2d 73 65 74  meToDbType} -set
17080 75 70 20 7b 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  up {..  unset -n
17090 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
170a0 20 74 79 70 65 4e 61 6d 65 0d 0a 7d 20 2d 62 6f   typeName..} -bo
170b0 64 79 20 7b 0d 0a 20 20 66 6f 72 65 61 63 68 20  dy {..  foreach 
170c0 74 79 70 65 4e 61 6d 65 20 5b 6c 69 73 74 20 5c  typeName [list \
170d0 0d 0a 20 20 20 20 20 20 42 49 47 49 4e 54 20 42  ..      BIGINT B
170e0 49 47 55 49 4e 54 20 42 49 4e 41 52 59 20 42 49  IGUINT BINARY BI
170f0 54 20 42 4c 4f 42 20 42 4f 4f 4c 20 42 4f 4f 4c  T BLOB BOOL BOOL
17100 45 41 4e 20 43 48 41 52 20 43 4c 4f 42 20 43 4f  EAN CHAR CLOB CO
17110 55 4e 54 45 52 20 43 55 52 52 45 4e 43 59 20 5c  UNTER CURRENCY \
17120 0d 0a 20 20 20 20 20 20 44 41 54 45 20 44 41 54  ..      DATE DAT
17130 45 54 49 4d 45 20 44 45 43 49 4d 41 4c 20 44 4f  ETIME DECIMAL DO
17140 55 42 4c 45 20 46 4c 4f 41 54 20 47 45 4e 45 52  UBLE FLOAT GENER
17150 41 4c 20 47 55 49 44 20 49 44 45 4e 54 49 54 59  AL GUID IDENTITY
17160 20 49 4d 41 47 45 20 49 4e 54 20 49 4e 54 38 20   IMAGE INT INT8 
17170 5c 0d 0a 20 20 20 20 20 20 49 4e 54 31 36 20 49  \..      INT16 I
17180 4e 54 33 32 20 49 4e 54 36 34 20 49 4e 54 45 47  NT32 INT64 INTEG
17190 45 52 20 49 4e 54 45 47 45 52 38 20 49 4e 54 45  ER INTEGER8 INTE
171a0 47 45 52 31 36 20 49 4e 54 45 47 45 52 33 32 20  GER16 INTEGER32 
171b0 49 4e 54 45 47 45 52 36 34 20 5c 0d 0a 20 20 20  INTEGER64 \..   
171c0 20 20 20 4c 4f 47 49 43 41 4c 20 4c 4f 4e 47 20     LOGICAL LONG 
171d0 4c 4f 4e 47 43 48 41 52 20 4c 4f 4e 47 54 45 58  LONGCHAR LONGTEX
171e0 54 20 4c 4f 4e 47 56 41 52 43 48 41 52 20 4d 45  T LONGVARCHAR ME
171f0 4d 4f 20 4d 4f 4e 45 59 20 4e 43 48 41 52 20 4e  MO MONEY NCHAR N
17200 4f 54 45 20 4e 54 45 58 54 20 5c 0d 0a 20 20 20  OTE NTEXT \..   
17210 20 20 20 4e 55 4d 42 45 52 20 4e 55 4d 45 52 49     NUMBER NUMERI
17220 43 20 4e 56 41 52 43 48 41 52 20 4f 4c 45 4f 42  C NVARCHAR OLEOB
17230 4a 45 43 54 20 52 41 57 20 52 45 41 4c 20 53 49  JECT RAW REAL SI
17240 4e 47 4c 45 20 53 4d 41 4c 4c 44 41 54 45 20 53  NGLE SMALLDATE S
17250 4d 41 4c 4c 49 4e 54 20 5c 0d 0a 20 20 20 20 20  MALLINT \..     
17260 20 53 4d 41 4c 4c 55 49 4e 54 20 53 54 52 49 4e   SMALLUINT STRIN
17270 47 20 54 45 58 54 20 54 49 4d 45 20 54 49 4d 45  G TEXT TIME TIME
17280 53 54 41 4d 50 20 54 49 4e 59 49 4e 54 20 54 49  STAMP TINYINT TI
17290 4e 59 53 49 4e 54 20 55 49 4e 54 20 55 49 4e 54  NYSINT UINT UINT
172a0 38 20 55 49 4e 54 31 36 20 5c 0d 0a 20 20 20 20  8 UINT16 \..    
172b0 20 20 55 49 4e 54 33 32 20 55 49 4e 54 36 34 20    UINT32 UINT64 
172c0 55 4c 4f 4e 47 20 55 4e 49 51 55 45 49 44 45 4e  ULONG UNIQUEIDEN
172d0 54 49 46 49 45 52 20 55 4e 53 49 47 4e 45 44 49  TIFIER UNSIGNEDI
172e0 4e 54 45 47 45 52 20 55 4e 53 49 47 4e 45 44 49  NTEGER UNSIGNEDI
172f0 4e 54 45 47 45 52 38 20 5c 0d 0a 20 20 20 20 20  NTEGER8 \..     
17300 20 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52   UNSIGNEDINTEGER
17310 31 36 20 55 4e 53 49 47 4e 45 44 49 4e 54 45 47  16 UNSIGNEDINTEG
17320 45 52 33 32 20 55 4e 53 49 47 4e 45 44 49 4e 54  ER32 UNSIGNEDINT
17330 45 47 45 52 36 34 20 56 41 52 42 49 4e 41 52 59  EGER64 VARBINARY
17340 20 56 41 52 43 48 41 52 20 5c 0d 0a 20 20 20 20   VARCHAR \..    
17350 20 20 56 41 52 43 48 41 52 32 20 59 45 53 4e 4f    VARCHAR2 YESNO
17360 5d 20 7b 0d 0a 20 20 20 20 6c 61 70 70 65 6e 64  ] {..    lappend
17370 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 74   result [list $t
17380 79 70 65 4e 61 6d 65 20 5b 6f 62 6a 65 63 74 20  ypeName [object 
17390 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
173a0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
173b0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
173c0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
173d0 76 65 72 74 20 54 79 70 65 4e 61 6d 65 54 6f 44  vert TypeNameToD
173e0 62 54 79 70 65 20 6e 75 6c 6c 20 24 74 79 70 65  bType null $type
173f0 4e 61 6d 65 20 4e 6f 6e 65 5d 5d 0d 0a 20 20 7d  Name None]]..  }
17400 0d 0a 20 20 73 65 74 20 72 65 73 75 6c 74 0d 0a  ..  set result..
17410 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
17420 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
17430 6e 20 72 65 73 75 6c 74 20 74 79 70 65 4e 61 6d  n result typeNam
17440 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
17450 73 20 7b 65 61 67 6c 65 20 53 79 73 74 65 6d 2e  s {eagle System.
17460 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65  Data.SQLite} -re
17470 73 75 6c 74 20 7b 7b 42 49 47 49 4e 54 20 49 6e  sult {{BIGINT In
17480 74 36 34 7d 20 7b 42 49 47 55 49 4e 54 5c 0d 0a  t64} {BIGUINT\..
17490 55 49 6e 74 36 34 7d 20 7b 42 49 4e 41 52 59 20  UInt64} {BINARY 
174a0 42 69 6e 61 72 79 7d 20 7b 42 49 54 20 42 6f 6f  Binary} {BIT Boo
174b0 6c 65 61 6e 7d 20 7b 42 4c 4f 42 20 42 69 6e 61  lean} {BLOB Bina
174c0 72 79 7d 20 7b 42 4f 4f 4c 20 42 6f 6f 6c 65 61  ry} {BOOL Boolea
174d0 6e 7d 20 7b 42 4f 4f 4c 45 41 4e 5c 0d 0a 42 6f  n} {BOOLEAN\..Bo
174e0 6f 6c 65 61 6e 7d 20 7b 43 48 41 52 20 41 6e 73  olean} {CHAR Ans
174f0 69 53 74 72 69 6e 67 46 69 78 65 64 4c 65 6e 67  iStringFixedLeng
17500 74 68 7d 20 7b 43 4c 4f 42 20 53 74 72 69 6e 67  th} {CLOB String
17510 7d 20 7b 43 4f 55 4e 54 45 52 20 49 6e 74 36 34  } {COUNTER Int64
17520 7d 20 7b 43 55 52 52 45 4e 43 59 5c 0d 0a 44 65  } {CURRENCY\..De
17530 63 69 6d 61 6c 7d 20 7b 44 41 54 45 20 44 61 74  cimal} {DATE Dat
17540 65 54 69 6d 65 7d 20 7b 44 41 54 45 54 49 4d 45  eTime} {DATETIME
17550 20 44 61 74 65 54 69 6d 65 7d 20 7b 44 45 43 49   DateTime} {DECI
17560 4d 41 4c 20 44 65 63 69 6d 61 6c 7d 20 7b 44 4f  MAL Decimal} {DO
17570 55 42 4c 45 20 44 6f 75 62 6c 65 7d 5c 0d 0a 7b  UBLE Double}\..{
17580 46 4c 4f 41 54 20 44 6f 75 62 6c 65 7d 20 7b 47  FLOAT Double} {G
17590 45 4e 45 52 41 4c 20 42 69 6e 61 72 79 7d 20 7b  ENERAL Binary} {
175a0 47 55 49 44 20 47 75 69 64 7d 20 7b 49 44 45 4e  GUID Guid} {IDEN
175b0 54 49 54 59 20 49 6e 74 36 34 7d 20 7b 49 4d 41  TITY Int64} {IMA
175c0 47 45 20 42 69 6e 61 72 79 7d 5c 0d 0a 7b 49 4e  GE Binary}\..{IN
175d0 54 20 49 6e 74 33 32 7d 20 7b 49 4e 54 38 20 53  T Int32} {INT8 S
175e0 42 79 74 65 7d 20 7b 49 4e 54 31 36 20 49 6e 74  Byte} {INT16 Int
175f0 31 36 7d 20 7b 49 4e 54 33 32 20 49 6e 74 33 32  16} {INT32 Int32
17600 7d 20 7b 49 4e 54 36 34 20 49 6e 74 36 34 7d 20  } {INT64 Int64} 
17610 7b 49 4e 54 45 47 45 52 5c 0d 0a 49 6e 74 36 34  {INTEGER\..Int64
17620 7d 20 7b 49 4e 54 45 47 45 52 38 20 53 42 79 74  } {INTEGER8 SByt
17630 65 7d 20 7b 49 4e 54 45 47 45 52 31 36 20 49 6e  e} {INTEGER16 In
17640 74 31 36 7d 20 7b 49 4e 54 45 47 45 52 33 32 20  t16} {INTEGER32 
17650 49 6e 74 33 32 7d 20 7b 49 4e 54 45 47 45 52 36  Int32} {INTEGER6
17660 34 20 49 6e 74 36 34 7d 5c 0d 0a 7b 4c 4f 47 49  4 Int64}\..{LOGI
17670 43 41 4c 20 42 6f 6f 6c 65 61 6e 7d 20 7b 4c 4f  CAL Boolean} {LO
17680 4e 47 20 49 6e 74 36 34 7d 20 7b 4c 4f 4e 47 43  NG Int64} {LONGC
17690 48 41 52 20 53 74 72 69 6e 67 7d 20 7b 4c 4f 4e  HAR String} {LON
176a0 47 54 45 58 54 20 53 74 72 69 6e 67 7d 20 7b 4c  GTEXT String} {L
176b0 4f 4e 47 56 41 52 43 48 41 52 5c 0d 0a 53 74 72  ONGVARCHAR\..Str
176c0 69 6e 67 7d 20 7b 4d 45 4d 4f 20 53 74 72 69 6e  ing} {MEMO Strin
176d0 67 7d 20 7b 4d 4f 4e 45 59 20 44 65 63 69 6d 61  g} {MONEY Decima
176e0 6c 7d 20 7b 4e 43 48 41 52 20 53 74 72 69 6e 67  l} {NCHAR String
176f0 46 69 78 65 64 4c 65 6e 67 74 68 7d 20 7b 4e 4f  FixedLength} {NO
17700 54 45 20 53 74 72 69 6e 67 7d 5c 0d 0a 7b 4e 54  TE String}\..{NT
17710 45 58 54 20 53 74 72 69 6e 67 7d 20 7b 4e 55 4d  EXT String} {NUM
17720 42 45 52 20 44 65 63 69 6d 61 6c 7d 20 7b 4e 55  BER Decimal} {NU
17730 4d 45 52 49 43 20 44 65 63 69 6d 61 6c 7d 20 7b  MERIC Decimal} {
17740 4e 56 41 52 43 48 41 52 20 53 74 72 69 6e 67 7d  NVARCHAR String}
17750 20 7b 4f 4c 45 4f 42 4a 45 43 54 5c 0d 0a 42 69   {OLEOBJECT\..Bi
17760 6e 61 72 79 7d 20 7b 52 41 57 20 42 69 6e 61 72  nary} {RAW Binar
17770 79 7d 20 7b 52 45 41 4c 20 44 6f 75 62 6c 65 7d  y} {REAL Double}
17780 20 7b 53 49 4e 47 4c 45 20 53 69 6e 67 6c 65 7d   {SINGLE Single}
17790 20 7b 53 4d 41 4c 4c 44 41 54 45 20 44 61 74 65   {SMALLDATE Date
177a0 54 69 6d 65 7d 5c 0d 0a 7b 53 4d 41 4c 4c 49 4e  Time}\..{SMALLIN
177b0 54 20 49 6e 74 31 36 7d 20 7b 53 4d 41 4c 4c 55  T Int16} {SMALLU
177c0 49 4e 54 20 55 49 6e 74 31 36 7d 20 7b 53 54 52  INT UInt16} {STR
177d0 49 4e 47 20 53 74 72 69 6e 67 7d 20 7b 54 45 58  ING String} {TEX
177e0 54 20 53 74 72 69 6e 67 7d 20 7b 54 49 4d 45 5c  T String} {TIME\
177f0 0d 0a 44 61 74 65 54 69 6d 65 7d 20 7b 54 49 4d  ..DateTime} {TIM
17800 45 53 54 41 4d 50 20 44 61 74 65 54 69 6d 65 7d  ESTAMP DateTime}
17810 20 7b 54 49 4e 59 49 4e 54 20 42 79 74 65 7d 20   {TINYINT Byte} 
17820 7b 54 49 4e 59 53 49 4e 54 20 53 42 79 74 65 7d  {TINYSINT SByte}
17830 20 7b 55 49 4e 54 20 55 49 6e 74 33 32 7d 5c 0d   {UINT UInt32}\.
17840 0a 7b 55 49 4e 54 38 20 42 79 74 65 7d 20 7b 55  .{UINT8 Byte} {U
17850 49 4e 54 31 36 20 55 49 6e 74 31 36 7d 20 7b 55  INT16 UInt16} {U
17860 49 4e 54 33 32 20 55 49 6e 74 33 32 7d 20 7b 55  INT32 UInt32} {U
17870 49 4e 54 36 34 20 55 49 6e 74 36 34 7d 20 7b 55  INT64 UInt64} {U
17880 4c 4f 4e 47 20 55 49 6e 74 36 34 7d 5c 0d 0a 7b  LONG UInt64}\..{
17890 55 4e 49 51 55 45 49 44 45 4e 54 49 46 49 45 52  UNIQUEIDENTIFIER
178a0 20 47 75 69 64 7d 20 7b 55 4e 53 49 47 4e 45 44   Guid} {UNSIGNED
178b0 49 4e 54 45 47 45 52 20 55 49 6e 74 36 34 7d 20  INTEGER UInt64} 
178c0 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52  {UNSIGNEDINTEGER
178d0 38 20 42 79 74 65 7d 5c 0d 0a 7b 55 4e 53 49 47  8 Byte}\..{UNSIG
178e0 4e 45 44 49 4e 54 45 47 45 52 31 36 20 55 49 6e  NEDINTEGER16 UIn
178f0 74 31 36 7d 20 7b 55 4e 53 49 47 4e 45 44 49 4e  t16} {UNSIGNEDIN
17900 54 45 47 45 52 33 32 20 55 49 6e 74 33 32 7d 20  TEGER32 UInt32} 
17910 7b 55 4e 53 49 47 4e 45 44 49 4e 54 45 47 45 52  {UNSIGNEDINTEGER
17920 36 34 5c 0d 0a 55 49 6e 74 36 34 7d 20 7b 56 41  64\..UInt64} {VA
17930 52 42 49 4e 41 52 59 20 42 69 6e 61 72 79 7d 20  RBINARY Binary} 
17940 7b 56 41 52 43 48 41 52 20 41 6e 73 69 53 74 72  {VARCHAR AnsiStr
17950 69 6e 67 7d 20 7b 56 41 52 43 48 41 52 32 20 41  ing} {VARCHAR2 A
17960 6e 73 69 53 74 72 69 6e 67 7d 20 7b 59 45 53 4e  nsiString} {YESN
17970 4f 5c 0d 0a 42 6f 6f 6c 65 61 6e 7d 7d 7d 0d 0a  O\..Boolean}}}..
17980 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
17990 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
179d0 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
179e0 73 74 20 64 61 74 61 2d 31 2e 35 36 20 7b 74 6f  st data-1.56 {to
179f0 74 79 70 65 20 65 78 74 65 6e 73 69 6f 6e 7d 20  type extension} 
17a00 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 75  -setup {..  setu
17a10 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d  pDb [set fileNam
17a20 65 20 64 61 74 61 2d 31 2e 35 36 2e 64 62 5d 0d  e data-1.56.db].
17a30 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
17a40 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65  t connection [ge
17a50 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a  tDbConnection]..
17a60 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
17a70 73 74 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63  st]....  $connec
17a80 74 69 6f 6e 20 45 6e 61 62 6c 65 45 78 74 65 6e  tion EnableExten
17a90 73 69 6f 6e 73 20 74 72 75 65 0d 0a 20 20 24 63  sions true..  $c
17aa0 6f 6e 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45 78  onnection LoadEx
17ab0 74 65 6e 73 69 6f 6e 20 5b 67 65 74 43 6f 72 65  tension [getCore
17ac0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d 20  BinaryFileName] 
17ad0 73 71 6c 69 74 65 33 5f 74 6f 74 79 70 65 5f 69  sqlite3_totype_i
17ae0 6e 69 74 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  nit....  lappend
17af0 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
17b00 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
17b10 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43 54  alar $db "SELECT
17b20 20 74 6f 69 6e 74 65 67 65 72 28 27 31 27 29 3b   tointeger('1');
17b30 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  "]..  lappend re
17b40 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
17b50 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
17b60 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 74 6f  r $db "SELECT to
17b70 69 6e 74 65 67 65 72 28 27 31 78 27 29 3b 22 5d  integer('1x');"]
17b80 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
17b90 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20  lt [sql execute 
17ba0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
17bb0 24 64 62 20 22 53 45 4c 45 43 54 20 74 6f 72 65  $db "SELECT tore
17bc0 61 6c 28 27 31 2e 30 31 27 29 3b 22 5d 0d 0a 20  al('1.01');"].. 
17bd0 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
17be0 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
17bf0 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db
17c00 20 22 53 45 4c 45 43 54 20 74 6f 72 65 61 6c 28   "SELECT toreal(
17c10 27 31 2e 30 78 27 29 3b 22 5d 0d 0a 0d 0a 20 20  '1.0x');"]....  
17c20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  set result..} -c
17c30 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 66 72 65 65  leanup {..  free
17c40 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a  DbConnection....
17c50 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
17c60 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 6e 6e 65  ain result conne
17c70 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61 6e  ction....  clean
17c80 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
17c90 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
17ca0 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61 6d  plain db fileNam
17cb0 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
17cc0 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
17cd0 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
17ce0 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
17cf0 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
17d00 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c  a.SQLite} -resul
17d10 74 20 5c 0d 0a 7b 31 20 7b 7d 20 31 2e 30 31 20  t \..{1 {} 1.01 
17d20 7b 7d 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  {}}}....########
17d30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17d40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17d70 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
17d80 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
17d90 35 37 20 7b 72 65 67 65 78 70 20 65 78 74 65 6e  57 {regexp exten
17da0 73 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a  sion} -setup {..
17db0 20 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66    setupDb [set f
17dc0 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 35  ileName data-1.5
17dd0 37 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b  7.db]..} -body {
17de0 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
17df0 70 6c 61 69 6e 20 70 61 74 74 65 72 6e 20 72 65  plain pattern re
17e00 73 75 6c 74 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  sult....  set co
17e10 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
17e20 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 73 65  onnection]..  se
17e30 74 20 72 65 73 75 6c 74 28 31 29 20 5b 6c 69 73  t result(1) [lis
17e40 74 5d 0d 0a 0d 0a 20 20 24 63 6f 6e 6e 65 63 74  t]....  $connect
17e50 69 6f 6e 20 45 6e 61 62 6c 65 45 78 74 65 6e 73  ion EnableExtens
17e60 69 6f 6e 73 20 74 72 75 65 0d 0a 20 20 24 63 6f  ions true..  $co
17e70 6e 6e 65 63 74 69 6f 6e 20 4c 6f 61 64 45 78 74  nnection LoadExt
17e80 65 6e 73 69 6f 6e 20 5b 67 65 74 43 6f 72 65 42  ension [getCoreB
17e90 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d 20 73  inaryFileName] s
17ea0 71 6c 69 74 65 33 5f 72 65 67 65 78 70 5f 69 6e  qlite3_regexp_in
17eb0 69 74 0d 0a 0d 0a 20 20 73 65 74 20 70 61 74 74  it....  set patt
17ec0 65 72 6e 28 31 29 20 7b 5e 5c 64 2b 20 5b 41 2d  ern(1) {^\d+ [A-
17ed0 5a 5d 7b 31 2c 33 7d 24 7d 3b 20 23 20 76 61 6c  Z]{1,3}$}; # val
17ee0 69 64 0d 0a 20 20 73 65 74 20 70 61 74 74 65 72  id..  set patter
17ef0 6e 28 32 29 20 7b 5e 5c 64 2b 20 5b 43 5d 28 24  n(2) {^\d+ [C]($
17f00 7d 3b 20 23 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a  }; # invalid....
17f10 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
17f20 28 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  (1) [catch {..  
17f30 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65    sql execute -e
17f40 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d
17f50 62 20 22 53 45 4c 45 43 54 20 52 45 47 45 58 50  b "SELECT REGEXP
17f60 28 27 24 70 61 74 74 65 72 6e 28 31 29 27 2c 20  ('$pattern(1)', 
17f70 27 31 20 41 42 27 29 3b 22 0d 0a 20 20 7d 20 72  '1 AB');"..  } r
17f80 65 73 75 6c 74 28 32 29 5d 20 24 72 65 73 75 6c  esult(2)] $resul
17f90 74 28 32 29 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  t(2)....  lappen
17fa0 64 20 72 65 73 75 6c 74 28 31 29 20 5b 63 61 74  d result(1) [cat
17fb0 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78  ch {..    sql ex
17fc0 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
17fd0 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45 43  calar $db "SELEC
17fe0 54 20 52 45 47 45 58 50 28 27 24 70 61 74 74 65  T REGEXP('$patte
17ff0 72 6e 28 32 29 27 2c 20 27 31 20 41 42 27 29 3b  rn(2)', '1 AB');
18000 22 0d 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29  "..  } result(2)
18010 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b  ] [string trim [
18020 6c 69 6e 64 65 78 20 5b 73 70 6c 69 74 20 24 72  lindex [split $r
18030 65 73 75 6c 74 28 32 29 20 5c 6e 5d 20 31 5d 5d  esult(2) \n] 1]]
18040 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
18050 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68 20 7b  sult(1) [catch {
18060 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74  ..    sql execut
18070 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
18080 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 27 31  r $db "SELECT '1
18090 20 41 42 27 20 52 45 47 45 58 50 20 27 24 70 61   AB' REGEXP '$pa
180a0 74 74 65 72 6e 28 31 29 27 3b 22 0d 0a 20 20 7d  ttern(1)';"..  }
180b0 20 72 65 73 75 6c 74 28 32 29 5d 20 24 72 65 73   result(2)] $res
180c0 75 6c 74 28 32 29 0d 0a 0d 0a 20 20 6c 61 70 70  ult(2)....  lapp
180d0 65 6e 64 20 72 65 73 75 6c 74 28 31 29 20 5b 63  end result(1) [c
180e0 61 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20  atch {..    sql 
180f0 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
18100 20 73 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c   scalar $db "SEL
18110 45 43 54 20 27 31 20 41 42 27 20 52 45 47 45 58  ECT '1 AB' REGEX
18120 50 20 27 24 70 61 74 74 65 72 6e 28 32 29 27 3b  P '$pattern(2)';
18130 22 0d 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29  "..  } result(2)
18140 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b  ] [string trim [
18150 6c 69 6e 64 65 78 20 5b 73 70 6c 69 74 20 24 72  lindex [split $r
18160 65 73 75 6c 74 28 32 29 20 5c 6e 5d 20 31 5d 5d  esult(2) \n] 1]]
18170 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
18180 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68 20 7b  sult(1) [catch {
18190 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74  ..    sql execut
181a0 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
181b0 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 52 45  r $db "SELECT RE
181c0 47 45 58 50 28 27 24 70 61 74 74 65 72 6e 28 31  GEXP('$pattern(1
181d0 29 27 2c 20 27 32 27 29 3b 22 0d 0a 20 20 7d 20  )', '2');"..  } 
181e0 72 65 73 75 6c 74 28 32 29 5d 20 24 72 65 73 75  result(2)] $resu
181f0 6c 74 28 32 29 0d 0a 0d 0a 20 20 6c 61 70 70 65  lt(2)....  lappe
18200 6e 64 20 72 65 73 75 6c 74 28 31 29 20 5b 63 61  nd result(1) [ca
18210 74 63 68 20 7b 0d 0a 20 20 20 20 73 71 6c 20 65  tch {..    sql e
18220 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute 
18230 73 63 61 6c 61 72 20 24 64 62 20 22 53 45 4c 45  scalar $db "SELE
18240 43 54 20 52 45 47 45 58 50 28 27 24 70 61 74 74  CT REGEXP('$patt
18250 65 72 6e 28 32 29 27 2c 20 27 32 27 29 3b 22 0d  ern(2)', '2');".
18260 0a 20 20 7d 20 72 65 73 75 6c 74 28 32 29 5d 20  .  } result(2)] 
18270 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69  [string trim [li
18280 6e 64 65 78 20 5b 73 70 6c 69 74 20 24 72 65 73  ndex [split $res
18290 75 6c 74 28 32 29 20 5c 6e 5d 20 31 5d 5d 0d 0a  ult(2) \n] 1]]..
182a0 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  ..  lappend resu
182b0 6c 74 28 31 29 20 5b 63 61 74 63 68 20 7b 0d 0a  lt(1) [catch {..
182c0 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
182d0 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20  -execute scalar 
182e0 24 64 62 20 22 53 45 4c 45 43 54 20 27 32 27 20  $db "SELECT '2' 
182f0 52 45 47 45 58 50 20 27 24 70 61 74 74 65 72 6e  REGEXP '$pattern
18300 28 31 29 27 3b 22 0d 0a 20 20 7d 20 72 65 73 75  (1)';"..  } resu
18310 6c 74 28 32 29 5d 20 24 72 65 73 75 6c 74 28 32  lt(2)] $result(2
18320 29 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  )....  lappend r
18330 65 73 75 6c 74 28 31 29 20 5b 63 61 74 63 68 20  esult(1) [catch 
18340 7b 0d 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75  {..    sql execu
18350 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
18360 61 72 20 24 64 62 20 22 53 45 4c 45 43 54 20 27  ar $db "SELECT '
18370 32 27 20 52 45 47 45 58 50 20 27 24 70 61 74 74  2' REGEXP '$patt
18380 65 72 6e 28 32 29 27 3b 22 0d 0a 20 20 7d 20 72  ern(2)';"..  } r
18390 65 73 75 6c 74 28 32 29 5d 20 5b 73 74 72 69 6e  esult(2)] [strin
183a0 67 20 74 72 69 6d 20 5b 6c 69 6e 64 65 78 20 5b  g trim [lindex [
183b0 73 70 6c 69 74 20 24 72 65 73 75 6c 74 28 32 29  split $result(2)
183c0 20 5c 6e 5d 20 31 5d 5d 0d 0a 0d 0a 20 20 73 65   \n] 1]]....  se
183d0 74 20 72 65 73 75 6c 74 28 31 29 0d 0a 7d 20 2d  t result(1)..} -
183e0 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 66 72 65  cleanup {..  fre
183f0 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
18400 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
18410 6c 61 69 6e 20 70 61 74 74 65 72 6e 20 72 65 73  lain pattern res
18420 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ult connection..
18430 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
18440 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
18450 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64  et -nocomplain d
18460 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  b fileName..} -c
18470 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65  onstraints \..{e
18480 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63  agle monoBug28 c
18490 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69  ommand.sql compi
184a0 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
184b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
184c0 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 30  e} -result \..{0
184d0 20 31 20 31 20 7b 75 6e 6d 61 74 63 68 65 64 20   1 1 {unmatched 
184e0 27 28 27 7d 20 30 20 31 20 31 20 7b 75 6e 6d 61  '('} 0 1 1 {unma
184f0 74 63 68 65 64 20 27 28 27 7d 20 30 20 30 20 31  tched '('} 0 0 1
18500 20 7b 75 6e 6d 61 74 63 68 65 64 20 27 28 27 7d   {unmatched '('}
18510 20 30 20 30 20 31 5c 0d 0a 7b 75 6e 6d 61 74 63   0 0 1\..{unmatc
18520 68 65 64 20 27 28 27 7d 7d 7d 0d 0a 0d 0a 23 23  hed '('}}}....##
18530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18570 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
18580 0a 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73  .reportSQLiteRes
18590 6f 75 72 63 65 73 20 24 74 65 73 74 5f 63 68 61  ources $test_cha
185a0 6e 6e 65 6c 0d 0a 0d 0a 23 23 23 23 23 23 23 23  nnel....########
185b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
185c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
185d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
185e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
185f0 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
18600 73 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e  st {test data-1.
18610 35 38 20 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63  58 {SQLiteConnec
18620 74 69 6f 6e 2e 52 65 6c 65 61 73 65 4d 65 6d 6f  tion.ReleaseMemo
18630 72 79 20 6d 65 74 68 6f 64 7d 20 2d 73 65 74 75  ry method} -setu
18640 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20 5b  p {..  setupDb [
18650 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61 74  set fileName dat
18660 61 2d 31 2e 35 38 2e 64 62 5d 0d 0a 7d 20 2d 62  a-1.58.db]..} -b
18670 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 72 65 73  ody {..  set res
18680 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  ult [list]....  
18690 73 65 74 20 6e 46 72 65 65 20 30 3b 20 73 65 74  set nFree 0; set
186a0 20 72 65 73 65 74 4f 6b 20 66 61 6c 73 65 3b 20   resetOk false; 
186b0 73 65 74 20 6e 4c 61 72 67 65 73 74 20 30 0d 0a  set nLargest 0..
186c0 20 20 73 65 74 20 63 6f 64 65 20 5b 6f 62 6a 65    set code [obje
186d0 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20  ct invoke \..   
186e0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
186f0 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e  QLite.SQLiteConn
18700 65 63 74 69 6f 6e 20 52 65 6c 65 61 73 65 4d 65  ection ReleaseMe
18710 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 2d 31  mory \..      -1
18720 20 74 72 75 65 20 74 72 75 65 20 6e 46 72 65 65   true true nFree
18730 20 72 65 73 65 74 4f 6b 20 6e 4c 61 72 67 65 73   resetOk nLarges
18740 74 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  t]....  lappend 
18750 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 63 6f  result [list $co
18760 64 65 20 24 6e 46 72 65 65 20 24 72 65 73 65 74  de $nFree $reset
18770 4f 6b 20 24 6e 4c 61 72 67 65 73 74 5d 0d 0a 0d  Ok $nLargest]...
18780 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
18790 64 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  db "CREATE TABLE
187a0 20 74 31 28 78 29 3b 22 0d 0a 20 20 73 71 6c 20   t1(x);"..  sql 
187b0 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
187c0 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 29 20  ERT INTO t1 (x) 
187d0 56 41 4c 55 45 53 28 52 41 4e 44 4f 4d 42 4c 4f  VALUES(RANDOMBLO
187e0 42 28 31 30 34 38 35 37 36 29 29 3b 22 0d 0a 0d  B(1048576));"...
187f0 0a 20 20 73 65 74 20 6e 46 72 65 65 20 30 3b 20  .  set nFree 0; 
18800 73 65 74 20 72 65 73 65 74 4f 6b 20 66 61 6c 73  set resetOk fals
18810 65 3b 20 73 65 74 20 6e 4c 61 72 67 65 73 74 20  e; set nLargest 
18820 30 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 6f  0..  set code [o
18830 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a  bject invoke \..
18840 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
18850 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
18860 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65 61 73  onnection Releas
18870 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20  eMemory \..     
18880 20 2d 31 20 74 72 75 65 20 74 72 75 65 20 6e 46   -1 true true nF
18890 72 65 65 20 72 65 73 65 74 4f 6b 20 6e 4c 61 72  ree resetOk nLar
188a0 67 65 73 74 5d 0d 0a 0d 0a 20 20 74 70 75 74 73  gest]....  tputs
188b0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b   $test_channel [
188c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
188d0 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79      "---- memory
188e0 20 72 65 6c 65 61 73 65 64 20 62 79 20 53 51 4c   released by SQL
188f0 69 74 65 2e 2e 2e 20 22 20 24 6e 46 72 65 65 20  ite... " $nFree 
18900 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 0d 0a 20  " bytes\n"].... 
18910 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
18920 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 6e 46 72  [list $code $nFr
18930 65 65 20 24 72 65 73 65 74 4f 6b 20 24 6e 4c 61  ee $resetOk $nLa
18940 72 67 65 73 74 5d 0d 0a 0d 0a 20 20 63 6c 65 61  rgest]....  clea
18950 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
18960 0a 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  .  checkForSQLit
18970 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 74 65  eDirectories $te
18980 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  st_channel true.
18990 0a 0d 0a 20 20 73 65 74 20 6e 46 72 65 65 20 30  ...  set nFree 0
189a0 3b 20 73 65 74 20 72 65 73 65 74 4f 6b 20 66 61  ; set resetOk fa
189b0 6c 73 65 3b 20 73 65 74 20 6e 4c 61 72 67 65 73  lse; set nLarges
189c0 74 20 30 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  t 0..  set code 
189d0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c  [object invoke \
189e0 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
189f0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
18a00 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65  eConnection Rele
18a10 61 73 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20  aseMemory \..   
18a20 20 20 20 2d 31 20 74 72 75 65 20 74 72 75 65 20     -1 true true 
18a30 6e 46 72 65 65 20 72 65 73 65 74 4f 6b 20 6e 4c  nFree resetOk nL
18a40 61 72 67 65 73 74 5d 0d 0a 0d 0a 20 20 74 70 75  argest]....  tpu
18a50 74 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  ts $test_channel
18a60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
18a70 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 61 72 67        "---- larg
18a80 65 73 74 20 66 72 65 65 20 53 51 4c 69 74 65 20  est free SQLite 
18a90 68 65 61 70 20 62 6c 6f 63 6b 2e 2e 2e 20 22 20  heap block... " 
18aa0 24 6e 4c 61 72 67 65 73 74 20 22 20 62 79 74 65  $nLargest " byte
18ab0 73 5c 6e 22 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65  s\n"]....  lappe
18ac0 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  nd result [list 
18ad0 24 63 6f 64 65 20 24 6e 46 72 65 65 20 24 72 65  $code $nFree $re
18ae0 73 65 74 4f 6b 20 24 6e 4c 61 72 67 65 73 74 5d  setOk $nLargest]
18af0 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
18b00 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
18b10 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
18b20 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6e 4c 61   -nocomplain nLa
18b30 72 67 65 73 74 20 72 65 73 65 74 4f 6b 20 6e 46  rgest resetOk nF
18b40 72 65 65 20 63 6f 64 65 20 72 65 73 75 6c 74 20  ree code result 
18b50 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  db fileName..} -
18b60 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
18b70 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6e  le monoBug28 con
18b80 66 69 67 75 72 61 74 69 6f 6e 2e 52 65 6c 65 61  figuration.Relea
18b90 73 65 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  se command.sql c
18ba0 6f 6d 70 69 6c 65 2e 44 41 54 41 5c 0d 0a 53 51  ompile.DATA\..SQ
18bb0 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
18bc0 2e 53 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20  .SQLite} -match 
18bd0 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 7b  regexp -result {
18be0 5e 5c 7b 42 75 73 79 20 30 20 46 61 6c 73 65 20  ^\{Busy 0 False 
18bf0 30 5c 7d 20 5c 7b 42 75 73 79 5c 0d 0a 5c 64 2b  0\} \{Busy\..\d+
18c00 20 46 61 6c 73 65 20 30 5c 7d 20 5c 7b 4f 6b 20   False 0\} \{Ok 
18c10 30 20 54 72 75 65 20 5c 64 2b 5c 7d 24 7d 7d 0d  0 True \d+\}$}}.
18c20 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
18c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18c70 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
18c80 65 73 74 20 64 61 74 61 2d 31 2e 35 39 20 7b 70  est data-1.59 {p
18c90 65 72 63 65 6e 74 69 6c 65 20 65 78 74 65 6e 73  ercentile extens
18ca0 69 6f 6e 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ion} -setup {.. 
18cb0 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
18cc0 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 35 39  leName data-1.59
18cd0 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  .db]..} -body {.
18ce0 0a 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f  .  set connectio
18cf0 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  n [getDbConnecti
18d00 6f 6e 5d 0d 0a 20 20 73 65 74 20 72 65 73 75 6c  on]..  set resul
18d10 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 24 63  t [list]....  $c
18d20 6f 6e 6e 65 63 74 69 6f 6e 20 45 6e 61 62 6c 65  onnection Enable
18d30 45 78 74 65 6e 73 69 6f 6e 73 20 74 72 75 65 0d  Extensions true.
18d40 0a 20 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 4c  .  $connection L
18d50 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 5b 67 65  oadExtension [ge
18d60 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e  tCoreBinaryFileN
18d70 61 6d 65 5d 20 73 71 6c 69 74 65 33 5f 70 65 72  ame] sqlite3_per
18d80 63 65 6e 74 69 6c 65 5f 69 6e 69 74 0d 0a 0d 0a  centile_init....
18d90 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
18da0 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 24 64   [sql execute $d
18db0 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
18dc0 74 31 28 78 29 3b 22 5d 0d 0a 20 20 6c 61 70 70  t1(x);"]..  lapp
18dd0 65 6e 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20  end result [sql 
18de0 65 78 65 63 75 74 65 20 24 64 62 20 22 49 4e 53  execute $db "INS
18df0 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
18e00 45 53 28 31 29 2c 28 32 29 2c 28 33 29 2c 28 34  ES(1),(2),(3),(4
18e10 29 3b 22 5d 0d 0a 20 20 6c 61 70 70 65 6e 64 20  );"]..  lappend 
18e20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63  result [sql exec
18e30 75 74 65 20 24 64 62 20 22 53 45 4c 45 43 54 20  ute $db "SELECT 
18e40 70 65 72 63 65 6e 74 69 6c 65 28 78 2c 32 35 29  percentile(x,25)
18e50 20 46 52 4f 4d 20 74 31 22 5d 0d 0a 0d 0a 20 20   FROM t1"]....  
18e60 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
18e70 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
18e80 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 
18e90 5c 0d 0a 20 20 20 20 20 20 22 53 45 4c 45 43 54  \..      "SELECT
18ea0 20 70 65 72 63 65 6e 74 69 6c 65 28 78 2c 32 35   percentile(x,25
18eb0 29 20 46 52 4f 4d 20 74 31 22 5d 0d 0a 0d 0a 20  ) FROM t1"].... 
18ec0 20 73 65 74 20 72 65 73 75 6c 74 0d 0a 7d 20 2d   set result..} -
18ed0 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 66 72 65  cleanup {..  fre
18ee0 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
18ef0 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
18f00 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 6e 6e  lain result conn
18f10 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 63 6c 65 61  ection....  clea
18f20 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
18f30 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
18f40 6d 70 6c 61 69 6e 20 64 62 20 66 69 6c 65 4e 61  mplain db fileNa
18f50 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
18f60 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
18f70 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
18f80 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
18f90 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
18fa0 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
18fb0 6c 74 20 5c 0d 0a 7b 30 20 34 20 30 20 31 2e 37  lt \..{0 4 0 1.7
18fc0 35 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  5}}....#########
18fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19010 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
19020 74 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36  t {test data-1.6
19030 30 20 7b 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  0 {per-connectio
19040 6e 20 74 79 70 65 20 6d 61 70 70 69 6e 67 73 7d  n type mappings}
19050 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
19060 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
19070 6d 65 20 64 61 74 61 2d 31 2e 36 30 2e 64 62 5d  me data-1.60.db]
19080 20 22 22 20 22 22 20 22 22 20 55 73 65 43 6f 6e   "" "" "" UseCon
19090 6e 65 63 74 69 6f 6e 54 79 70 65 73 0d 0a 7d 20  nectionTypes..} 
190a0 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63  -body {..  set c
190b0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62  onnection [getDb
190c0 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20 73  Connection]..  s
190d0 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
190e0 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65  ....  lappend re
190f0 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75 74  sult [sql execut
19100 65 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 22  e $db \..      "
19110 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
19120 78 20 44 41 54 45 2c 20 79 20 4d 59 44 41 54 45  x DATE, y MYDATE
19130 29 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 64 61  );"]....  set da
19140 74 65 54 69 6d 65 20 5b 63 6c 6f 63 6b 20 66 6f  teTime [clock fo
19150 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 63 61 6e  rmat [clock scan
19160 20 22 32 30 31 34 2d 30 32 2d 30 31 20 31 32 3a   "2014-02-01 12:
19170 33 34 3a 35 36 5a 22 5d 20 5c 0d 0a 20 20 20 20  34:56Z"] \..    
19180 20 20 2d 66 6f 72 6d 61 74 20 79 79 79 79 4d 4d    -format yyyyMM
19190 64 64 48 48 6d 6d 73 73 20 2d 67 6d 74 20 74 72  ddHHmmss -gmt tr
191a0 75 65 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64  ue]....  lappend
191b0 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65   result [sql exe
191c0 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64  cute $db [append
191d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 22 49  Args \..      "I
191e0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78  NSERT INTO t1 (x
191f0 2c 20 79 29 20 56 41 4c 55 45 53 28 27 22 20 24  , y) VALUES('" $
19200 64 61 74 65 54 69 6d 65 20 22 27 2c 20 27 22 20  dateTime "', '" 
19210 24 64 61 74 65 54 69 6d 65 20 22 27 29 3b 22 5d  $dateTime "');"]
19220 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72  ]....  lappend r
19230 65 73 75 6c 74 20 5b 73 71 6c 20 65 78 65 63 75  esult [sql execu
19240 74 65 20 2d 76 65 72 62 61 74 69 6d 20 2d 65 78  te -verbatim -ex
19250 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
19260 72 6d 61 74 20 6c 69 73 74 20 5c 0d 0a 20 20 20  rmat list \..   
19270 20 20 20 2d 64 61 74 65 74 69 6d 65 66 6f 72 6d     -datetimeform
19280 61 74 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46  at [getDateTimeF
19290 6f 72 6d 61 74 5d 20 24 64 62 20 22 53 45 4c 45  ormat] $db "SELE
192a0 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 3b  CT x, y FROM t1;
192b0 22 5d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e 64 20  "]....  lappend 
192c0 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74  result [$connect
192d0 69 6f 6e 20 43 6c 65 61 72 54 79 70 65 4d 61 70  ion ClearTypeMap
192e0 70 69 6e 67 73 5d 3b 20 23 20 30 0d 0a 20 20 6c  pings]; # 0..  l
192f0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24  append result [$
19300 63 6f 6e 6e 65 63 74 69 6f 6e 20 41 64 64 54 79  connection AddTy
19310 70 65 4d 61 70 70 69 6e 67 20 4d 59 44 41 54 45  peMapping MYDATE
19320 20 44 61 74 65 54 69 6d 65 20 66 61 6c 73 65 5d   DateTime false]
19330 3b 20 23 20 30 0d 0a 20 20 6c 61 70 70 65 6e 64  ; # 0..  lappend
19340 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e 6e 65 63   result [$connec
19350 74 69 6f 6e 20 41 64 64 54 79 70 65 4d 61 70 70  tion AddTypeMapp
19360 69 6e 67 20 4d 59 44 41 54 45 20 44 61 74 65 54  ing MYDATE DateT
19370 69 6d 65 20 74 72 75 65 5d 3b 20 23 20 31 0d 0a  ime true]; # 1..
19380 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
19390 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 41 64   [$connection Ad
193a0 64 54 79 70 65 4d 61 70 70 69 6e 67 20 4d 59 44  dTypeMapping MYD
193b0 41 54 45 20 44 61 74 65 54 69 6d 65 20 66 61 6c  ATE DateTime fal
193c0 73 65 5d 3b 20 23 20 31 0d 0a 20 20 6c 61 70 70  se]; # 1..  lapp
193d0 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e  end result [$con
193e0 6e 65 63 74 69 6f 6e 20 41 64 64 54 79 70 65 4d  nection AddTypeM
193f0 61 70 70 69 6e 67 20 4d 59 44 41 54 45 20 44 61  apping MYDATE Da
19400 74 65 54 69 6d 65 20 74 72 75 65 5d 3b 20 23 20  teTime true]; # 
19410 32 0d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  2..  lappend res
19420 75 6c 74 20 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e  ult [$connection
19430 20 43 6c 65 61 72 54 79 70 65 4d 61 70 70 69 6e   ClearTypeMappin
19440 67 73 5d 3b 20 23 20 32 0d 0a 20 20 6c 61 70 70  gs]; # 2..  lapp
19450 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 63 6f 6e  end result [$con
19460 6e 65 63 74 69 6f 6e 20 41 64 64 54 79 70 65 4d  nection AddTypeM
19470 61 70 70 69 6e 67 20 4d 59 44 41 54 45 20 44 61  apping MYDATE Da
19480 74 65 54 69 6d 65 20 74 72 75 65 5d 3b 20 23 20  teTime true]; # 
19490 30 0d 0a 0d 0a 20 20 73 65 74 20 74 79 70 65 4d  0....  set typeM
194a0 61 70 70 69 6e 67 73 20 5b 24 63 6f 6e 6e 65 63  appings [$connec
194b0 74 69 6f 6e 20 47 65 74 54 79 70 65 4d 61 70 70  tion GetTypeMapp
194c0 69 6e 67 73 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63  ings]....  objec
194d0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
194e0 20 70 61 69 72 20 24 74 79 70 65 4d 61 70 70 69   pair $typeMappi
194f0 6e 67 73 20 7b 0d 0a 20 20 20 20 73 65 74 20 74  ngs {..    set t
19500 79 70 65 4d 61 70 70 69 6e 67 20 5b 24 70 61 69  ypeMapping [$pai
19510 72 20 56 61 6c 75 65 5d 0d 0a 20 20 20 20 6c 61  r Value]..    la
19520 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69  ppend result [li
19530 73 74 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 5b  st [$pair Key] [
19540 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74  enumerableToList
19550 20 24 74 79 70 65 4d 61 70 70 69 6e 67 5d 5d 0d   $typeMapping]].
19560 0a 20 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65 6e  .  }....  lappen
19570 64 20 72 65 73 75 6c 74 20 5b 73 71 6c 20 65 78  d result [sql ex
19580 65 63 75 74 65 20 2d 76 65 72 62 61 74 69 6d 20  ecute -verbatim 
19590 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72 20  -execute reader 
195a0 2d 66 6f 72 6d 61 74 20 6c 69 73 74 20 5c 0d 0a  -format list \..
195b0 20 20 20 20 20 20 2d 64 61 74 65 74 69 6d 65 66        -datetimef
195c0 6f 72 6d 61 74 20 5b 67 65 74 44 61 74 65 54 69  ormat [getDateTi
195d0 6d 65 46 6f 72 6d 61 74 5d 20 24 64 62 20 22 53  meFormat] $db "S
195e0 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
195f0 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72  t1;"]....  set r
19600 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
19610 70 20 7b 0d 0a 20 20 66 72 65 65 44 62 43 6f 6e  p {..  freeDbCon
19620 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 75 6e 73  nection....  uns
19630 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74  et -nocomplain t
19640 79 70 65 4d 61 70 70 69 6e 67 20 74 79 70 65 4d  ypeMapping typeM
19650 61 70 70 69 6e 67 73 20 70 61 69 72 20 72 65 73  appings pair res
19660 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ult connection..
19670 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
19680 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
19690 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64  et -nocomplain d
196a0 61 74 65 54 69 6d 65 20 64 62 20 66 69 6c 65 4e  ateTime db fileN
196b0 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
196c0 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
196d0 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
196e0 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
196f0 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
19700 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73  ata.SQLite} -res
19710 75 6c 74 20 5c 0d 0a 7b 30 20 31 20 7b 7b 32 30  ult \..{0 1 {{20
19720 31 34 2d 30 32 2d 30 31 20 31 32 3a 33 34 3a 35  14-02-01 12:34:5
19730 36 7d 20 32 30 31 34 30 32 30 31 31 32 33 34 35  6} 2014020112345
19740 36 7d 20 30 20 30 20 31 20 31 20 32 20 32 20 30  6} 0 0 1 1 2 2 0
19750 20 7b 4d 59 44 41 54 45 20 7b 4d 59 44 41 54 45   {MYDATE {MYDATE
19760 5c 0d 0a 44 61 74 65 54 69 6d 65 20 54 72 75 65  \..DateTime True
19770 7d 7d 20 7b 7b 32 30 31 34 2d 30 32 2d 30 31 20  }} {{2014-02-01 
19780 31 32 3a 33 34 3a 35 36 7d 20 7b 32 30 31 34 2d  12:34:56} {2014-
19790 30 32 2d 30 31 20 31 32 3a 33 34 3a 35 36 7d 7d  02-01 12:34:56}}
197a0 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
197b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
197c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
197d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
197e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
197f0 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
19800 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36 31   {test data-1.61
19810 20 7b 53 45 4c 45 43 54 20 77 69 74 68 6f 75 74   {SELECT without
19820 20 54 59 50 45 53 7d 20 2d 73 65 74 75 70 20 7b   TYPES} -setup {
19830 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
19840 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
19850 2e 36 31 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .61.db]..} -body
19860 20 7b 0d 0a 20 20 73 65 74 20 76 61 6c 75 65 73   {..  set values
19870 20 5b 6c 69 73 74 20 4e 55 4c 4c 20 31 20 27 6f   [list NULL 1 'o
19880 6e 65 27 20 31 2e 30 20 58 27 30 31 27 5d 0d 0a  ne' 1.0 X'01']..
19890 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
198a0 62 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  b "CREATE TABLE 
198b0 74 31 28 78 2c 20 79 29 3b 22 0d 0a 0d 0a 20 20  t1(x, y);"....  
198c0 66 6f 72 65 61 63 68 20 78 20 24 76 61 6c 75 65  foreach x $value
198d0 73 20 7b 0d 0a 20 20 20 20 66 6f 72 65 61 63 68  s {..    foreach
198e0 20 79 20 24 76 61 6c 75 65 73 20 7b 0d 0a 20 20   y $values {..  
198f0 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20      sql execute 
19900 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20  $db [appendArgs 
19910 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 49 4e  \..          "IN
19920 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 78 2c  SERT INTO t1 (x,
19930 20 79 29 20 56 41 4c 55 45 53 28 22 20 24 78 20   y) VALUES(" $x 
19940 22 2c 20 22 20 24 79 20 22 29 3b 22 5d 0d 0a 20  ", " $y ");"].. 
19950 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73     }..  }....  s
19960 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
19970 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d  ute reader -form
19980 61 74 20 6c 69 73 74 20 2d 61 6c 6c 6f 77 6e 75  at list -allownu
19990 6c 6c 20 74 72 75 65 20 24 64 62 20 5c 0d 0a 20  ll true $db \.. 
199a0 20 20 20 20 20 22 53 45 4c 45 43 54 20 72 6f 77       "SELECT row
199b0 49 64 2c 20 78 2c 20 79 20 46 52 4f 4d 20 74 31  Id, x, y FROM t1
199c0 20 4f 52 44 45 52 20 42 59 20 72 6f 77 49 64 3b   ORDER BY rowId;
199d0 22 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  "..} -cleanup {.
199e0 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
199f0 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
19a00 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 79 20  t -nocomplain y 
19a10 78 20 76 61 6c 75 65 73 20 64 62 20 66 69 6c 65  x values db file
19a20 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
19a30 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d  ints \..{eagle m
19a40 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
19a50 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
19a60 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
19a70 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65  Data.SQLite} -re
19a80 73 75 6c 74 20 5c 0d 0a 7b 31 20 7b 7d 20 7b 7d  sult \..{1 {} {}
19a90 20 32 20 7b 7d 20 31 20 33 20 7b 7d 20 6f 6e 65   2 {} 1 3 {} one
19aa0 20 34 20 7b 7d 20 31 20 35 20 7b 7d 20 31 20 36   4 {} 1 5 {} 1 6
19ab0 20 31 20 7b 7d 20 37 20 31 20 31 20 38 20 31 20   1 {} 7 1 1 8 1 
19ac0 6f 6e 65 20 39 20 31 20 31 20 31 30 20 31 20 31  one 9 1 1 10 1 1
19ad0 20 31 31 20 6f 6e 65 5c 0d 0a 7b 7d 20 31 32 20   11 one\..{} 12 
19ae0 6f 6e 65 20 31 20 31 33 20 6f 6e 65 20 6f 6e 65  one 1 13 one one
19af0 20 31 34 20 6f 6e 65 20 31 20 31 35 20 6f 6e 65   14 one 1 15 one
19b00 20 31 20 31 36 20 31 20 7b 7d 20 31 37 20 31 20   1 16 1 {} 17 1 
19b10 31 20 31 38 20 31 20 6f 6e 65 20 31 39 20 31 20  1 18 1 one 19 1 
19b20 31 20 32 30 20 31 20 31 5c 0d 0a 32 31 20 31 20  1 20 1 1\..21 1 
19b30 7b 7d 20 32 32 20 31 20 31 20 32 33 20 31 20 6f  {} 22 1 1 23 1 o
19b40 6e 65 20 32 34 20 31 20 31 20 32 35 20 31 20 31  ne 24 1 1 25 1 1
19b50 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  }}....##########
19b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ba0 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
19bb0 20 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36 32   {test data-1.62
19bc0 20 7b 53 45 4c 45 43 54 20 77 69 74 68 20 54 59   {SELECT with TY
19bd0 50 45 53 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  PES} -setup {.. 
19be0 20 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69   setupDb [set fi
19bf0 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 32  leName data-1.62
19c00 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  .db]..} -body {.
19c10 0a 20 20 73 65 74 20 76 61 6c 75 65 73 20 5b 6c  .  set values [l
19c20 69 73 74 20 4e 55 4c 4c 20 31 20 27 6f 6e 65 27  ist NULL 1 'one'
19c30 20 31 2e 30 20 58 27 30 31 27 5d 0d 0a 20 20 73   1.0 X'01']..  s
19c40 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 22  ql execute $db "
19c50 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
19c60 78 2c 20 79 29 3b 22 0d 0a 0d 0a 20 20 66 6f 72  x, y);"....  for
19c70 65 61 63 68 20 78 20 24 76 61 6c 75 65 73 20 7b  each x $values {
19c80 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 79 20  ..    foreach y 
19c90 24 76 61 6c 75 65 73 20 7b 0d 0a 20 20 20 20 20  $values {..     
19ca0 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db
19cb0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
19cc0 20 20 20 20 20 20 20 20 20 20 22 49 4e 53 45 52            "INSER
19cd0 54 20 49 4e 54 4f 20 74 31 20 28 78 2c 20 79 29  T INTO t1 (x, y)
19ce0 20 56 41 4c 55 45 53 28 22 20 24 78 20 22 2c 20   VALUES(" $x ", 
19cf0 22 20 24 79 20 22 29 3b 22 5d 0d 0a 20 20 20 20  " $y ");"]..    
19d00 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 71 6c 20  }..  }....  sql 
19d10 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65  execute -execute
19d20 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74 20   reader -format 
19d30 6c 69 73 74 20 2d 61 6c 6c 6f 77 6e 75 6c 6c 20  list -allownull 
19d40 74 72 75 65 20 24 64 62 20 5c 0d 0a 20 20 20 20  true $db \..    
19d50 20 20 22 54 59 50 45 53 20 49 4e 54 45 47 45 52    "TYPES INTEGER
19d60 2c 20 49 4e 54 45 47 45 52 2c 20 52 45 41 4c 3b  , INTEGER, REAL;
19d70 20 53 45 4c 45 43 54 20 72 6f 77 49 64 2c 20 78   SELECT rowId, x
19d80 2c 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  , y FROM t1 ORDE
19d90 52 20 42 59 20 72 6f 77 49 64 3b 22 0d 0a 7d 20  R BY rowId;"..} 
19da0 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
19db0 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
19dc0 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
19dd0 63 6f 6d 70 6c 61 69 6e 20 79 20 78 20 76 61 6c  complain y x val
19de0 75 65 73 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d  ues db fileName.
19df0 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
19e00 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
19e10 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
19e20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
19e30 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
19e40 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74 20  SQLite} -result 
19e50 5c 0d 0a 7b 31 20 7b 7d 20 7b 7d 20 32 20 7b 7d  \..{1 {} {} 2 {}
19e60 20 31 20 33 20 7b 7d 20 30 20 34 20 7b 7d 20 31   1 3 {} 0 4 {} 1
19e70 20 35 20 7b 7d 20 30 20 36 20 31 20 7b 7d 20 37   5 {} 0 6 1 {} 7
19e80 20 31 20 31 20 38 20 31 20 30 20 39 20 31 20 31   1 1 8 1 0 9 1 1
19e90 20 31 30 20 31 20 30 20 31 31 20 30 20 7b 7d 20   10 1 0 11 0 {} 
19ea0 31 32 5c 0d 0a 30 20 31 20 31 33 20 30 20 30 20  12\..0 1 13 0 0 
19eb0 31 34 20 30 20 31 20 31 35 20 30 20 30 20 31 36  14 0 1 15 0 0 16
19ec0 20 31 20 7b 7d 20 31 37 20 31 20 31 20 31 38 20   1 {} 17 1 1 18 
19ed0 31 20 30 20 31 39 20 31 20 31 20 32 30 20 31 20  1 0 19 1 1 20 1 
19ee0 30 20 32 31 20 30 20 7b 7d 20 32 32 20 30 20 31  0 21 0 {} 22 0 1
19ef0 20 32 33 5c 0d 0a 30 20 30 20 32 34 20 30 20 31   23\..0 0 24 0 1
19f00 20 32 35 20 30 20 30 7d 7d 0d 0a 0d 0a 23 23 23   25 0 0}}....###
19f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19f50 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
19f60 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61  runTest {test da
19f70 74 61 2d 31 2e 36 33 20 7b 53 51 4c 69 74 65 44  ta-1.63 {SQLiteD
19f80 61 74 61 52 65 61 64 65 72 20 48 61 73 52 6f 77  ataReader HasRow
19f90 73 20 70 72 6f 70 65 72 74 79 7d 20 2d 73 65 74  s property} -set
19fa0 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62 20  up {..  setupDb 
19fb0 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64 61  [set fileName da
19fc0 74 61 2d 31 2e 36 33 2e 64 62 5d 0d 0a 7d 20 2d  ta-1.63.db]..} -
19fd0 62 6f 64 79 20 7b 0d 0a 20 20 73 71 6c 20 65 78  body {..  sql ex
19fe0 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20  ecute $db {..   
19ff0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
1a000 28 78 29 3b 0d 0a 20 20 20 20 43 52 45 41 54 45  (x);..    CREATE
1a010 20 54 41 42 4c 45 20 74 32 28 78 29 3b 0d 0a 20   TABLE t2(x);.. 
1a020 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1a030 32 20 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b  2 (x) VALUES(1);
1a040 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
1a050 4c 45 20 74 33 28 78 29 3b 0d 0a 20 20 20 20 49  LE t3(x);..    I
1a060 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 28 78  NSERT INTO t3 (x
1a070 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20  ) VALUES(1);..  
1a080 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
1a090 20 28 78 29 20 56 41 4c 55 45 53 28 32 29 3b 0d   (x) VALUES(2);.
1a0a0 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  .  }....  set re
1a0b0 61 64 65 72 28 31 29 20 5b 73 71 6c 20 65 78 65  ader(1) [sql exe
1a0c0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
1a0d0 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74  ader -format dat
1a0e0 61 72 65 61 64 65 72 20 2d 61 6c 69 61 73 20 5c  areader -alias \
1a0f0 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53 45 4c  ..      $db "SEL
1a100 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 22 5d  ECT * FROM t1;"]
1a110 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72  ....  set reader
1a120 28 32 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65  (2) [sql execute
1a130 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
1a140 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
1a150 64 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  der -alias \..  
1a160 20 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20      $db "SELECT 
1a170 2a 20 46 52 4f 4d 20 74 32 3b 22 5d 0d 0a 0d 0a  * FROM t2;"]....
1a180 20 20 73 65 74 20 72 65 61 64 65 72 28 33 29 20    set reader(3) 
1a190 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
1a1a0 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
1a1b0 72 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20  rmat datareader 
1a1c0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..      
1a1d0 24 64 62 20 22 53 45 4c 45 43 54 20 2a 20 46 52  $db "SELECT * FR
1a1e0 4f 4d 20 74 33 3b 22 5d 0d 0a 0d 0a 20 20 73 65  OM t3;"]....  se
1a1f0 74 20 6e 6f 52 6f 77 20 22 2a 3a 20 4e 6f 20 63  t noRow "*: No c
1a200 75 72 72 65 6e 74 20 72 6f 77 2a 22 0d 0a 0d 0a  urrent row*"....
1a210 20 20 6c 69 73 74 20 5b 24 72 65 61 64 65 72 28    list [$reader(
1a220 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65  1) HasRows] [$re
1a230 61 64 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d  ader(2) HasRows]
1a240 20 5b 24 72 65 61 64 65 72 28 33 29 20 48 61 73   [$reader(3) Has
1a250 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  Rows] \..      [
1a260 24 72 65 61 64 65 72 28 31 29 20 52 65 61 64 5d  $reader(1) Read]
1a270 20 5b 24 72 65 61 64 65 72 28 32 29 20 52 65 61   [$reader(2) Rea
1a280 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 52  d] [$reader(3) R
1a290 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ead] \..      [$
1a2a0 72 65 61 64 65 72 28 31 29 20 48 61 73 52 6f 77  reader(1) HasRow
1a2b0 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 48  s] [$reader(2) H
1a2c0 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72  asRows] [$reader
1a2d0 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d 0a  (3) HasRows] \..
1a2e0 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1a2f0 65 61 64 65 72 28 31 29 20 49 74 65 6d 20 78 7d  eader(1) Item x}
1a300 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1a310 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1a320 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63  ror] \..      [c
1a330 61 74 63 68 20 7b 24 72 65 61 64 65 72 28 32 29  atch {$reader(2)
1a340 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20   Item x} error] 
1a350 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e  [string match $n
1a360 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a  oRow $error] \..
1a370 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72        [catch {$r
1a380 65 61 64 65 72 28 33 29 20 49 74 65 6d 20 78 7d  eader(3) Item x}
1a390 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20   error] [string 
1a3a0 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72  match $noRow $er
1a3b0 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ror] \..      [$
1a3c0 72 65 61 64 65 72 28 31 29 20 48 61 73 52 6f 77  reader(1) HasRow
1a3d0 73 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 48  s] [$reader(2) H
1a3e0 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72  asRows] [$reader
1a3f0 28 33 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d 0a  (3) HasRows] \..
1a400 20 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31        [$reader(1
1a410 29 20 52 65 61 64 5d 20 5b 24 72 65 61 64 65 72  ) Read] [$reader
1a420 28 32 29 20 52 65 61 64 5d 20 5b 24 72 65 61 64  (2) Read] [$read
1a430 65 72 28 33 29 20 52 65 61 64 5d 20 5c 0d 0a 20  er(3) Read] \.. 
1a440 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31 29       [$reader(1)
1a450 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64   HasRows] [$read
1a460 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d 20 5b  er(2) HasRows] [
1a470 24 72 65 61 64 65 72 28 33 29 20 48 61 73 52 6f  $reader(3) HasRo
1a480 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61  ws] \..      [ca
1a490 74 63 68 20 7b 24 72 65 61 64 65 72 28 31 29 20  tch {$reader(1) 
1a4a0 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b  Item x} error] [
1a4b0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f  string match $no
1a4c0 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20  Row $error] \.. 
1a4d0 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65       [catch {$re
1a4e0 61 64 65 72 28 32 29 20 49 74 65 6d 20 78 7d 20  ader(2) Item x} 
1a4f0 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d  error] [string m
1a500 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72  atch $noRow $err
1a510 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61  or] \..      [ca
1a520 74 63 68 20 7b 24 72 65 61 64 65 72 28 33 29 20  tch {$reader(3) 
1a530 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b  Item x} error] [
1a540 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f  string match $no
1a550 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20  Row $error] \.. 
1a560 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31 29       [$reader(1)
1a570 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64   HasRows] [$read
1a580 65 72 28 32 29 20 48 61 73 52 6f 77 73 5d 20 5b  er(2) HasRows] [
1a590 24 72 65 61 64 65 72 28 33 29 20 48 61 73 52 6f  $reader(3) HasRo
1a5a0 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72  ws] \..      [$r
1a5b0 65 61 64 65 72 28 31 29 20 52 65 61 64 5d 20 5b  eader(1) Read] [
1a5c0 24 72 65 61 64 65 72 28 32 29 20 52 65 61 64 5d  $reader(2) Read]
1a5d0 20 5b 24 72 65 61 64 65 72 28 33 29 20 52 65 61   [$reader(3) Rea
1a5e0 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65  d] \..      [$re
1a5f0 61 64 65 72 28 31 29 20 48 61 73 52 6f 77 73 5d  ader(1) HasRows]
1a600 20 5b 24 72 65 61 64 65 72 28 32 29 20 48 61 73   [$reader(2) Has
1a610 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 33  Rows] [$reader(3
1a620 29 20 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20  ) HasRows] \..  
1a630 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61      [catch {$rea
1a640 64 65 72 28 31 29 20 49 74 65 6d 20 78 7d 20 65  der(1) Item x} e
1a650 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61  rror] [string ma
1a660 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f  tch $noRow $erro
1a670 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74  r] \..      [cat
1a680 63 68 20 7b 24 72 65 61 64 65 72 28 32 29 20 49  ch {$reader(2) I
1a690 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73  tem x} error] [s
1a6a0 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52  tring match $noR
1a6b0 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20  ow $error] \..  
1a6c0 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61      [catch {$rea
1a6d0 64 65 72 28 33 29 20 49 74 65 6d 20 78 7d 20 65  der(3) Item x} e
1a6e0 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61  rror] [string ma
1a6f0 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f  tch $noRow $erro
1a700 72 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  r]..} -cleanup {
1a710 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
1a720 70 6c 61 69 6e 20 72 65 61 64 65 72 0d 0a 0d 0a  plain reader....
1a730 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
1a740 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
1a750 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 65 72 72   -nocomplain err
1a760 6f 72 20 6e 6f 52 6f 77 20 64 62 20 66 69 6c 65  or noRow db file
1a770 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
1a780 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d  ints \..{eagle m
1a790 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
1a7a0 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
1a7b0 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
1a7c0 44 61 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65  Data.SQLite} -re
1a7d0 73 75 6c 74 20 5c 0d 0a 7b 46 61 6c 73 65 20 54  sult \..{False T
1a7e0 72 75 65 20 54 72 75 65 20 46 61 6c 73 65 20 54  rue True False T
1a7f0 72 75 65 20 54 72 75 65 20 46 61 6c 73 65 20 54  rue True False T
1a800 72 75 65 20 54 72 75 65 20 31 20 54 72 75 65 20  rue True 1 True 
1a810 30 20 46 61 6c 73 65 20 30 20 46 61 6c 73 65 20  0 False 0 False 
1a820 46 61 6c 73 65 5c 0d 0a 54 72 75 65 20 54 72 75  False\..True Tru
1a830 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20 54 72  e False False Tr
1a840 75 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20 54  ue False False T
1a850 72 75 65 20 31 20 54 72 75 65 20 31 20 54 72 75  rue 1 True 1 Tru
1a860 65 20 30 20 46 61 6c 73 65 20 46 61 6c 73 65 20  e 0 False False 
1a870 46 61 6c 73 65 5c 0d 0a 54 72 75 65 20 46 61 6c  False\..True Fal
1a880 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20 46  se False False F
1a890 61 6c 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65  alse False False
1a8a0 20 31 20 54 72 75 65 20 31 20 54 72 75 65 20 31   1 True 1 True 1
1a8b0 20 54 72 75 65 7d 7d 0d 0a 0d 0a 23 23 23 23 23   True}}....#####
1a8c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a8d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a8e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a8f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a900 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
1a910 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
1a920 2d 31 2e 36 34 20 7b 53 51 4c 69 74 65 44 61 74  -1.64 {SQLiteDat
1a930 61 52 65 61 64 65 72 20 73 74 69 63 6b 79 20 48  aReader sticky H
1a940 61 73 52 6f 77 73 20 70 72 6f 70 65 72 74 79 7d  asRows property}
1a950 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
1a960 75 70 44 62 20 5b 73 65 74 20 66 69 6c 65 4e 61  upDb [set fileNa
1a970 6d 65 20 64 61 74 61 2d 31 2e 36 34 2e 64 62 5d  me data-1.64.db]
1a980 20 22 22 20 22 22 20 22 22 20 53 74 69 63 6b 79   "" "" "" Sticky
1a990 48 61 73 52 6f 77 73 0d 0a 7d 20 2d 62 6f 64 79  HasRows..} -body
1a9a0 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
1a9b0 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45  e $db {..    CRE
1a9c0 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29 3b  ATE TABLE t1(x);
1a9d0 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
1a9e0 4c 45 20 74 32 28 78 29 3b 0d 0a 20 20 20 20 49  LE t2(x);..    I
1a9f0 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 28 78  NSERT INTO t2 (x
1aa00 29 20 56 41 4c 55 45 53 28 31 29 3b 0d 0a 20 20  ) VALUES(1);..  
1aa10 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1aa20 33 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  3(x);..    INSER
1aa30 54 20 49 4e 54 4f 20 74 33 20 28 78 29 20 56 41  T INTO t3 (x) VA
1aa40 4c 55 45 53 28 31 29 3b 0d 0a 20 20 20 20 49 4e  LUES(1);..    IN
1aa50 53 45 52 54 20 49 4e 54 4f 20 74 33 20 28 78 29  SERT INTO t3 (x)
1aa60 20 56 41 4c 55 45 53 28 32 29 3b 0d 0a 20 20 7d   VALUES(2);..  }
1aa70 0d 0a 0d 0a 20 20 73 65 74 20 72 65 61 64 65 72  ....  set reader
1aa80 28 31 29 20 5b 73 71 6c 20 65 78 65 63 75 74 65  (1) [sql execute
1aa90 20 2d 65 78 65 63 75 74 65 20 72 65 61 64 65 72   -execute reader
1aaa0 20 2d 66 6f 72 6d 61 74 20 64 61 74 61 72 65 61   -format datarea
1aab0 64 65 72 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  der -alias \..  
1aac0 20 20 20 20 24 64 62 20 22 53 45 4c 45 43 54 20      $db "SELECT 
1aad0 2a 20 46 52 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a  * FROM t1;"]....
1aae0 20 20 73 65 74 20 72 65 61 64 65 72 28 32 29 20    set reader(2) 
1aaf0 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
1ab00 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
1ab10 72 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20  rmat datareader 
1ab20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..      
1ab30 24 64 62 20 22 53 45 4c 45 43 54 20 2a 20 46 52  $db "SELECT * FR
1ab40 4f 4d 20 74 32 3b 22 5d 0d 0a 0d 0a 20 20 73 65  OM t2;"]....  se
1ab50 74 20 72 65 61 64 65 72 28 33 29 20 5b 73 71 6c  t reader(3) [sql
1ab60 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
1ab70 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
1ab80 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69   datareader -ali
1ab90 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20  as \..      $db 
1aba0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1abb0 33 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 6e 6f  3;"]....  set no
1abc0 52 6f 77 20 22 2a 3a 20 4e 6f 20 63 75 72 72 65  Row "*: No curre
1abd0 6e 74 20 72 6f 77 2a 22 0d 0a 0d 0a 20 20 6c 69  nt row*"....  li
1abe0 73 74 20 5b 24 72 65 61 64 65 72 28 31 29 20 48  st [$reader(1) H
1abf0 61 73 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72  asRows] [$reader
1ac00 28 32 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72  (2) HasRows] [$r
1ac10 65 61 64 65 72 28 33 29 20 48 61 73 52 6f 77 73  eader(3) HasRows
1ac20 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61  ] \..      [$rea
1ac30 64 65 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72  der(1) Read] [$r
1ac40 65 61 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b  eader(2) Read] [
1ac50 24 72 65 61 64 65 72 28 33 29 20 52 65 61 64 5d  $reader(3) Read]
1ac60 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64   \..      [$read
1ac70 65 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b  er(1) HasRows] [
1ac80 24 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f  $reader(2) HasRo
1ac90 77 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20  ws] [$reader(3) 
1aca0 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20  HasRows] \..    
1acb0 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65    [catch {$reade
1acc0 72 28 31 29 20 49 74 65 6d 20 78 7d 20 65 72 72  r(1) Item x} err
1acd0 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63  or] [string matc
1ace0 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d  h $noRow $error]
1acf0 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68   \..      [catch
1ad00 20 7b 24 72 65 61 64 65 72 28 32 29 20 49 74 65   {$reader(2) Ite
1ad10 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72  m x} error] [str
1ad20 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77  ing match $noRow
1ad30 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20   $error] \..    
1ad40 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65    [catch {$reade
1ad50 72 28 33 29 20 49 74 65 6d 20 78 7d 20 65 72 72  r(3) Item x} err
1ad60 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63  or] [string matc
1ad70 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d  h $noRow $error]
1ad80 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64   \..      [$read
1ad90 65 72 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b  er(1) HasRows] [
1ada0 24 72 65 61 64 65 72 28 32 29 20 48 61 73 52 6f  $reader(2) HasRo
1adb0 77 73 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20  ws] [$reader(3) 
1adc0 48 61 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20  HasRows] \..    
1add0 20 20 5b 24 72 65 61 64 65 72 28 31 29 20 52 65    [$reader(1) Re
1ade0 61 64 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20  ad] [$reader(2) 
1adf0 52 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28 33  Read] [$reader(3
1ae00 29 20 52 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20  ) Read] \..     
1ae10 20 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73   [$reader(1) Has
1ae20 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32  Rows] [$reader(2
1ae30 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61  ) HasRows] [$rea
1ae40 64 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20  der(3) HasRows] 
1ae50 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1ae60 7b 24 72 65 61 64 65 72 28 31 29 20 49 74 65 6d  {$reader(1) Item
1ae70 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1ae80 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1ae90 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1aea0 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72   [catch {$reader
1aeb0 28 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f  (2) Item x} erro
1aec0 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  r] [string match
1aed0 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20   $noRow $error] 
1aee0 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20  \..      [catch 
1aef0 7b 24 72 65 61 64 65 72 28 33 29 20 49 74 65 6d  {$reader(3) Item
1af00 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69   x} error] [stri
1af10 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20  ng match $noRow 
1af20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20  $error] \..     
1af30 20 5b 24 72 65 61 64 65 72 28 31 29 20 48 61 73   [$reader(1) Has
1af40 52 6f 77 73 5d 20 5b 24 72 65 61 64 65 72 28 32  Rows] [$reader(2
1af50 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72 65 61  ) HasRows] [$rea
1af60 64 65 72 28 33 29 20 48 61 73 52 6f 77 73 5d 20  der(3) HasRows] 
1af70 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65  \..      [$reade
1af80 72 28 31 29 20 52 65 61 64 5d 20 5b 24 72 65 61  r(1) Read] [$rea
1af90 64 65 72 28 32 29 20 52 65 61 64 5d 20 5b 24 72  der(2) Read] [$r
1afa0 65 61 64 65 72 28 33 29 20 52 65 61 64 5d 20 5c  eader(3) Read] \
1afb0 0d 0a 20 20 20 20 20 20 5b 24 72 65 61 64 65 72  ..      [$reader
1afc0 28 31 29 20 48 61 73 52 6f 77 73 5d 20 5b 24 72  (1) HasRows] [$r
1afd0 65 61 64 65 72 28 32 29 20 48 61 73 52 6f 77 73  eader(2) HasRows
1afe0 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 48 61  ] [$reader(3) Ha
1aff0 73 52 6f 77 73 5d 20 5c 0d 0a 20 20 20 20 20 20  sRows] \..      
1b000 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
1b010 31 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  1) Item x} error
1b020 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
1b030 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c  $noRow $error] \
1b040 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
1b050 24 72 65 61 64 65 72 28 32 29 20 49 74 65 6d 20  $reader(2) Item 
1b060 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
1b070 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
1b080 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
1b090 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
1b0a0 33 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  3) Item x} error
1b0b0 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
1b0c0 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 0d 0a  $noRow $error]..
1b0d0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
1b0e0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1b0f0 6e 20 72 65 61 64 65 72 0d 0a 0d 0a 20 20 63 6c  n reader....  cl
1b100 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
1b110 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
1b120 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72 20 6e  complain error n
1b130 6f 52 6f 77 20 64 62 20 66 69 6c 65 4e 61 6d 65  oRow db fileName
1b140 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
1b150 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
1b160 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
1b170 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
1b180 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
1b190 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
1b1a0 20 5c 0d 0a 7b 46 61 6c 73 65 20 54 72 75 65 20   \..{False True 
1b1b0 54 72 75 65 20 46 61 6c 73 65 20 54 72 75 65 20  True False True 
1b1c0 54 72 75 65 20 46 61 6c 73 65 20 54 72 75 65 20  True False True 
1b1d0 54 72 75 65 20 31 20 54 72 75 65 20 30 20 46 61  True 1 True 0 Fa
1b1e0 6c 73 65 20 30 20 46 61 6c 73 65 20 46 61 6c 73  lse 0 False Fals
1b1f0 65 5c 0d 0a 54 72 75 65 20 54 72 75 65 20 46 61  e\..True True Fa
1b200 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20 46  lse False True F
1b210 61 6c 73 65 20 54 72 75 65 20 54 72 75 65 20 31  alse True True 1
1b220 20 54 72 75 65 20 31 20 54 72 75 65 20 30 20 46   True 1 True 0 F
1b230 61 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 5c  alse False True\
1b240 0d 0a 54 72 75 65 20 46 61 6c 73 65 20 46 61 6c  ..True False Fal
1b250 73 65 20 46 61 6c 73 65 20 46 61 6c 73 65 20 54  se False False T
1b260 72 75 65 20 54 72 75 65 20 31 20 54 72 75 65 20  rue True 1 True 
1b270 31 20 54 72 75 65 20 31 20 54 72 75 65 7d 7d 0d  1 True 1 True}}.
1b280 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
1b290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b2d0 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
1b2e0 65 73 74 20 64 61 74 61 2d 31 2e 36 35 20 7b 53  est data-1.65 {S
1b2f0 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
1b300 53 74 65 70 43 6f 75 6e 74 20 70 72 6f 70 65 72  StepCount proper
1b310 74 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ty} -setup {..  
1b320 73 65 74 75 70 44 62 20 5b 73 65 74 20 66 69 6c  setupDb [set fil
1b330 65 4e 61 6d 65 20 64 61 74 61 2d 31 2e 36 35 2e  eName data-1.65.
1b340 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  db]..} -body {..
1b350 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d
1b360 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45 20  b {..    CREATE 
1b370 54 41 42 4c 45 20 74 31 28 78 29 3b 0d 0a 20 20  TABLE t1(x);..  
1b380 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1b390 32 28 78 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52  2(x);..    INSER
1b3a0 54 20 49 4e 54 4f 20 74 32 20 28 78 29 20 56 41  T INTO t2 (x) VA
1b3b0 4c 55 45 53 28 31 29 3b 0d 0a 20 20 20 20 43 52  LUES(1);..    CR
1b3c0 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 78 29  EATE TABLE t3(x)
1b3d0 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ;..    INSERT IN
1b3e0 54 4f 20 74 33 20 28 78 29 20 56 41 4c 55 45 53  TO t3 (x) VALUES
1b3f0 28 31 29 3b 0d 0a 20 20 20 20 49 4e 53 45 52 54  (1);..    INSERT
1b400 20 49 4e 54 4f 20 74 33 20 28 78 29 20 56 41 4c   INTO t3 (x) VAL
1b410 55 45 53 28 32 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a  UES(2);..  }....
1b420 20 20 73 65 74 20 72 65 61 64 65 72 28 31 29 20    set reader(1) 
1b430 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
1b440 65 63 75 74 65 20 72 65 61 64 65 72 20 2d 66 6f  ecute reader -fo
1b450 72 6d 61 74 20 64 61 74 61 72 65 61 64 65 72 20  rmat datareader 
1b460 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..      
1b470 24 64 62 20 22 53 45 4c 45 43 54 20 2a 20 46 52  $db "SELECT * FR
1b480 4f 4d 20 74 31 3b 22 5d 0d 0a 0d 0a 20 20 73 65  OM t1;"]....  se
1b490 74 20 72 65 61 64 65 72 28 32 29 20 5b 73 71 6c  t reader(2) [sql
1b4a0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74   execute -execut
1b4b0 65 20 72 65 61 64 65 72 20 2d 66 6f 72 6d 61 74  e reader -format
1b4c0 20 64 61 74 61 72 65 61 64 65 72 20 2d 61 6c 69   datareader -ali
1b4d0 61 73 20 5c 0d 0a 20 20 20 20 20 20 24 64 62 20  as \..      $db 
1b4e0 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
1b4f0 32 3b 22 5d 0d 0a 0d 0a 20 20 73 65 74 20 72 65  2;"]....  set re
1b500 61 64 65 72 28 33 29 20 5b 73 71 6c 20 65 78 65  ader(3) [sql exe
1b510 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 72 65  cute -execute re
1b520 61 64 65 72 20 2d 66 6f 72 6d 61 74 20 64 61 74  ader -format dat
1b530 61 72 65 61 64 65 72 20 2d 61 6c 69 61 73 20 5c  areader -alias \
1b540 0d 0a 20 20 20 20 20 20 24 64 62 20 22 53 45 4c  ..      $db "SEL
1b550 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 22 5d  ECT * FROM t3;"]
1b560 0d 0a 0d 0a 20 20 73 65 74 20 6e 6f 52 6f 77 20  ....  set noRow 
1b570 22 2a 3a 20 4e 6f 20 63 75 72 72 65 6e 74 20 72  "*: No current r
1b580 6f 77 2a 22 0d 0a 0d 0a 20 20 6c 69 73 74 20 5b  ow*"....  list [
1b590 24 72 65 61 64 65 72 28 31 29 20 53 74 65 70 43  $reader(1) StepC
1b5a0 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 32  ount] [$reader(2
1b5b0 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72  ) StepCount] [$r
1b5c0 65 61 64 65 72 28 33 29 20 53 74 65 70 43 6f 75  eader(3) StepCou
1b5d0 6e 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72  nt] \..      [$r
1b5e0 65 61 64 65 72 28 31 29 20 52 65 61 64 5d 20 5b  eader(1) Read] [
1b5f0 24 72 65 61 64 65 72 28 32 29 20 52 65 61 64 5d  $reader(2) Read]
1b600 20 5b 24 72 65 61 64 65 72 28 33 29 20 52 65 61   [$reader(3) Rea
1b610 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 72 65  d] \..      [$re
1b620 61 64 65 72 28 31 29 20 53 74 65 70 43 6f 75 6e  ader(1) StepCoun
1b630 74 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 53  t] [$reader(2) S
1b640 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64  tepCount] [$read
1b650 65 72 28 33 29 20 53 74 65 70 43 6f 75 6e 74 5d  er(3) StepCount]
1b660 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68   \..      [catch
1b670 20 7b 24 72 65 61 64 65 72 28 31 29 20 49 74 65   {$reader(1) Ite
1b680 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72  m x} error] [str
1b690 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77  ing match $noRow
1b6a0 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20   $error] \..    
1b6b0 20 20 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65    [catch {$reade
1b6c0 72 28 32 29 20 49 74 65 6d 20 78 7d 20 65 72 72  r(2) Item x} err
1b6d0 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63  or] [string matc
1b6e0 68 20 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d  h $noRow $error]
1b6f0 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68   \..      [catch
1b700 20 7b 24 72 65 61 64 65 72 28 33 29 20 49 74 65   {$reader(3) Ite
1b710 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72  m x} error] [str
1b720 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77  ing match $noRow
1b730 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20   $error] \..    
1b740 20 20 5b 24 72 65 61 64 65 72 28 31 29 20 53 74    [$reader(1) St
1b750 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65  epCount] [$reade
1b760 72 28 32 29 20 53 74 65 70 43 6f 75 6e 74 5d 20  r(2) StepCount] 
1b770 5b 24 72 65 61 64 65 72 28 33 29 20 53 74 65 70  [$reader(3) Step
1b780 43 6f 75 6e 74 5d 20 5c 0d 0a 20 20 20 20 20 20  Count] \..      
1b790 5b 24 72 65 61 64 65 72 28 31 29 20 52 65 61 64  [$reader(1) Read
1b7a0 5d 20 5b 24 72 65 61 64 65 72 28 32 29 20 52 65  ] [$reader(2) Re
1b7b0 61 64 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20  ad] [$reader(3) 
1b7c0 52 65 61 64 5d 20 5c 0d 0a 20 20 20 20 20 20 5b  Read] \..      [
1b7d0 24 72 65 61 64 65 72 28 31 29 20 53 74 65 70 43  $reader(1) StepC
1b7e0 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65 72 28 32  ount] [$reader(2
1b7f0 29 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72  ) StepCount] [$r
1b800 65 61 64 65 72 28 33 29 20 53 74 65 70 43 6f 75  eader(3) StepCou
1b810 6e 74 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61  nt] \..      [ca
1b820 74 63 68 20 7b 24 72 65 61 64 65 72 28 31 29 20  tch {$reader(1) 
1b830 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b  Item x} error] [
1b840 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f  string match $no
1b850 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20  Row $error] \.. 
1b860 20 20 20 20 20 5b 63 61 74 63 68 20 7b 24 72 65       [catch {$re
1b870 61 64 65 72 28 32 29 20 49 74 65 6d 20 78 7d 20  ader(2) Item x} 
1b880 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e 67 20 6d  error] [string m
1b890 61 74 63 68 20 24 6e 6f 52 6f 77 20 24 65 72 72  atch $noRow $err
1b8a0 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 63 61  or] \..      [ca
1b8b0 74 63 68 20 7b 24 72 65 61 64 65 72 28 33 29 20  tch {$reader(3) 
1b8c0 49 74 65 6d 20 78 7d 20 65 72 72 6f 72 5d 20 5b  Item x} error] [
1b8d0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 6e 6f  string match $no
1b8e0 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c 0d 0a 20  Row $error] \.. 
1b8f0 20 20 20 20 20 5b 24 72 65 61 64 65 72 28 31 29       [$reader(1)
1b900 20 53 74 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65   StepCount] [$re
1b910 61 64 65 72 28 32 29 20 53 74 65 70 43 6f 75 6e  ader(2) StepCoun
1b920 74 5d 20 5b 24 72 65 61 64 65 72 28 33 29 20 53  t] [$reader(3) S
1b930 74 65 70 43 6f 75 6e 74 5d 20 5c 0d 0a 20 20 20  tepCount] \..   
1b940 20 20 20 5b 24 72 65 61 64 65 72 28 31 29 20 52     [$reader(1) R
1b950 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28 32 29  ead] [$reader(2)
1b960 20 52 65 61 64 5d 20 5b 24 72 65 61 64 65 72 28   Read] [$reader(
1b970 33 29 20 52 65 61 64 5d 20 5c 0d 0a 20 20 20 20  3) Read] \..    
1b980 20 20 5b 24 72 65 61 64 65 72 28 31 29 20 53 74    [$reader(1) St
1b990 65 70 43 6f 75 6e 74 5d 20 5b 24 72 65 61 64 65  epCount] [$reade
1b9a0 72 28 32 29 20 53 74 65 70 43 6f 75 6e 74 5d 20  r(2) StepCount] 
1b9b0 5b 24 72 65 61 64 65 72 28 33 29 20 53 74 65 70  [$reader(3) Step
1b9c0 43 6f 75 6e 74 5d 20 5c 0d 0a 20 20 20 20 20 20  Count] \..      
1b9d0 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
1b9e0 31 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  1) Item x} error
1b9f0 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
1ba00 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 20 5c  $noRow $error] \
1ba10 0d 0a 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b  ..      [catch {
1ba20 24 72 65 61 64 65 72 28 32 29 20 49 74 65 6d 20  $reader(2) Item 
1ba30 78 7d 20 65 72 72 6f 72 5d 20 5b 73 74 72 69 6e  x} error] [strin
1ba40 67 20 6d 61 74 63 68 20 24 6e 6f 52 6f 77 20 24  g match $noRow $
1ba50 65 72 72 6f 72 5d 20 5c 0d 0a 20 20 20 20 20 20  error] \..      
1ba60 5b 63 61 74 63 68 20 7b 24 72 65 61 64 65 72 28  [catch {$reader(
1ba70 33 29 20 49 74 65 6d 20 78 7d 20 65 72 72 6f 72  3) Item x} error
1ba80 5d 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20  ] [string match 
1ba90 24 6e 6f 52 6f 77 20 24 65 72 72 6f 72 5d 0d 0a  $noRow $error]..
1baa0 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
1bab0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1bac0 6e 20 72 65 61 64 65 72 0d 0a 0d 0a 20 20 63 6c  n reader....  cl
1bad0 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
1bae0 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
1baf0 63 6f 6d 70 6c 61 69 6e 20 65 72 72 6f 72 20 6e  complain error n
1bb00 6f 52 6f 77 20 64 62 20 66 69 6c 65 4e 61 6d 65  oRow db fileName
1bb10 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
1bb20 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
1bb30 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
1bb40 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
1bb50 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
1bb60 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75 6c 74  .SQLite} -result
1bb70 20 5c 0d 0a 7b 30 20 31 20 31 20 46 61 6c 73 65   \..{0 1 1 False
1bb80 20 54 72 75 65 20 54 72 75 65 20 30 20 31 20 31   True True 0 1 1
1bb90 20 31 20 54 72 75 65 20 30 20 46 61 6c 73 65 20   1 True 0 False 
1bba0 30 20 46 61 6c 73 65 20 30 20 31 20 31 20 46 61  0 False 0 1 1 Fa
1bbb0 6c 73 65 20 46 61 6c 73 65 20 54 72 75 65 20 30  lse False True 0
1bbc0 20 31 5c 0d 0a 32 20 31 20 54 72 75 65 20 31 20   1\..2 1 True 1 
1bbd0 54 72 75 65 20 30 20 46 61 6c 73 65 20 30 20 31  True 0 False 0 1
1bbe0 20 32 20 46 61 6c 73 65 20 46 61 6c 73 65 20 46   2 False False F
1bbf0 61 6c 73 65 20 30 20 31 20 32 20 31 20 54 72 75  alse 0 1 2 1 Tru
1bc00 65 20 31 20 54 72 75 65 20 31 20 54 72 75 65 7d  e 1 True 1 True}
1bc10 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
1bc20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1bc60 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
1bc70 7b 74 65 73 74 20 64 61 74 61 2d 31 2e 36 36 20  {test data-1.66 
1bc80 7b 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  {SQLiteConnectio
1bc90 6e 2e 53 65 74 43 68 75 6e 6b 53 69 7a 65 20 64  n.SetChunkSize d
1bca0 65 66 61 75 6c 74 7d 20 2d 73 65 74 75 70 20 7b  efault} -setup {
1bcb0 0d 0a 20 20 73 65 74 75 70 44 62 20 5b 73 65 74  ..  setupDb [set
1bcc0 20 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 2d 31   fileName data-1
1bcd0 2e 36 36 2e 64 62 5d 0d 0a 7d 20 2d 62 6f 64 79  .66.db]..} -body
1bce0 20 7b 0d 0a 20 20 73 71 6c 20 65 78 65 63 75 74   {..  sql execut
1bcf0 65 20 24 64 62 20 7b 0d 0a 20 20 20 20 43 52 45  e $db {..    CRE
1bd00 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
1bd10 62 29 3b 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 69  b);..  }....  fi
1bd20 6c 65 20 73 69 7a 65 20 5b 66 69 6c 65 20 6a 6f  le size [file jo
1bd30 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
1bd40 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
1bd50 61 6d 65 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ame]..} -cleanup
1bd60 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
1bd70 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
1bd80 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1bd90 20 64 62 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   db fileName..} 
1bda0 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
1bdb0 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
1bdc0 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
1bdd0 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
1bde0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1bdf0 69 74 65 7d 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  ite} -result \..
1be00 7b 32 30 34 38 7d 7d 0d 0a 0d 0a 23 23 23 23 23  {2048}}....#####
1be10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1be50 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
1be60 6e 54 65 73 74 20 7b 74 65 73 74 20 64 61 74 61  nTest {test data
1be70 2d 31 2e 36 37 20 7b 53 51 4c 69 74 65 43 6f 6e  -1.67 {SQLiteCon
1be80 6e 65 63 74 69 6f 6e 2e 53 65 74 43 68 75 6e 6b  nection.SetChunk
1be90 53 69 7a 65 20 6d 65 74 68 6f 64 7d 20 2d 73 65  Size method} -se
1bea0 74 75 70 20 7b 0d 0a 20 20 73 65 74 75 70 44 62  tup {..  setupDb
1beb0 20 5b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 64   [set fileName d
1bec0 61 74 61 2d 31 2e 36 37 2e 64 62 5d 0d 0a 7d 20  ata-1.67.db]..} 
1bed0 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 63  -body {..  set c
1bee0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62  onnection [getDb
1bef0 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20  Connection].... 
1bf00 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
1bf10 5b 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 53 65 74  [$connection Set
1bf20 43 68 75 6e 6b 53 69 7a 65 20 5b 65 78 70 72 20  ChunkSize [expr 
1bf30 7b 33 32 20 2a 20 31 30 32 34 7d 5d 5d 0d 0a 0d  {32 * 1024}]]...
1bf40 0a 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24  .  sql execute $
1bf50 64 62 20 7b 0d 0a 20 20 20 20 43 52 45 41 54 45  db {..    CREATE
1bf60 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29 3b   TABLE t1(a, b);
1bf70 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 6c 61 70 70 65  ..  }....  lappe
1bf80 6e 64 20 72 65 73 75 6c 74 20 5b 66 69 6c 65 20  nd result [file 
1bf90 73 69 7a 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  size [file join 
1bfa0 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
1bfb0 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
1bfc0 5d 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  ]]..} -cleanup {
1bfd0 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
1bfe0 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 66 72 65  ileName....  fre
1bff0 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  eDbConnection...
1c000 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
1c010 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 6e 6e  lain result conn
1c020 65 63 74 69 6f 6e 20 64 62 20 66 69 6c 65 4e 61  ection db fileNa
1c030 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
1c040 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
1c050 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
1c060 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
1c070 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
1c080 74 61 2e 53 51 4c 69 74 65 7d 20 2d 72 65 73 75  ta.SQLite} -resu
1c090 6c 74 20 5c 0d 0a 7b 4f 6b 20 33 32 37 36 38 7d  lt \..{Ok 32768}
1c0a0 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
1c0b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c0c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c0d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c0e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c0f0 23 23 23 23 0d 0a 0d 0a 72 65 70 6f 72 74 53 51  ####....reportSQ
1c100 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 74  LiteResources $t
1c110 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 23  est_channel....#
1c120 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c130 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c140 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c150 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1c170 0d 0a 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c  ..unset -nocompl
1c180 61 69 6e 20 6e 6f 72 74 68 77 69 6e 64 45 66 44  ain northwindEfD
1c190 62 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 4f 75  bFile testLinqOu
1c1a0 74 46 69 6c 65 20 74 65 73 74 45 66 36 45 78 65  tFile testEf6Exe
1c1b0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 74 65 73 74  File \..    test
1c1c0 4c 69 6e 71 45 78 65 46 69 6c 65 20 74 65 73 74  LinqExeFile test
1c1d0 45 78 65 46 69 6c 65 20 73 71 6c 69 74 65 44 65  ExeFile sqliteDe
1c1e0 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5c 0d  signerDllFile \.
1c1f0 0a 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 53  .    systemDataS
1c200 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20  QLiteEf6DllFile 
1c210 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
1c220 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20  LinqDllFile \.. 
1c230 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c     systemDataSQL
1c240 69 74 65 44 6c 6c 46 69 6c 65 20 65 6e 74 69 74  iteDllFile entit
1c250 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c  yFrameworkDllFil
1c260 65 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  e....###########
1c270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c2a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c2b0 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69 74  ####....runSQLit
1c2c0 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a 72  eTestEpilogue..r
1c2d0 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a  unTestEpilogue..