System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 694ef77ed90c40e08e04aaa27d37bf47ad435fbb:


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 76 74 61 62 2e 65 61 67 6c 65  .#..# vtab.eagle
0060: 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74 74 65   --..#..# Writte
0070: 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61 63 68  n by Joe Mistach
0080: 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73 65 64  kin...# Released
0090: 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64   to the public d
00a0: 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f  omain, use at yo
00b0: 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 23 0d  ur own risk!..#.
00c0: 0a 23 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: 0d 0a 0d 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ....package requ
0120: 69 72 65 20 45 61 67 6c 65 0d 0a 70 61 63 6b 61  ire Eagle..packa
0130: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
0140: 2e 4c 69 62 72 61 72 79 0d 0a 70 61 63 6b 61 67  .Library..packag
0150: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
0160: 54 65 73 74 0d 0a 0d 0a 72 75 6e 54 65 73 74 50  Test....runTestP
0170: 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23 23  rologue....#####
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 0d 0a 0d 0a 70 61  ##########....pa
01d0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 53 79  ckage require Sy
01e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
01f0: 2e 54 65 73 74 0d 0a 72 75 6e 53 51 4c 69 74 65  .Test..runSQLite
0200: 54 65 73 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a  TestPrologue....
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0260: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
0270: 20 76 74 61 62 2d 31 2e 31 20 7b 62 61 73 69 63   vtab-1.1 {basic
0280: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
0290: 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b  upport} -setup {
02a0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
02b0: 20 76 74 61 62 2d 31 2e 31 2e 64 62 0d 0a 7d 20   vtab-1.1.db..} 
02c0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
02d0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
02e0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
02f0: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
0300: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
0310: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
0320: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
0330: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
0340: 0a 20 20 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a  .  set sql { \..
0350: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
0360: 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20  AL TABLE t${id} 
0370: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
0380: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
0390: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
03a0: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
03b0: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
03c0: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
03d0: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
03e0: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
03f0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
0400: 2e 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20  .SQLite;....    
0410: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
0420: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
0430: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
0440: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
0450: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
0460: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f  : SQLiteModuleNo
0470: 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  op..      {..   
0480: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
0490: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
04a0: 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a  }(string name)..
04b0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
04c0: 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  (name)..        
04d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
04e0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
04f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
0500: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0550: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
0560: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
0570: 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20  Code Create(..  
0580: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
0590: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
05a0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
05b0: 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
05c0: 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ta,..          s
05d0: 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65  tring\[\] argume
05e0: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nts,..          
05f0: 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
0600: 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
0610: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
0620: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
0630: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
0640: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  {..          SQL
0650: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
0660: 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d  = DeclareTable(.
0670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
0680: 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45  nection, "CREATE
0690: 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78   TABLE ignored(x
06a0: 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  );", ref error);
06b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
06c0: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
06d0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
06e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
06f0: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
0700: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
0710: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
0720: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
0730: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
0740: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
0750: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
0760: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
0770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
07c0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
07d0: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
07e0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
07f0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
0800: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
0810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0820: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
0830: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
0840: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
0850: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
0860: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
0870: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
0880: 6f 75 72 63 65 7d 3b 22 29 29 0d 0a 20 20 20 20  ource};"))..    
0890: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
08a0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
08b0: 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20  Open();..       
08c0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
08d0: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77  CreateModule(new
08e0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
08f0: 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d  t${id}("mod${id}
0900: 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "));....        
0910: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
0920: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
0930: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
0940: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
0950: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
0970: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
0980: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
0990: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
09a0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
09b0: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
09d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
09e0: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
09f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
0a00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
0a10: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
0a20: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
0a30: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73  sults errors Sys
0a40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
0a50: 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  dll]....  list $
0a60: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
0a70: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  .      [expr {[i
0a80: 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72  nfo exists error
0a90: 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22  s] ? $errors : "
0aa0: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  "}] \..      [ex
0ab0: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
0ac0: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
0ad0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
0ae0: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
0af0: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61 69 6e  }.Test${id} Main
0b00: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
0b10: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
0b20: 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d  ""]}] $result..}
0b30: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
0b40: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
0b50: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
0b60: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
0b70: 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72   code results er
0b80: 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75  rors sql dataSou
0b90: 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d  rce id fileName.
0ba0: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
0bb0: 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75  \..{eagle monoBu
0bc0: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
0bd0: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
0be0: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
0bf0: 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43  SQLite\..defineC
0c00: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
0c10: 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
0c20: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0c30: 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
0c40: 2d 72 65 73 75 6c 74 20 5c 0d 0a 7b 5e 4f 6b 20  -result \..{^Ok 
0c50: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
0c60: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
0c70: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
0c80: 20 30 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23   0 \{\}$}}....##
0c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0ca0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
0ce0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
0cf0: 74 61 62 2d 31 2e 32 20 7b 49 45 6e 75 6d 65 72  tab-1.2 {IEnumer
0d00: 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74 61 62  able virtual tab
0d10: 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  le} -setup {..  
0d20: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
0d30: 62 2d 31 2e 32 2e 64 62 0d 0a 7d 20 2d 62 6f 64  b-1.2.db..} -bod
0d40: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
0d50: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
0d60: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
0d70: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
0d80: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
0d90: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
0da0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
0db0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
0dc0: 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20  et sql(1) { \.. 
0dd0: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
0de0: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
0df0: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
0e00: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
0e10: 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(2) { \..    S
0e20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 24 7b  ELECT * FROM t${
0e30: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
0e40: 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d   set sql(3) { \.
0e50: 0a 20 20 20 20 55 50 44 41 54 45 20 74 24 7b 69  .    UPDATE t${i
0e60: 64 7d 20 53 45 54 20 78 20 3d 20 31 3b 20 5c 0d  d} SET x = 1; \.
0e70: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
0e80: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
0e90: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
0ea0: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
0eb0: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
0ec0: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
0ed0: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
0ee0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
0ef0: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
0f00: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
0f10: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
0f20: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
0f30: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
0f40: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
0f50: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73  static class Tes
0f60: 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d  t${id}..      {.
0f70: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
0f80: 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73  static StringLis
0f90: 74 20 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73  t GetList(params
0fa0: 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69   string\[\] stri
0fb0: 6e 67 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ngs)..        {.
0fc0: 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e  .          Strin
0fd0: 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e  gList result = n
0fe0: 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
0ff0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73  ....          us
1000: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65  ing (SQLiteConne
1010: 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
1020: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
1030: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
1040: 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f          "Data So
1050: 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63  urce=${dataSourc
1060: 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20 20 20  e};"))..        
1070: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1080: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
1090: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
10a0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
10b0: 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53  eateModule(new S
10c0: 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65  QLiteModuleEnume
10d0: 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  rable(..        
10e0: 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22        "mod${id}"
10f0: 2c 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a  , strings));....
1100: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1110: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
1120: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
1130: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
1140: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
1150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1160: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
1170: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
1180: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
1190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
11a0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
11b0: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
11c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11d0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
11e0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
11f0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
1200: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
1210: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1230: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
1240: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
1250: 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(2)}]";.... 
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1270: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
1280: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
1290: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
12a0: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
12b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
12d0: 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52  le (dataReader.R
12e0: 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
12f0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1300: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
1310: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
1320: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1330: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1340: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1350: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
1360: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
1370: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
1380: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
1390: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13a0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
13b0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
13c0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
13d0: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
13e0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
13f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1400: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
1410: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
1420: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
1430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1440: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51         catch (SQ
1450: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29  LiteException e)
1460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1480: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
1490: 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72  ResultCode.ToStr
14a0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
14b0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
14c0: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
14d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
14e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
1500: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
1510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
1520: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
1530: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
1540: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1550: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
15a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
15b0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
15c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15d0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
15e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
15f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1600: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
1610: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
1620: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
1630: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
1640: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
1650: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
1660: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
1670: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
1680: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
1690: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
16a0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
16b0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
16c0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
16d0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
16e0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
16f0: 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74  d} GetList one t
1700: 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a  wo three 4 5.0..
1710: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
1720: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
1730: 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d  ]}] $result..} -
1740: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
1750: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
1760: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
1770: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63  omplain result c
1780: 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ode results erro
1790: 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63  rs sql dataSourc
17a0: 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  e id fileName..}
17b0: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d   -constraints \.
17c0: 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32  .{eagle monoBug2
17d0: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
17e0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
17f0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
1800: 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e  Lite\..defineCon
1810: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
1820: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
1830: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 7d 20  _VIRTUAL_TABLE} 
1840: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
1850: 65 73 75 6c 74 20 5c 0d 0a 5b 73 74 72 69 6e 67  esult \..[string
1860: 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72   map [list \n \r
1870: 5c 6e 5d 20 7b 5e 4f 6b 20 53 79 73 74 65 6d 23  \n] {^Ok System#
1880: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
1890: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
18a0: 23 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20 30 20 5c 7b  #\d+\..\{\} 0 \{
18b0: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20  one two three 4 
18c0: 35 2e 30 20 45 72 72 6f 72 20 5c 7b 53 51 4c 20  5.0 Error \{SQL 
18d0: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
18e0: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 0d  issing database.
18f0: 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22  .virtual table "
1900: 74 5c 64 2b 22 20 69 73 20 72 65 61 64 2d 6f 6e  t\d+" is read-on
1910: 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  ly\}\}$}]}....##
1920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1960: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
1970: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
1980: 74 61 62 2d 31 2e 33 20 7b 49 45 6e 75 6d 65 72  tab-1.3 {IEnumer
1990: 61 62 6c 65 3c 54 3e 20 76 69 72 74 75 61 6c 20  able<T> virtual 
19a0: 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d  table} -setup {.
19b0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
19c0: 76 74 61 62 2d 31 2e 33 2e 64 62 0d 0a 7d 20 2d  vtab-1.3.db..} -
19d0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
19e0: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
19f0: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
1a00: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
1a10: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
1a20: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
1a30: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
1a40: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
1a50: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
1a60: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ..    CREATE VIR
1a70: 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64  TUAL TABLE t${id
1a80: 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d  } USING mod${id}
1a90: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
1aa0: 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20  t sql(2) { \..  
1ab0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1ac0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
1ad0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
1ae0: 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74   \..    UPDATE t
1af0: 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b  ${id} SET x = 1;
1b00: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
1b10: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
1b20: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
1b30: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
1b40: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
1b50: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
1b60: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
1b70: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
1b80: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
1b90: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
1ba0: 2e 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63 3b  .SQLite.Generic;
1bb0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
1bc0: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
1bd0: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
1be0: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
1bf0: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
1c00: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1c10: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
1c20: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
1c30: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1c40: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
1c50: 69 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c 5b  ist(params int\[
1c60: 5c 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20 20  \] integers)..  
1c70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c80: 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65     StringList re
1c90: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
1ca0: 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
1cb0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
1cc0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
1cd0: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
1ce0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
1cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d00: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
1d10: 61 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a  ataSource};"))..
1d20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d30: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
1d40: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
1d50: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
1d60: 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75  ction.CreateModu
1d70: 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64  le(new SQLiteMod
1d80: 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69 6e  uleEnumerable<in
1d90: 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t>(..           
1da0: 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 69     "mod${id}", i
1db0: 6e 74 65 67 65 72 73 29 29 3b 0d 0a 0d 0a 20 20  ntegers));....  
1dc0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
1dd0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
1de0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
1df0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
1e00: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
1e10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e20: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
1e30: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
1e40: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
1e60: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
1e70: 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  uery();..       
1e80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e90: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
1ea0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
1eb0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
1ec0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
1ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
1ef0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
1f00: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
1f10: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(2)}]";....   
1f20: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
1f30: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
1f40: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
1f50: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
1f60: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
1f70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f80: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
1f90: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
1fa0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
1fb0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
1fc0: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
1fd0: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
1fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2000: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2010: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
2020: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
2030: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
2040: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
2050: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2060: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
2070: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
2080: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
2090: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
20a0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
20b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20c0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
20d0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
20e0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
20f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2100: 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69       catch (SQLi
2110: 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a  teException e)..
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2140: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65   result.Add(e.Re
2150: 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e  sultCode.ToStrin
2160: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
2170: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
2180: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
21c0: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
21d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
21e0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
21f0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
2200: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2260: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2270: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
2280: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2290: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
22a0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
22b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
22c0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
22d0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
22e0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
22f0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
2300: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
2310: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
2320: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
2330: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
2340: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
2350: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
2360: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
2370: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
2380: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
2390: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
23a0: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
23b0: 20 47 65 74 4c 69 73 74 20 31 20 32 20 33 20 34   GetList 1 2 3 4
23c0: 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75   5..      } resu
23d0: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
23e0: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
23f0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
2400: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
2410: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
2420: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
2430: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
2440: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
2450: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
2460: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
2470: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
2480: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
2490: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
24a0: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
24b0: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
24c0: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
24d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
24e0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
24f0: 4c 45 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78  LE} -match regex
2500: 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 5b 73 74  p -result \..[st
2510: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
2520: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20 53 79 73  n \r\n] {^Ok Sys
2530: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
2540: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
2550: 75 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20  ults#\d+\..\{\} 
2560: 30 20 5c 7b 31 20 32 20 33 20 34 20 35 20 45 72  0 \{1 2 3 4 5 Er
2570: 72 6f 72 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  ror \{SQL logic 
2580: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
2590: 20 64 61 74 61 62 61 73 65 0d 0a 76 69 72 74 75   database..virtu
25a0: 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22 20  al table "t\d+" 
25b0: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d  is read-only\}\}
25c0: 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  $}]}....########
25d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2610: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
2620: 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e  st {test vtab-1.
2630: 34 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  4 {virtual table
2640: 20 66 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f 72   function suppor
2650: 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  t} -setup {..  s
2660: 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62  et fileName vtab
2670: 2d 31 2e 34 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.4.db..} -body
2680: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
2690: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
26a0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
26b0: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
26c0: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
26d0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
26e0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
26f0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
2700: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
2710: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
2720: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
2730: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
2740: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
2750: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
2760: 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43  LECT Base64(x, C
2770: 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f  AST('one' AS BLO
2780: 42 29 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  B)) FROM t${id};
2790: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
27a0: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
27b0: 20 53 45 4c 45 43 54 20 42 61 73 65 36 34 28 78   SELECT Base64(x
27c0: 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20  , CAST('one' AS 
27d0: 42 4c 4f 42 29 2c 20 27 74 77 6f 27 29 20 46 52  BLOB), 'two') FR
27e0: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
27f0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 34  }....  set sql(4
2800: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
2810: 54 20 42 61 73 65 36 35 28 78 2c 20 43 41 53 54  T Base65(x, CAST
2820: 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29  ('one' AS BLOB))
2830: 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d   FROM t${id}; \.
2840: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
2850: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
2860: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
2870: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
2880: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
2890: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
28a0: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
28b0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
28c0: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
28d0: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
28e0: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
28f0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
2900: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
2910: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
2920: 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63  class SQLiteFunc
2930: 74 69 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c 69  tion${id} : SQLi
2940: 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  teFunction..    
2950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
2960: 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69  lic SQLiteFuncti
2970: 6f 6e 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20 20  on${id}()..     
2980: 20 20 20 20 20 3a 20 62 61 73 65 28 53 51 4c 69       : base(SQLi
2990: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65  teDateFormats.De
29a0: 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b  fault, DateTimeK
29b0: 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 2c  ind.Unspecified,
29c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d0: 20 20 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 0d     null, false).
29e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
29f0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2a00: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
2a10: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
2a70: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
2a80: 6a 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20  ject Invoke(..  
2a90: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b          object\[
2aa0: 5c 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20  \] args..       
2ab0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2ac0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
2ad0: 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
2ae0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2af0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2b00: 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e      if (args.Len
2b10: 67 74 68 20 21 3d 20 32 29 0d 0a 20 20 20 20 20  gth != 2)..     
2b20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
2b30: 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
2b40: 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ion(String.Forma
2b50: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2b60: 20 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20    "need exactly 
2b70: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 67  two arguments, g
2b80: 6f 74 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c 65  ot {0}", args.Le
2b90: 6e 67 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ngth));....     
2ba0: 20 20 20 20 20 6f 62 6a 65 63 74 20 61 72 67 20       object arg 
2bb0: 3d 20 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a  = args\[1\];....
2bc0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
2bd0: 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  g == null)..    
2be0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2bf0: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
2c00: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
2c10: 79 70 65 20 3d 20 61 72 67 2e 47 65 74 54 79 70  ype = arg.GetTyp
2c20: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
2c30: 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79    if (type == ty
2c40: 70 65 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a 20  peof(DBNull)).. 
2c50: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c60: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
2c70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
2c80: 28 74 79 70 65 20 21 3d 20 74 79 70 65 6f 66 28  (type != typeof(
2c90: 62 79 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20  byte\[\]))..    
2ca0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2cb0: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
2cc0: 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d  tion(String.Form
2cd0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2ce0: 20 20 20 22 61 72 67 75 6d 65 6e 74 20 6d 75 73     "argument mus
2cf0: 74 20 62 65 20 62 79 74 65 20 61 72 72 61 79 2c  t be byte array,
2d00: 20 67 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65 29   got {0}", type)
2d10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d20: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
2d30: 6f 42 61 73 65 36 34 53 74 72 69 6e 67 28 28 62  oBase64String((b
2d40: 79 74 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a  yte\[\]) arg);..
2d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
2dc0: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
2dd0: 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ss SQLiteModuleT
2de0: 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74  est${id} : SQLit
2df0: 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20  eModuleNoop..   
2e00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
2e10: 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
2e20: 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69 6e  eTest${id}(strin
2e30: 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  g name)..       
2e40: 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29 0d     : base(name).
2e50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2e60: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2e70: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
2e80: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
2ee0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51  blic override SQ
2ef0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
2f00: 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
2f10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2f20: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20  n connection,.. 
2f30: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2f40: 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  pClientData,..  
2f50: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c 5b          string\[
2f60: 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20  \] arguments,.. 
2f70: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
2f80: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
2f90: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
2fa0: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2fb0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  or..          ).
2fc0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2fd0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
2fe0: 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c 61  rCode rc = Decla
2ff0: 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  reTable(..      
3000: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
3010: 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  , "CREATE TABLE 
3020: 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72 65  ignored(x);", re
3030: 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  f error);....   
3040: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d         if (rc !=
3050: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
3060: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
3070: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a    return rc;....
3080: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 44            rc = D
3090: 65 63 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28 63  eclareFunction(c
30a0: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20 22  onnection, -1, "
30b0: 42 61 73 65 36 34 22 2c 20 72 65 66 20 65 72 72  Base64", ref err
30c0: 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
30d0: 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69    if (rc != SQLi
30e0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
30f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3100: 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  urn rc;....     
3110: 20 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77       table = new
3120: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
3130: 62 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d  ble(arguments);.
3140: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3150: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
3160: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  e.Ok;..        }
3170: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
31d0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
31e0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f  QLiteErrorCode O
31f0: 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
3200: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
3210: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
3220: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
3230: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
3240: 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20  r cursor..      
3250: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
3260: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 73  ..          curs
3270: 6f 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56  or = new SQLiteV
3280: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
3290: 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20  r(table);..     
32a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
32b0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
32c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
32d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
32e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3320: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
3330: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 46 69  override bool Fi
3340: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
3350: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
3360: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
3370: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
3380: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a  argumentCount,..
3390: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33a0: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
33b0: 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e 63    ref SQLiteFunc
33c0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a  tion function,..
33d0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
33e0: 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
3400: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3410: 20 20 20 20 69 66 20 28 61 72 67 75 6d 65 6e 74      if (argument
3420: 43 6f 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20 20  Count != 2)..   
3430: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3440: 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
3450: 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e  ror(table, Strin
3460: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3470: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22           "no \\"
3480: 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73  {0}\\" functions
3490: 20 61 63 63 65 70 74 20 7b 31 7d 20 61 72 67 75   accept {1} argu
34a0: 6d 65 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20 20  ment(s)",..     
34b0: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
34c0: 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me, argumentCoun
34d0: 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
34e0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
3500: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
3510: 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 6e  !String.Equals(n
3520: 61 6d 65 2c 20 22 42 61 73 65 36 34 22 2c 0d 0a  ame, "Base64",..
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
3540: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
3550: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
3560: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
3570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
3580: 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65  TableError(table
3590: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
35a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35b0: 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75  "no \\"{0}\\" fu
35c0: 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d 65  nctions are name
35d0: 64 20 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20  d \\"{1}\\"",.. 
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73               bas
35f0: 65 2e 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d  e.Name, name));.
3600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
3610: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
3620: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3630: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
3640: 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75 6e 63  = new SQLiteFunc
3650: 74 69 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20 20  tion${id}();..  
3660: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
3670: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
3680: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
3690: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
36a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
36e0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
36f0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
3700: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
3710: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3720: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
3730: 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  tList()..       
3740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
3750: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
3760: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
3770: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
3780: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
3790: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
37a0: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
37b0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
37c0: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
37d0: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
37e0: 75 72 63 65 7d 3b 46 6c 61 67 73 3d 4e 6f 46 75  urce};Flags=NoFu
37f0: 6e 63 74 69 6f 6e 73 3b 22 29 29 0d 0a 20 20 20  nctions;"))..   
3800: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3810: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
3820: 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20  .Open();..      
3830: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
3840: 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65  .CreateModule(ne
3850: 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65  w SQLiteModuleTe
3860: 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64  st${id}("mod${id
3870: 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  }"));....       
3880: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3890: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38a0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
38b0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
38c0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
38d0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
38e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
38f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3900: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
3910: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
3920: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3940: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
3950: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
3960: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
3970: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
3980: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3990: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
39a0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
39b0: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
39c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
39d0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
39e0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
39f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3a00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
3a10: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
3a20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3a30: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
3a40: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
3a50: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
3a60: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
3a70: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
3a90: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
3aa0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
3ab0: 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(2)}]";..      
3ac0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
3ad0: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
3ae0: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
3af0: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
3b00: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
3b10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3b20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3b30: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
3b40: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
3b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3b60: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
3b70: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
3b80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3b90: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
3ba0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3bb0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
3bc0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
3bd0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
3be0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
3bf0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
3c00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3c10: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
3c20: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
3c30: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
3c40: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
3c50: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53      result.Add(S
3c60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
3c70: 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  }", command.Exec
3c80: 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a  uteScalar()));..
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
3cc0: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
3cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3cf0: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
3d00: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
3d10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3d20: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
3d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3d40: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3d50: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
3d60: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
3d70: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
3d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
3d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3da0: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
3db0: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
3dc0: 24 7b 73 71 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20  ${sql(4)}]";..  
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3de0: 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e  sult.Add(String.
3df0: 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f  Format("{0}", co
3e00: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61  mmand.ExecuteSca
3e10: 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20  lar()));..      
3e20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3e30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3e40: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
3e50: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
3e60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3e70: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
3e80: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
3eb0: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
3ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
3ed0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3ee0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
3ef0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3f50: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3f60: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
3f70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3f80: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
3f90: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
3fa0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
3fb0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
3fc0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
3fd0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
3fe0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
3ff0: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
4000: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
4010: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
4020: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
4030: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
4040: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
4050: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
4060: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
4070: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
4080: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
4090: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
40a0: 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20 20 20   GetList..      
40b0: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
40c0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
40d0: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
40e0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
40f0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
4100: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
4110: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
4120: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
4130: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
4140: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
4150: 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c  traints \..{eagl
4160: 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  e monoBug28 comm
4170: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
4180: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
4190: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d  em.Data.SQLite\.
41a0: 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
41b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
41c0: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
41d0: 41 4c 5f 54 41 42 4c 45 7d 20 2d 6d 61 74 63 68  AL_TABLE} -match
41e0: 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20   regexp -result 
41f0: 5c 0d 0a 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  \..[string map [
4200: 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e  list \n \r\n] {^
4210: 4f 6b 20 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  Ok System#CodeDo
4220: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
4230: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 5c 0d  lerResults#\d+\.
4240: 0a 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 62  .\{\} 0 \{\{\} b
4250: 32 35 6c 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  25l \{SQL logic 
4260: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
4270: 20 64 61 74 61 62 61 73 65 0d 0a 75 6e 61 62 6c   database..unabl
4280: 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f  e to use functio
4290: 6e 20 42 61 73 65 36 34 20 69 6e 20 74 68 65 20  n Base64 in the 
42a0: 72 65 71 75 65 73 74 65 64 20 63 6f 6e 74 65 78  requested contex
42b0: 74 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  t\} \{SQL logic 
42c0: 65 72 72 6f 72 20 6f 72 5c 0d 0a 6d 69 73 73 69  error or\..missi
42d0: 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 6e 6f 20  ng database..no 
42e0: 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 42  such function: B
42f0: 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d  ase65\}\}$}]}...
4300: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
4310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4350: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
4360: 74 20 76 74 61 62 2d 31 2e 35 20 7b 76 69 72 74  t vtab-1.5 {virt
4370: 75 61 6c 20 74 61 62 6c 65 20 66 75 6e 63 74 69  ual table functi
4380: 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d 73 65 74  on support} -set
4390: 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65  up {..  set file
43a0: 4e 61 6d 65 20 76 74 61 62 2d 31 2e 35 2e 64 62  Name vtab-1.5.db
43b0: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
43c0: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
43d0: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
43e0: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
43f0: 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f  d]..  set dataSo
4400: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
4410: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
4420: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
4430: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31  ]....  set sql(1
4440: 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54  ) { \..    CREAT
4450: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
4460: 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64  t${id} USING mod
4470: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
4480: 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20  .  set sql(2) { 
4490: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
44a0: 73 65 36 34 28 78 2c 20 43 41 53 54 28 27 6f 6e  se64(x, CAST('on
44b0: 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f  e' AS BLOB)) FRO
44c0: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
44d0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29  ....  set sql(3)
44e0: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
44f0: 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54 28   Base64(x, CAST(
4500: 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 2c 20  'one' AS BLOB), 
4510: 27 74 77 6f 27 29 20 46 52 4f 4d 20 74 24 7b 69  'two') FROM t${i
4520: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
4530: 73 65 74 20 73 71 6c 28 34 29 20 7b 20 5c 0d 0a  set sql(4) { \..
4540: 20 20 20 20 53 45 4c 45 43 54 20 42 61 73 65 36      SELECT Base6
4550: 35 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20  5(x, CAST('one' 
4560: 41 53 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20 74  AS BLOB)) FROM t
4570: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
4580: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
4590: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
45a0: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
45b0: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
45c0: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
45d0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b     using System;
45e0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
45f0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
4600: 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65  .    using Eagle
4610: 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62  ._Containers.Pub
4620: 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  lic;....    name
4630: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
4640: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
4650: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
4660: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69  QLiteFunction${i
4670: 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74  d} : SQLiteFunct
4680: 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ion..      {..  
4690: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
46a0: 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d  iteFunction${id}
46b0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20  ()..          : 
46c0: 62 61 73 65 28 53 51 4c 69 74 65 44 61 74 65 46  base(SQLiteDateF
46d0: 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c 74 2c 20  ormats.Default, 
46e0: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73  DateTimeKind.Uns
46f0: 70 65 63 69 66 69 65 64 2c 0d 0a 20 20 20 20 20  pecified,..     
4700: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
4710: 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  , false)..      
4720: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
4730: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
4740: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4750: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
47a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
47b0: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49 6e  erride object In
47c0: 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20  voke(..         
47d0: 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61 72 67 73   object\[\] args
47e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
47f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4800: 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20      if (args == 
4810: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4820: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4830: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
4840: 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 21 3d 20  (args.Length != 
4850: 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2)..            
4860: 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75 6d  return new Argum
4870: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72  entException(Str
4880: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
4890: 20 20 20 20 20 20 20 20 20 20 20 22 6e 65 65 64             "need
48a0: 20 65 78 61 63 74 6c 79 20 74 77 6f 20 61 72 67   exactly two arg
48b0: 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b 30 7d 22  uments, got {0}"
48c0: 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68 29 29 3b  , args.Length));
48d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  ....          ob
48e0: 6a 65 63 74 20 61 72 67 20 3d 20 61 72 67 73 5c  ject arg = args\
48f0: 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  [1\];....       
4900: 20 20 20 69 66 20 28 61 72 67 20 3d 3d 20 6e 75     if (arg == nu
4910: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4920: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
4930: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
4940: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 61     Type type = a
4950: 72 67 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d  rg.GetType();...
4960: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
4970: 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 42  ype == typeof(DB
4980: 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  Null))..        
4990: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
49a0: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
49b0: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20 21        if (type !
49c0: 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5c 5b 5c  = typeof(byte\[\
49d0: 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]))..           
49e0: 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75   return new Argu
49f0: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74  mentException(St
4a00: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 22 61 72 67              "arg
4a20: 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 62 79  ument must be by
4a30: 74 65 20 61 72 72 61 79 2c 20 67 6f 74 20 7b 30  te array, got {0
4a40: 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a 0d 0a 20  }", type));.... 
4a50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4a60: 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73 65 36 34  Convert.ToBase64
4a70: 53 74 72 69 6e 67 28 28 62 79 74 65 5c 5b 5c 5d  String((byte\[\]
4a80: 29 20 61 72 67 29 3b 0d 0a 20 20 20 20 20 20 20  ) arg);..       
4a90: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
4aa0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4af0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
4b00: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
4b10: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
4b20: 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  } : SQLiteModule
4b30: 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  Noop..      {.. 
4b40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
4b50: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
4b60: 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  id}(string name)
4b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61  ..          : ba
4b80: 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  se(name)..      
4b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
4ba0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
4bb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4bc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4c10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
4c20: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
4c30: 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a  orCode Create(..
4c40: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
4c50: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
4c60: 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ction,..        
4c70: 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74    IntPtr pClient
4c80: 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
4c90: 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75   string\[\] argu
4ca0: 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20  ments,..        
4cb0: 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
4cc0: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
4cd0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73  .          ref s
4ce0: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
4cf0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4d00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
4d10: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
4d20: 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65  c = DeclareTable
4d30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  (..            c
4d40: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41  onnection, "CREA
4d50: 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64  TE TABLE ignored
4d60: 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72  (x);", ref error
4d70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4d80: 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
4d90: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
4da0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4db0: 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n rc;....       
4dc0: 20 20 20 72 63 20 3d 20 44 65 63 6c 61 72 65 46     rc = DeclareF
4dd0: 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65 63 74 69  unction(connecti
4de0: 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65 36 34 22  on, -1, "Base64"
4df0: 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d  , ref error);...
4e00: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72  .          if (r
4e10: 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
4e20: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
4e30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
4e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 61  ....          ta
4e50: 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ble = new SQLite
4e60: 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61 72 67  VirtualTable(arg
4e70: 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 20 20  uments);..      
4e80: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
4e90: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
4ea0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4eb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4f00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
4f10: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
4f20: 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20  rorCode Open(.. 
4f30: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
4f40: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
4f50: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
4f60: 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
4f70: 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
4f80: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  r..          )..
4f90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4fa0: 20 20 20 20 20 63 75 72 73 6f 72 20 3d 20 6e 65       cursor = ne
4fb0: 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  w SQLiteVirtualT
4fc0: 61 62 6c 65 43 75 72 73 6f 72 28 74 61 62 6c 65  ableCursor(table
4fd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
4fe0: 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
4ff0: 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
5000: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
5010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5050: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5060: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
5070: 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74  e bool FindFunct
5080: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
5090: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
50a0: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
50b0: 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
50c0: 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  tCount,..       
50d0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
50e0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53  .          ref S
50f0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
5100: 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
5110: 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
5120: 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
5130: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
5150: 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 21  (argumentCount !
5160: 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 2)..          
5170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
5180: 65 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62  etTableError(tab
5190: 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  le, String.Forma
51a0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
51b0: 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20    "no \\"{0}\\" 
51c0: 66 75 6e 63 74 69 6f 6e 73 20 61 63 63 65 70 74  functions accept
51d0: 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74 28 73 29   {1} argument(s)
51e0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
51f0: 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20 61 72 67    base.Name, arg
5200: 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b 0d 0a 0d  umentCount));...
5210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5220: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
5230: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5240: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
5250: 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c 20 22 42  .Equals(name, "B
5260: 61 73 65 36 34 22 2c 0d 0a 20 20 20 20 20 20 20  ase64",..       
5270: 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
5280: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
5290: 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20  gnoreCase))..   
52a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
52b0: 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
52c0: 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e  ror(table, Strin
52d0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
52e0: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22           "no \\"
52f0: 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73  {0}\\" functions
5300: 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c 22 7b 31   are named \\"{1
5310: 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20  }\\"",..        
5320: 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c        base.Name,
5330: 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20   name));....    
5340: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
5350: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
5360: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5370: 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  function = new S
5380: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69  QLiteFunction${i
5390: 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  d}();..         
53a0: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
53b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
53c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
53d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5410: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75  ////....      pu
5420: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
5430: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
5440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
5450: 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69  blic static Stri
5460: 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29  ngList GetList()
5470: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5480: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
5490: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
54a0: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
54b0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
54c0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
54d0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
54e0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
54f0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
5500: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
5510: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 22  =${dataSource};"
5520: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
5530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
5540: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
5550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
5560: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
5570: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
5580: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 22  oduleTest${id}("
5590: 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a  mod${id}"));....
55a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
55b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
55d0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
55e0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
55f0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
5600: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
5610: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5620: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
5630: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
5640: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
5650: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
5660: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
5670: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
5680: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
5690: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
56a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
56b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
56c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
56d0: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
56e0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
56f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5700: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
5710: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
5720: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5730: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
5740: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5750: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
5760: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
5770: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
5780: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
5790: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
57a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
57b0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
57c0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
57d0: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
57e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
57f0: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
5800: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
5810: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
5820: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
5830: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5840: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5850: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
5860: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
5870: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5880: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
5890: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
58a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
58b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
58c0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
58d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
58e0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
58f0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
5900: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
5910: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
5920: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5940: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
5950: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
5960: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(3)}]";..     
5970: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
5980: 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72  t.Add(String.For
5990: 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61  mat("{0}", comma
59a0: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
59b0: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
59c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
59d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
59e0: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
59f0: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
5a00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5a10: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
5a20: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
5a30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5a40: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
5a50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
5a70: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
5a80: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
5a90: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
5aa0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
5ab0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5ac0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
5ad0: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
5ae0: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 34 29 7d  [subst ${sql(4)}
5af0: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
5b00: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
5b10: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
5b20: 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  0}", command.Exe
5b30: 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d  cuteScalar()));.
5b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
5b50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
5b70: 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
5b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
5ba0: 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73  esult.Add(e.Mess
5bb0: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
5bc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5bd0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
5be0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
5bf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5c00: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
5c10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
5c20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5c70: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
5c80: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
5c90: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
5ca0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
5cb0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
5cc0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
5cd0: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
5ce0: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
5cf0: 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79   errors [list Sy
5d00: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
5d10: 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d  .dll Eagle.dll]]
5d20: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
5d30: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
5d40: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
5d50: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
5d60: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
5d70: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
5d80: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
5d90: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
5da0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
5db0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
5dc0: 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 0d  st${id} GetList.
5dd0: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
5de0: 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
5df0: 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20  "]}] $result..} 
5e00: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
5e10: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
5e20: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
5e30: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
5e40: 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72 72  code results err
5e50: 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72  ors sql dataSour
5e60: 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a  ce id fileName..
5e70: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c  } -constraints \
5e80: 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67  ..{eagle monoBug
5e90: 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63  28 command.sql c
5ea0: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
5eb0: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
5ec0: 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f  QLite\..defineCo
5ed0: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
5ee0: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
5ef0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 7d  P_VIRTUAL_TABLE}
5f00: 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d   -match regexp -
5f10: 72 65 73 75 6c 74 20 5c 0d 0a 5b 73 74 72 69 6e  result \..[strin
5f20: 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c  g map [list \n \
5f30: 72 5c 6e 5d 20 7b 5e 4f 6b 20 53 79 73 74 65 6d  r\n] {^Ok System
5f40: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
5f50: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
5f60: 73 23 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20 30 20 5c  s#\d+\..\{\} 0 \
5f70: 7b 5c 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c  {\{\} b25l \{SQL
5f80: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
5f90: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
5fa0: 0d 0a 28 3f 3a 75 6e 61 62 6c 65 20 74 6f 20 75  ..(?:unable to u
5fb0: 73 65 20 66 75 6e 63 74 69 6f 6e 20 42 61 73 65  se function Base
5fc0: 36 34 20 69 6e 20 74 68 65 20 72 65 71 75 65 73  64 in the reques
5fd0: 74 65 64 20 63 6f 6e 74 65 78 74 7c 6e 65 65 64  ted context|need
5fe0: 20 65 78 61 63 74 6c 79 20 6f 6e 65 5c 0d 0a 61   exactly one\..a
5ff0: 72 67 75 6d 65 6e 74 2c 20 67 6f 74 20 33 29 5c  rgument, got 3)\
6000: 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  } \{SQL logic er
6010: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
6020: 61 74 61 62 61 73 65 0d 0a 6e 6f 20 73 75 63 68  atabase..no such
6030: 20 66 75 6e 63 74 69 6f 6e 3a 20 42 61 73 65 36   function: Base6
6040: 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23  5\}\}$}]}....###
6050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6090: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
60a0: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74  runTest {test vt
60b0: 61 62 2d 31 2e 36 20 7b 76 69 72 74 75 61 6c 20  ab-1.6 {virtual 
60c0: 74 61 62 6c 65 20 72 65 6e 61 6d 65 20 73 75 70  table rename sup
60d0: 70 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a  port} -setup {..
60e0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76    set fileName v
60f0: 74 61 62 2d 31 2e 36 2e 64 62 0d 0a 7d 20 2d 62  tab-1.6.db..} -b
6100: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
6110: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
6120: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
6130: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
6140: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
6150: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
6160: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
6170: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
6180: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
6190: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
61a0: 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d  UAL TABLE t${id}
61b0: 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b   USING mod${id};
61c0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
61d0: 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20   sql(2) { \..   
61e0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 24 7b   ALTER TABLE t${
61f0: 69 64 7d 20 52 45 4e 41 4d 45 20 54 4f 20 78 24  id} RENAME TO x$
6200: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
6210: 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c    set sql(3) { \
6220: 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d  ..    SELECT nam
6230: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
6240: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 20  ster WHERE type 
6250: 3d 20 27 74 61 62 6c 65 27 20 4f 52 44 45 52 20  = 'table' ORDER 
6260: 42 59 20 6e 61 6d 65 3b 20 5c 0d 0a 20 20 7d 0d  BY name; \..  }.
6270: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
6280: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
6290: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
62a0: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
62b0: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
62c0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
62d0: 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
62e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
62f0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67  ;..    using Eag
6300: 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50  le._Containers.P
6310: 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61  ublic;....    na
6320: 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63  mespace _Dynamic
6330: 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20  ${id}..    {..  
6340: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
6350: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f  d class SQLiteMo
6360: 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a 20  duleTest${id} : 
6370: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70  SQLiteModuleNoop
6380: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6390: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
63a0: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28  ModuleTest${id}(
63b0: 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20  string name)..  
63c0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 6e          : base(n
63d0: 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ame)..        {.
63e0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
63f0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
6400: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6450: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6460: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
6470: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
6480: 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20 20 20  de Create(..    
6490: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
64a0: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
64b0: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49 6e  n,..          In
64c0: 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
64d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  ,..          str
64e0: 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65 6e 74  ing\[\] argument
64f0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  s,..          re
6500: 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
6510: 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20  able table,..   
6520: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
6530: 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
6540: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
6550: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
6560: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
6570: 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d 0a 20  DeclareTable(.. 
6580: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
6590: 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45 20 54  ction, "CREATE T
65a0: 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78 29 3b  ABLE ignored(x);
65b0: 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  ", ref error);..
65c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
65d0: 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
65e0: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
65f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
6600: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74  ;....          t
6610: 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  able = new SQLit
6620: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61 72  eVirtualTable(ar
6630: 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 20  guments);..     
6640: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
6650: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
6660: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6670: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
66c0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
66d0: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
66e0: 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a  rrorCode Open(..
66f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6700: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
6710: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  le,..          r
6720: 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
6730: 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
6740: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  or..          ).
6750: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6760: 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d 20 6e        cursor = n
6770: 65 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ew SQLiteVirtual
6780: 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61 62 6c  TableCursor(tabl
6790: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  e);..          r
67a0: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
67b0: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
67c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
67d0: 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  .      /////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6820: 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  ....      public
6830: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65   static class Te
6840: 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b  st${id}..      {
6850: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6860: 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69   static StringLi
6870: 73 74 20 47 65 74 4c 69 73 74 28 29 0d 0a 20 20  st GetList()..  
6880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6890: 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65     StringList re
68a0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
68b0: 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
68c0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
68d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
68e0: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
68f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
6900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6910: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
6920: 61 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a  ataSource};"))..
6930: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6940: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
6950: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20  ion.Open();..   
6960: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
6970: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
6980: 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c  (new SQLiteModul
6990: 65 54 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24  eTest${id}("mod$
69a0: 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20  {id}"));....    
69b0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
69c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
69d0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
69e0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
69f0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
6a00: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
6a10: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
6a20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6a30: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
6a40: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
6a50: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
6a60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6a70: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74     result.Add(St
6a80: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
6a90: 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75  ", command.Execu
6aa0: 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20  teScalar()));.. 
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6ad0: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
6ae0: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
6b10: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
6b20: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
6b30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6b40: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
6b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6b60: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
6b70: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
6b80: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
6b90: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6bc0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
6bd0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
6be0: 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(3)}]";.... 
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
6c00: 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61  sing (SQLiteData
6c10: 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65  Reader dataReade
6c20: 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  r = command.Exec
6c30: 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20  uteReader())..  
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6c60: 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65     while (dataRe
6c70: 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20  ader.Read())..  
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c90: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74    result.Add(dat
6ca0: 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53  aReader\[0\].ToS
6cb0: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
6cc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6cd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6ce0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6cf0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
6d00: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
6d10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
6d30: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
6d40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6d50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6d60: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
6d70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6d80: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
6d90: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
6da0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
6db0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6de0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
6df0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
6e00: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(2)}]";..    
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
6e20: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
6e30: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
6e40: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
6e50: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
6e60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6e70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6e80: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
6e90: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
6ea0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6eb0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
6ec0: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
6ed0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6ee0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
6f10: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
6f20: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
6f30: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
6f40: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
6f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6f60: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
6f70: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
6f80: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
6f90: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
6fa0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
6fb0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
6fc0: 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d  dataReader = com
6fd0: 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64  mand.ExecuteRead
6fe0: 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er())..         
6ff0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7000: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
7010: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
7020: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
7030: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
7040: 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72  t.Add(dataReader
7050: 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29  \[0\].ToString()
7060: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7070: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7080: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7090: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
70a0: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
70b0: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
70c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
70d0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
70e0: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
70f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7100: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
7110: 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  tion.Close();.. 
7120: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
7140: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
7150: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
7160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
71b0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
71c0: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
71d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
71e0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
71f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7200: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
7210: 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72  true true true r
7220: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c  esults errors [l
7230: 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ist System.Data.
7240: 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65  SQLite.dll Eagle
7250: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74  .dll]]....  list
7260: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
7270: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
7280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
7290: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
72a0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
72b0: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
72c0: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
72d0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
72e0: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
72f0: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
7300: 74 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20 72  tList..      } r
7310: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
7320: 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75  sult ""]}] $resu
7330: 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  lt..} -cleanup {
7340: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
7350: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
7360: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
7370: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c  esult code resul
7380: 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61  ts errors sql da
7390: 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65  taSource id file
73a0: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
73b0: 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d  ints \..{eagle m
73c0: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
73d0: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
73e0: 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
73f0: 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65  Data.SQLite\..de
7400: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
7410: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
7420: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
7430: 54 41 42 4c 45 7d 20 2d 6d 61 74 63 68 20 72 65  TABLE} -match re
7440: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a  gexp -result \..
7450: 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
7460: 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20  t \n \r\n] {^Ok 
7470: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
7480: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
7490: 52 65 73 75 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b  Results#\d+\..\{
74a0: 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 74 5c 64 2b  \} 0 \{\{\} t\d+
74b0: 20 5c 7b 5c 7d 20 78 5c 64 2b 5c 7d 24 7d 5d 7d   \{\} x\d+\}$}]}
74c0: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
74d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
74f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7510: 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69 74 65  ###....runSQLite
7520: 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a 72 75  TestEpilogue..ru
7530: 6e 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a     nTestEpilogue..