System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact bde7e22e8d748fd3937131335766db651e28ec90:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 74 6b 74 2d 65 32 33 35 61 35  .#..# tkt-e235a5
0060: 32 63 38 32 2e 65 61 67 6c 65 20 2d 2d 0d 0a 23  2c82.eagle --..#
0070: 0d 0a 23 20 57 72 69 74 74 65 6e 20 62 79 20 4a  ..# Written by J
0080: 6f 65 20 4d 69 73 74 61 63 68 6b 69 6e 2e 0d 0a  oe Mistachkin...
0090: 23 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  # Released to th
00a0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00b0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00c0: 20 72 69 73 6b 21 0d 0a 23 0d 0a 23 23 23 23 23   risk!..#..#####
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 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 61  ##########....pa
0120: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61  ckage require Ea
0130: 67 6c 65 0d 0a 70 61 63 6b 61 67 65 20 72 65 71  gle..package req
0140: 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61  uire Eagle.Libra
0150: 72 79 0d 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ry..package requ
0160: 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a  ire Eagle.Test..
0170: 0d 0a 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75  ..runTestPrologu
0180: 65 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  e....###########
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 23 23 23 23 23  ################
01d0: 23 23 23 23 0d 0a 0d 0a 70 61 63 6b 61 67 65 20  ####....package 
01e0: 72 65 71 75 69 72 65 20 53 79 73 74 65 6d 2e 44  require System.D
01f0: 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 0d  ata.SQLite.Test.
0200: 0a 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72  .runSQLiteTestPr
0210: 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23 23 23  ologue....######
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: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 66 6f 72  #########....for
0270: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c   {set i 1} {$i <
0280: 20 33 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0d 0a   3} {incr i} {..
0290: 20 20 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20    runTest {test 
02a0: 5b 61 70 70 65 6e 64 41 72 67 73 20 74 6b 74 2d  [appendArgs tkt-
02b0: 65 32 33 35 61 35 32 63 38 32 2d 31 2e 20 24 69  e235a52c82-1. $i
02c0: 5d 20 7b 69 73 6f 6c 61 74 69 6f 6e 20 6c 65 76  ] {isolation lev
02d0: 65 6c 7d 20 5c 0d 0a 20 20 20 20 20 20 2d 73 65  el} \..      -se
02e0: 74 75 70 20 7b 0d 0a 20 20 20 20 73 65 74 20 66  tup {..    set f
02f0: 69 6c 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41  ileName [appendA
0300: 72 67 73 20 74 6b 74 2d 65 32 33 35 61 35 32 63  rgs tkt-e235a52c
0310: 38 32 2d 31 2e 20 24 69 20 2e 64 62 5d 0d 0a 20  82-1. $i .db].. 
0320: 20 20 20 73 65 74 20 69 73 6f 6c 61 74 69 6f 6e     set isolation
0330: 4c 65 76 65 6c 20 5b 65 78 70 72 20 7b 24 69 20  Level [expr {$i 
0340: 3d 3d 20 31 20 3f 20 22 52 65 61 64 43 6f 6d 6d  == 1 ? "ReadComm
0350: 69 74 74 65 64 22 20 3a 20 22 53 65 72 69 61 6c  itted" : "Serial
0360: 69 7a 61 62 6c 65 22 7d 5d 0d 0a 20 20 7d 20 2d  izable"}]..  } -
0370: 62 6f 64 79 20 7b 0d 0a 20 20 20 20 73 65 74 75  body {..    setu
0380: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
0390: 0a 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65  .    sql execute
03a0: 20 24 64 62 20 7b 0d 0a 20 20 20 20 20 20 43 52   $db {..      CR
03b0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 29  EATE TABLE t1(x)
03c0: 3b 0d 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  ;..      INSERT 
03d0: 49 4e 54 4f 20 74 31 20 28 78 29 20 56 41 4c 55  INTO t1 (x) VALU
03e0: 45 53 28 27 31 27 29 3b 0d 0a 20 20 20 20 20 20  ES('1');..      
03f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
0400: 78 29 20 56 41 4c 55 45 53 28 27 32 27 29 3b 0d  x) VALUES('2');.
0410: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 63 6c  .    }....    cl
0420: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
0430: 65 20 64 62 20 74 72 75 65 20 66 61 6c 73 65 20  e db true false 
0440: 66 61 6c 73 65 0d 0a 0d 0a 20 20 20 20 73 65 74  false....    set
0450: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
0460: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
0470: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
0480: 0d 0a 20 20 20 20 73 65 74 20 64 61 74 61 53 6f  ..    set dataSo
0490: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
04a0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
04b0: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
04c0: 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 73 71 6c  ]....    set sql
04d0: 20 7b 20 5c 0d 0a 20 20 20 20 20 20 53 45 4c 45   { \..      SELE
04e0: 43 54 20 78 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT x FROM t1 ORD
04f0: 45 52 20 42 59 20 78 3b 20 5c 0d 0a 20 20 20 20  ER BY x; \..    
0500: 7d 0d 0a 0d 0a 20 20 20 20 75 6e 73 65 74 20 2d  }....    unset -
0510: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
0520: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 20  ts errors....   
0530: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
0540: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
0550: 62 73 74 20 7b 0d 0a 20 20 20 20 20 20 75 73 69  bst {..      usi
0560: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
0570: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
0580: 61 74 61 3b 0d 0a 20 20 20 20 20 20 75 73 69 6e  ata;..      usin
0590: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
05a0: 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 6e  Lite;....      n
05b0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
05c0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d  c${id}..      {.
05d0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
05e0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 51 75 65  sealed class Que
05f0: 72 79 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 20  ry${id}..       
0600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 70 72   {..          pr
0610: 69 76 61 74 65 20 49 44 62 43 6f 6e 6e 65 63 74  ivate IDbConnect
0620: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 3b 0d  ion connection;.
0630: 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61  .          priva
0640: 74 65 20 49 44 62 54 72 61 6e 73 61 63 74 69 6f  te IDbTransactio
0650: 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 3b 0d 0a  n transaction;..
0660: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
0670: 65 20 62 6f 6f 6c 20 6f 70 65 6e 65 64 3b 0d 0a  e bool opened;..
0680: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ..          ////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 70  /....          p
06e0: 72 69 76 61 74 65 20 76 6f 69 64 20 45 6e 73 75  rivate void Ensu
06f0: 72 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0d 0a  reConnection()..
0700: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0710: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
0720: 6e 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  nection == null)
0730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
0740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
0750: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
0760: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
0770: 28 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b  ("Data Source=${
0780: 64 61 74 61 53 6f 75 72 63 65 7d 3b 22 20 2b 0d  dataSource};" +.
0790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
07a0: 20 20 20 22 44 65 66 61 75 6c 74 20 49 73 6f 6c     "Default Isol
07b0: 61 74 69 6f 6e 4c 65 76 65 6c 3d 24 7b 69 73 6f  ationLevel=${iso
07c0: 6c 61 74 69 6f 6e 4c 65 76 65 6c 7d 3b 22 29 3b  lationLevel};");
07d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
07e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
07f0: 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 53 74  f (connection.St
0800: 61 74 65 20 3d 3d 20 43 6f 6e 6e 65 63 74 69 6f  ate == Connectio
0810: 6e 53 74 61 74 65 2e 43 6c 6f 73 65 64 29 0d 0a  nState.Closed)..
0820: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
0840: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
0850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f  .              o
0860: 70 65 6e 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  pened = true;.. 
0870: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
0880: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0890: 74 72 61 6e 73 61 63 74 69 6f 6e 20 3d 3d 20 6e  transaction == n
08a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
08b0: 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20      transaction 
08c0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 42 65 67  = connection.Beg
08d0: 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 29 3b  inTransaction();
08e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
08f0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  .          /////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 70 72  ....          pr
0950: 69 76 61 74 65 20 76 6f 69 64 20 52 65 6c 65 61  ivate void Relea
0960: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0d 0a  seConnection()..
0970: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0980: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
0990: 6e 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  nection == null)
09a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
09b0: 74 68 72 6f 77 20 6e 65 77 20 45 78 63 65 70 74  throw new Except
09c0: 69 6f 6e 28 22 63 61 6e 6e 6f 74 20 72 65 6c 65  ion("cannot rele
09d0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 22 29  ase connection")
09e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
09f0: 20 69 66 20 28 6f 70 65 6e 65 64 29 0d 0a 20 20   if (opened)..  
0a00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0a10: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
0a20: 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a  ction.Close();..
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
0a40: 65 6e 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  ened = false;.. 
0a50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
0a60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
0a70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0ac0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
0ad0: 65 20 49 44 62 43 6f 6d 6d 61 6e 64 20 43 72 65  e IDbCommand Cre
0ae0: 61 74 65 43 6f 6d 6d 61 6e 64 28 0d 0a 20 20 20  ateCommand(..   
0af0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
0b00: 63 6f 6d 6d 61 6e 64 54 65 78 74 0d 0a 20 20 20  commandText..   
0b10: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
0b20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0b30: 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
0b40: 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
0b60: 77 20 6e 65 77 20 45 78 63 65 70 74 69 6f 6e 28  w new Exception(
0b70: 22 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 63  "cannot create c
0b80: 6f 6d 6d 61 6e 64 22 29 3b 0d 0a 0d 0a 20 20 20  ommand");....   
0b90: 20 20 20 20 20 20 20 20 20 49 44 62 43 6f 6d 6d           IDbComm
0ba0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
0bb0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
0bc0: 6f 6d 6d 61 6e 64 28 29 3b 0d 0a 20 20 20 20 20  ommand();..     
0bd0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
0be0: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 63 6f 6d  ommandText = com
0bf0: 6d 61 6e 64 54 65 78 74 3b 0d 0a 0d 0a 20 20 20  mandText;....   
0c00: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
0c10: 63 6f 6d 6d 61 6e 64 3b 0d 0a 20 20 20 20 20 20  command;..      
0c20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
0c30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c70: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0c80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a        public obj
0c90: 65 63 74 20 45 78 65 63 75 74 65 52 65 61 64 65  ect ExecuteReade
0ca0: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
0cb0: 73 74 72 69 6e 67 20 63 6f 6d 6d 61 6e 64 54 65  string commandTe
0cc0: 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  xt..            
0cd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
0cf0: 63 74 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  ct result;..    
0d00: 20 20 20 20 20 20 20 20 45 6e 73 75 72 65 43 6f          EnsureCo
0d10: 6e 6e 65 63 74 69 6f 6e 28 29 3b 0d 0a 20 20 20  nnection();..   
0d20: 20 20 20 20 20 20 20 20 20 49 44 61 74 61 52 65           IDataRe
0d30: 61 64 65 72 20 72 65 61 64 65 72 20 3d 20 6e 75  ader reader = nu
0d40: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
0d50: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
0d60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0d70: 20 20 20 20 20 72 65 61 64 65 72 20 3d 20 43 72       reader = Cr
0d80: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 63 6f 6d 6d  eateCommand(comm
0d90: 61 6e 64 54 65 78 74 29 2e 45 78 65 63 75 74 65  andText).Execute
0da0: 52 65 61 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  Reader();..     
0db0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
0dc0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
0dd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
0de0: 20 20 20 20 20 20 20 20 20 20 52 65 6c 65 61 73            Releas
0df0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 3b 0d 0a  eConnection();..
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
0e10: 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  row;..          
0e20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0e30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0e80: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
0e90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0ea0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
0eb0: 20 72 65 61 64 65 72 2e 47 65 74 56 61 6c 75 65   reader.GetValue
0ec0: 28 30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  (0);..          
0ed0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
0ee0: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
0ef0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0f00: 20 20 20 20 20 72 65 61 64 65 72 2e 44 69 73 70       reader.Disp
0f10: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
0f20: 20 20 20 20 20 20 52 65 6c 65 61 73 65 43 6f 6e        ReleaseCon
0f30: 6e 65 63 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20  nection();..    
0f40: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b            throw;
0f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
0f60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
0f70: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
0f80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0f90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
0fa0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0ff0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1000: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
1010: 7d 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  }..        {..  
1020: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1030: 74 61 74 69 63 20 73 74 72 69 6e 67 5c 5b 5c 5d  tatic string\[\]
1040: 20 47 65 74 44 61 74 61 28 29 0d 0a 20 20 20 20   GetData()..    
1050: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1060: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
1070: 73 74 72 69 6e 67 5c 5b 5c 5d 20 7b 0d 0a 20 20  string\[\] {..  
1080: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1090: 51 75 65 72 79 24 7b 69 64 7d 28 29 2e 45 78 65  Query${id}().Exe
10a0: 63 75 74 65 52 65 61 64 65 72 28 22 24 7b 73 71  cuteReader("${sq
10b0: 6c 7d 22 29 2e 54 6f 53 74 72 69 6e 67 28 29 2c  l}").ToString(),
10c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10d0: 6e 65 77 20 51 75 65 72 79 24 7b 69 64 7d 28 29  new Query${id}()
10e0: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 22  .ExecuteReader("
10f0: 24 7b 73 71 6c 7d 22 29 2e 54 6f 53 74 72 69 6e  ${sql}").ToStrin
1100: 67 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g()..           
1110: 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d   };..          }
1120: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f  ....          //
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1180: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
1190: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
11a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11b0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
11c0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ng...          }
11d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
11e0: 20 20 20 7d 0d 0a 20 20 20 20 7d 5d 20 74 72 75     }..    }] tru
11f0: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
1200: 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65  lts errors Syste
1210: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1220: 6c 5d 0d 0a 0d 0a 20 20 20 20 6c 69 73 74 20 24  l]....    list $
1230: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
1240: 0a 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b  .        [expr {
1250: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
1260: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
1270: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20   ""}] \..       
1280: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
1290: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
12b0: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
12c0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
12d0: 7d 20 47 65 74 44 61 74 61 0d 0a 20 20 20 20 20  } GetData..     
12e0: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
12f0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
1300: 20 24 72 65 73 75 6c 74 0d 0a 20 20 7d 20 2d 63   $result..  } -c
1310: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 20 20 63 6c  leanup {..    cl
1320: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
1330: 65 0d 0a 0d 0a 20 20 20 20 75 6e 73 65 74 20 2d  e....    unset -
1340: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
1350: 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  t results errors
1360: 20 63 6f 64 65 20 73 71 6c 20 64 61 74 61 53 6f   code sql dataSo
1370: 75 72 63 65 20 69 64 20 64 62 20 5c 0d 0a 20 20  urce id db \..  
1380: 20 20 20 20 20 20 69 73 6f 6c 61 74 69 6f 6e 4c        isolationL
1390: 65 76 65 6c 20 66 69 6c 65 4e 61 6d 65 0d 0a 20  evel fileName.. 
13a0: 20 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20   } -constraints 
13b0: 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
13c0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
13d0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
13e0: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
13f0: 51 4c 69 74 65 7d 20 2d 6d 61 74 63 68 20 72 65  QLite} -match re
1400: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 65 78  gexp -result [ex
1410: 70 72 20 7b 24 69 20 3d 3d 20 31 20 3f 20 7b 5e  pr {$i == 1 ? {^
1420: 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65  Ok\..System#Code
1430: 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d  Dom#Compiler#Com
1440: 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b  pilerResults#\d+
1450: 20 5c 7b 5c 7d 20 30 20 5c 7b 31 20 31 5c 7d 24   \{\} 0 \{1 1\}$
1460: 7d 20 3a 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65  } : {^Ok\..Syste
1470: 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c  m#CodeDom#Compil
1480: 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c  er#CompilerResul
1490: 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 31 5c 0d 0a  ts#\d+ \{\} 1\..
14a0: 5c 7b 53 79 73 74 65 6d 5c 2e 52 65 66 6c 65 63  \{System\.Reflec
14b0: 74 69 6f 6e 5c 2e 54 61 72 67 65 74 49 6e 76 6f  tion\.TargetInvo
14c0: 63 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 3a  cationException:
14d0: 20 45 78 63 65 70 74 69 6f 6e 20 68 61 73 20 62   Exception has b
14e0: 65 65 6e 20 74 68 72 6f 77 6e 20 62 79 5c 0d 0a  een thrown by\..
14f0: 74 68 65 20 74 61 72 67 65 74 20 6f 66 20 61 6e  the target of an
1500: 20 69 6e 76 6f 63 61 74 69 6f 6e 5c 2e 20 2d 2d   invocation\. --
1510: 2d 3e 20 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c  -> System\.Data\
1520: 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45  .SQLite\.SQLiteE
1530: 78 63 65 70 74 69 6f 6e 3a 5c 0d 0a 64 61 74 61  xception:\..data
1540: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 2e 2a  base is locked.*
1550: 24 7d 7d 5d 7d 0d 0a 7d 0d 0a 0d 0a 23 23 23 23  $}}]}..}....####
1560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15a0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 75  ###########....u
15b0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
15c0: 20 69 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23   i....##########
15d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1610: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69  #####....runSQLi
1620: 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a  teTestEpilogue..
1630: 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65 0d  runTestEpilogue.
1640: 0a                                               .