System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 09fc5b651b503e465b267b13141892aba0482771:


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 5c 2e 30 20 45 72 72 6f 72 20 5c 7b 53 51 4c  5\.0 Error \{SQL
18d0: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
18e0: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
18f0: 0d 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  ..virtual table 
1900: 22 74 5c 64 2b 22 20 69 73 20 72 65 61 64 2d 6f  "t\d+" is read-o
1910: 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  nly\}\}$}]}....#
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 23 0d 0a  ##############..
1970: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1980: 76 74 61 62 2d 31 2e 33 20 7b 49 45 6e 75 6d 65  vtab-1.3 {IEnume
1990: 72 61 62 6c 65 3c 54 3e 20 76 69 72 74 75 61 6c  rable<T> virtual
19a0: 20 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b   table} -setup {
19b0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
19c0: 20 76 74 61 62 2d 31 2e 33 2e 64 62 0d 0a 7d 20   vtab-1.3.db..} 
19d0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
19e0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
19f0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
1a00: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
1a10: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
1a20: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1a30: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
1a40: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
1a50: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
1a60: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
1a70: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
1a80: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
1a90: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
1aa0: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
1ab0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1ac0: 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   t${id}; \..  }.
1ad0: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
1ae0: 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20  { \..    UPDATE 
1af0: 74 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31  t${id} SET x = 1
1b00: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
1b10: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
1b20: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
1b30: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
1b40: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
1b50: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
1b60: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
1b70: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
1b80: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
1b90: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
1ba0: 61 2e 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63  a.SQLite.Generic
1bb0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67  ;..    using Eag
1bc0: 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50  le._Containers.P
1bd0: 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61  ublic;....    na
1be0: 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63  mespace _Dynamic
1bf0: 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20  ${id}..    {..  
1c00: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1c10: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
1c20: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
1c30: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1c40: 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74  c StringList Get
1c50: 4c 69 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c  List(params int\
1c60: 5b 5c 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20  [\] integers).. 
1c70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c80: 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72      StringList r
1c90: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
1ca0: 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
1cb0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1cc0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
1cd0: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
1ce0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1cf0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1d00: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
1d10: 64 61 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d  dataSource};")).
1d20: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
1d30: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
1d40: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
1d60: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64  ection.CreateMod
1d70: 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f  ule(new SQLiteMo
1d80: 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69  duleEnumerable<i
1d90: 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nt>(..          
1da0: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
1db0: 69 6e 74 65 67 65 72 73 29 29 3b 0d 0a 0d 0a 20  integers));.... 
1dc0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
1dd0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
1de0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
1df0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
1e00: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
1e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e20: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
1e30: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
1e40: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1e60: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
1e70: 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
1e80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e90: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1ea0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
1eb0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
1ec0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
1ed0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
1f00: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
1f10: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(2)}]";....  
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1f30: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
1f40: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
1f50: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
1f60: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
1f70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
1f90: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
1fa0: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
1fb0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
1fc0: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
1fd0: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
1fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2000: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2010: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
2020: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
2030: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
2040: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
2050: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2060: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
2070: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
2080: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d  [subst ${sql(3)}
2090: 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]";....         
20a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
20b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20c0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
20d0: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
20e0: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
20f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2100: 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c        catch (SQL
2110: 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  iteException e).
2120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
2130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2140: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52    result.Add(e.R
2150: 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69  esultCode.ToStri
2160: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
2170: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
2180: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
21c0: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
21d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
21e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
21f0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
2200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2210: 20 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 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2260: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2270: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
2280: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2290: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
22a0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
22b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
22c0: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
22d0: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
22e0: 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44  s [list System.D
22f0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45  ata.SQLite.dll E
2300: 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  agle.dll]]....  
2310: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
2320: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
2330: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
2340: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
2350: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
2360: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
2370: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
2380: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
2390: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
23a0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
23b0: 7d 20 47 65 74 4c 69 73 74 20 31 20 32 20 33 20  } GetList 1 2 3 
23c0: 34 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  4 5..      } res
23d0: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
23e0: 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74  lt ""]}] $result
23f0: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
2400: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
2410: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
2420: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
2430: 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73  ult code results
2440: 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61   errors sql data
2450: 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61  Source id fileNa
2460: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
2470: 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
2480: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
2490: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
24a0: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
24b0: 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69  ta.SQLite\..defi
24c0: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
24d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
24e0: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
24f0: 42 4c 45 7d 20 2d 6d 61 74 63 68 20 72 65 67 65  BLE} -match rege
2500: 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 5b 73  xp -result \..[s
2510: 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list 
2520: 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20 53 79  \n \r\n] {^Ok Sy
2530: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
2540: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
2550: 73 75 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b 5c 7d  sults#\d+\..\{\}
2560: 20 30 20 5c 7b 31 20 32 20 33 20 34 20 35 20 45   0 \{1 2 3 4 5 E
2570: 72 72 6f 72 20 5c 7b 53 51 4c 20 6c 6f 67 69 63  rror \{SQL logic
2580: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
2590: 67 20 64 61 74 61 62 61 73 65 0d 0a 76 69 72 74  g database..virt
25a0: 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22  ual table "t\d+"
25b0: 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c   is read-only\}\
25c0: 7d 24 7d 5d 7d 0d 0a 0d 0a 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 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
2620: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
2630: 2e 34 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c  .4 {virtual tabl
2640: 65 20 66 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f  e function suppo
2650: 72 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  rt} -setup {..  
2660: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
2670: 62 2d 31 2e 34 2e 64 62 0d 0a 7d 20 2d 62 6f 64  b-1.4.db..} -bod
2680: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
2690: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
26a0: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
26b0: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
26c0: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
26d0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
26e0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
26f0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
2700: 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20  et sql(1) { \.. 
2710: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
2720: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
2730: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
2740: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
2750: 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(2) { \..    S
2760: 45 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20  ELECT Base64(x, 
2770: 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c  CAST('one' AS BL
2780: 4f 42 29 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d  OB)) FROM t${id}
2790: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
27a0: 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20  t sql(3) { \..  
27b0: 20 20 53 45 4c 45 43 54 20 42 61 73 65 36 34 28    SELECT Base64(
27c0: 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53  x, CAST('one' AS
27d0: 20 42 4c 4f 42 29 2c 20 27 74 77 6f 27 29 20 46   BLOB), 'two') F
27e0: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
27f0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
2800: 34 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  4) { \..    SELE
2810: 43 54 20 42 61 73 65 36 35 28 78 2c 20 43 41 53  CT Base65(x, CAS
2820: 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29  T('one' AS BLOB)
2830: 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c  ) FROM t${id}; \
2840: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
2850: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
2860: 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  ults errors.... 
2870: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
2880: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
2890: 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67  bst {..    using
28a0: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73   System;..    us
28b0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
28c0: 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69  SQLite;..    usi
28d0: 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69  ng Eagle._Contai
28e0: 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a  ners.Public;....
28f0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44      namespace _D
2900: 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20  ynamic${id}..   
2910: 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63   {..      public
2920: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75 6e   class SQLiteFun
2930: 63 74 69 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c  ction${id} : SQL
2940: 69 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  iteFunction..   
2950: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
2960: 62 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74  blic SQLiteFunct
2970: 69 6f 6e 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20  ion${id}()..    
2980: 20 20 20 20 20 20 3a 20 62 61 73 65 28 53 51 4c        : base(SQL
2990: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 44  iteDateFormats.D
29a0: 65 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d 65  efault, DateTime
29b0: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
29c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29d0: 20 20 20 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29      null, false)
29e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
29f0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
2a00: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
2a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2a70: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f  ublic override o
2a80: 62 6a 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20  bject Invoke(.. 
2a90: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5c           object\
2aa0: 5b 5c 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20  [\] args..      
2ab0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
2ad0: 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  args == null).. 
2ae0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2af0: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
2b00: 20 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65       if (args.Le
2b10: 6e 67 74 68 20 21 3d 20 32 29 0d 0a 20 20 20 20  ngth != 2)..    
2b20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2b30: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
2b40: 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d  tion(String.Form
2b50: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2b60: 20 20 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79     "need exactly
2b70: 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20   two arguments, 
2b80: 67 6f 74 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c  got {0}", args.L
2b90: 65 6e 67 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20  ength));....    
2ba0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 61 72 67        object arg
2bb0: 20 3d 20 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d   = args\[1\];...
2bc0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
2bd0: 72 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rg == null)..   
2be0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2bf0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
2c00: 0a 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20  .          Type 
2c10: 74 79 70 65 20 3d 20 61 72 67 2e 47 65 74 54 79  type = arg.GetTy
2c20: 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pe();....       
2c30: 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74     if (type == t
2c40: 79 70 65 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a  ypeof(DBNull))..
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c60: 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b  rn String.Empty;
2c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
2c80: 20 28 74 79 70 65 20 21 3d 20 74 79 70 65 6f 66   (type != typeof
2c90: 28 62 79 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20  (byte\[\]))..   
2ca0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2cb0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
2cc0: 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72  ption(String.For
2cd0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2ce0: 20 20 20 20 22 61 72 67 75 6d 65 6e 74 20 6d 75      "argument mu
2cf0: 73 74 20 62 65 20 62 79 74 65 20 61 72 72 61 79  st be byte array
2d00: 2c 20 67 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65  , got {0}", type
2d10: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
2d20: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
2d30: 54 6f 42 61 73 65 36 34 53 74 72 69 6e 67 28 28  ToBase64String((
2d40: 62 79 74 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d  byte\[\]) arg);.
2d50: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2d60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2dc0: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
2dd0: 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ass SQLiteModule
2de0: 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
2df0: 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20  teModuleNoop..  
2e00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
2e10: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
2e20: 6c 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69  leTest${id}(stri
2e30: 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
2e40: 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29      : base(name)
2e50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2e60: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
2e70: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
2e80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2ee0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
2ef0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
2f00: 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
2f10: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
2f20: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a  on connection,..
2f30: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2f40: 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20   pClientData,.. 
2f50: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c           string\
2f60: 5b 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a  [\] arguments,..
2f70: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
2f80: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
2f90: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
2fa0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2fb0: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ror..          )
2fc0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2fd0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
2fe0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c  orCode rc = Decl
2ff0: 61 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  areTable(..     
3000: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
3010: 6e 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  n, "CREATE TABLE
3020: 20 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72   ignored(x);", r
3030: 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ef error);....  
3040: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
3050: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
3060: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
3070: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d     return rc;...
3080: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
3090: 44 65 63 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28  DeclareFunction(
30a0: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20  connection, -1, 
30b0: 22 42 61 73 65 36 34 22 2c 20 72 65 66 20 65 72  "Base64", ref er
30c0: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
30d0: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
30e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
30f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
3100: 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  turn rc;....    
3110: 20 20 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65        table = ne
3120: 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  w SQLiteVirtualT
3130: 61 62 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b  able(arguments);
3140: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
3150: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
3160: 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20  de.Ok;..        
3170: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
31d0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
31e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
31f0: 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
3200: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
3210: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
3220: 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
3230: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
3240: 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20  or cursor..     
3250: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
3260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 72  {..          cur
3270: 73 6f 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sor = new SQLite
3280: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
3290: 6f 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20  or(table);..    
32a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
32b0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
32c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
32d0: 20 20 20 20 20 20 20 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 2f 0d 0a  //////////////..
3320: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
3330: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 46   override bool F
3340: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
3350: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
3360: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
3370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ,..          int
3380: 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d   argumentCount,.
3390: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
33a0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
33b0: 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e     ref SQLiteFun
33c0: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d  ction function,.
33d0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49  .          ref I
33e0: 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
33f0: 61 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  a..          )..
3400: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3410: 20 20 20 20 20 69 66 20 28 61 72 67 75 6d 65 6e       if (argumen
3420: 74 43 6f 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20  tCount != 2)..  
3430: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3440: 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
3450: 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69  rror(table, Stri
3460: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
3470: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c            "no \\
3480: 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e  "{0}\\" function
3490: 73 20 61 63 63 65 70 74 20 7b 31 7d 20 61 72 67  s accept {1} arg
34a0: 75 6d 65 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20  ument(s)",..    
34b0: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e            base.N
34c0: 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75  ame, argumentCou
34d0: 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
34e0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34f0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
3500: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
3510: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
3520: 6e 61 6d 65 2c 20 22 42 61 73 65 36 34 22 2c 0d  name, "Base64",.
3530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
3540: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
3550: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
3560: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  e))..          {
3570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65  ..            Se
3580: 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c  tTableError(tabl
3590: 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  e, String.Format
35a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35b0: 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66   "no \\"{0}\\" f
35c0: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d  unctions are nam
35d0: 65 64 20 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a  ed \\"{1}\\"",..
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61                ba
35f0: 73 65 2e 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b  se.Name, name));
3600: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3610: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
3620: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3630: 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e          function
3640: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75 6e   = new SQLiteFun
3650: 63 74 69 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20  ction${id}();.. 
3660: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3670: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
3680: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
3690: 20 20 20 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 2f 0d 0a 0d 0a  ////////////....
36e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
36f0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
3700: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
3710: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3720: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
3730: 65 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  etList()..      
3740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
3750: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
3760: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
3770: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
3780: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
3790: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
37a0: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
37b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
37c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
37d0: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
37e0: 6f 75 72 63 65 7d 3b 46 6c 61 67 73 3d 4e 6f 42  ource};Flags=NoB
37f0: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 3b 22 29 29  indFunctions;"))
3800: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
3810: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
3820: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20  ction.Open();.. 
3830: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
3840: 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75  ction.CreateModu
3850: 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64  le(new SQLiteMod
3860: 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 22 6d 6f  uleTest${id}("mo
3870: 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20  d${id}"));....  
3880: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
3890: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
38b0: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
38c0: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
38d0: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
38e0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
38f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3900: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
3910: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
3920: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d  [subst ${sql(1)}
3930: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
3940: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
3950: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
3960: 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  0}", command.Exe
3970: 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d  cuteScalar()));.
3980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
3990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
39b0: 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
39c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
39d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
39e0: 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73  esult.Add(e.Mess
39f0: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
3a00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3a10: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
3a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3a30: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
3a40: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
3a50: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
3a60: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
3a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3a90: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
3aa0: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
3ab0: 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20   ${sql(2)}]";.. 
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3ad0: 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67  esult.Add(String
3ae0: 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63  .Format("{0}", c
3af0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63  ommand.ExecuteSc
3b00: 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20  alar()));..     
3b10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3b20: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3b30: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
3b40: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
3b50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3b60: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3b70: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
3b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
3ba0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bc0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
3bd0: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
3be0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
3bf0: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
3c00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
3c20: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
3c30: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
3c40: 28 33 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (3)}]";..       
3c50: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3c60: 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  Add(String.Forma
3c70: 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64  t("{0}", command
3c80: 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29  .ExecuteScalar()
3c90: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
3ca0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3cb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3cc0: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
3cd0: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
3ce0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3cf0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
3d00: 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20  Message);..     
3d10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3d20: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
3d30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3d40: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
3d50: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
3d60: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
3d70: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
3d80: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
3d90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3da0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
3db0: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
3dc0: 75 62 73 74 20 24 7b 73 71 6c 28 34 29 7d 5d 22  ubst ${sql(4)}]"
3dd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3de0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74     result.Add(St
3df0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
3e00: 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75  ", command.Execu
3e10: 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20  teScalar()));.. 
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3e40: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
3e50: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
3e80: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
3e90: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
3ea0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3eb0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f    connection.Clo
3ec0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
3ed0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3ee0: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
3ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3f00: 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3f50: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
3f60: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
3f70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3f80: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
3f90: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
3fa0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
3fb0: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
3fc0: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
3fd0: 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74  rrors [list Syst
3fe0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
3ff0: 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a  ll Eagle.dll]]..
4000: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
4010: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
4020: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
4030: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
4040: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
4050: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
4060: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
4070: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
4080: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
4090: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
40a0: 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20  ${id} GetList.. 
40b0: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
40c0: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
40d0: 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  }] $result..} -c
40e0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
40f0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
4100: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
4110: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
4120: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
4130: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
4140: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
4150: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
4160: 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
4170: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
4180: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
4190: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
41a0: 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  ite\..defineCons
41b0: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
41c0: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
41d0: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 7d 20 2d  VIRTUAL_TABLE} -
41e0: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65  match regexp -re
41f0: 73 75 6c 74 20 5c 0d 0a 5b 73 74 72 69 6e 67 20  sult \..[string 
4200: 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c  map [list \n \r\
4210: 6e 5d 20 7b 5e 4f 6b 20 53 79 73 74 65 6d 23 43  n] {^Ok System#C
4220: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
4230: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
4240: 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20 30 20 5c 7b 5c  \d+\..\{\} 0 \{\
4250: 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c  {\} b25l \{SQL l
4260: 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69  ogic error or mi
4270: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a  ssing database..
4280: 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 66 75  unable to use fu
4290: 6e 63 74 69 6f 6e 20 42 61 73 65 36 34 20 69 6e  nction Base64 in
42a0: 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 63   the requested c
42b0: 6f 6e 74 65 78 74 5c 7d 20 5c 7b 53 51 4c 20 6c  ontext\} \{SQL l
42c0: 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 5c 0d 0a  ogic error or\..
42d0: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
42e0: 0d 0a 6e 6f 20 73 75 63 68 20 66 75 6e 63 74 69  ..no such functi
42f0: 6f 6e 3a 20 42 61 73 65 36 35 5c 7d 5c 7d 24 7d  on: Base65\}\}$}
4300: 5d 7d 0d 0a 0d 0a 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: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
4360: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 35 20   {test vtab-1.5 
4370: 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66  {virtual table f
4380: 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f 72 74 7d  unction support}
4390: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
43a0: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
43b0: 2e 35 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b  .5.db..} -body {
43c0: 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65  ..  set id [obje
43d0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
43e0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
43f0: 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64  NextId]..  set d
4400: 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20  ataSource [file 
4410: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
4420: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c  eDirectory] $fil
4430: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20  eName]....  set 
4440: 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(1) { \..    
4450: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
4460: 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e  ABLE t${id} USIN
4470: 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20  G mod${id}; \.. 
4480: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
4490: 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  2) { \..    SELE
44a0: 43 54 20 42 61 73 65 36 34 28 78 2c 20 43 41 53  CT Base64(x, CAS
44b0: 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29  T('one' AS BLOB)
44c0: 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c  ) FROM t${id}; \
44d0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
44e0: 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(3) { \..    S
44f0: 45 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20  ELECT Base64(x, 
4500: 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c  CAST('one' AS BL
4510: 4f 42 29 2c 20 27 74 77 6f 27 29 20 46 52 4f 4d  OB), 'two') FROM
4520: 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   t${id}; \..  }.
4530: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 34 29 20  ...  set sql(4) 
4540: 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20  { \..    SELECT 
4550: 42 61 73 65 36 35 28 78 2c 20 43 41 53 54 28 27  Base65(x, CAST('
4560: 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46  one' AS BLOB)) F
4570: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
4580: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
4590: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
45a0: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
45b0: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
45c0: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
45d0: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
45e0: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
45f0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
4600: 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ite;..    using 
4610: 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72  Eagle._Container
4620: 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20  s.Public;....   
4630: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
4640: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
4650: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c  .      public cl
4660: 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ass SQLiteFuncti
4670: 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65  on${id} : SQLite
4680: 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Function..      
4690: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
46a0: 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  c SQLiteFunction
46b0: 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20  ${id}()..       
46c0: 20 20 20 3a 20 62 61 73 65 28 53 51 4c 69 74 65     : base(SQLite
46d0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61  DateFormats.Defa
46e0: 75 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e  ult, DateTimeKin
46f0: 64 2e 55 6e 73 70 65 63 69 66 69 65 64 2c 0d 0a  d.Unspecified,..
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4710: 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 0d 0a 20   null, false).. 
4720: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4730: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4740: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
4750: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
47a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
47b0: 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
47c0: 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20  ct Invoke(..    
47d0: 20 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d        object\[\]
47e0: 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20   args..         
47f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
4800: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
4810: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
4820: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4830: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
4840: 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74    if (args.Lengt
4850: 68 20 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20  h != 2)..       
4860: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
4870: 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
4880: 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n(String.Format(
4890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48a0: 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20 74 77  "need exactly tw
48b0: 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 67 6f 74  o arguments, got
48c0: 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c 65 6e 67   {0}", args.Leng
48d0: 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  th));....       
48e0: 20 20 20 6f 62 6a 65 63 74 20 61 72 67 20 3d 20     object arg = 
48f0: 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20  args\[1\];....  
4900: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 20          if (arg 
4910: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4920: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
4930: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
4940: 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
4950: 65 20 3d 20 61 72 67 2e 47 65 74 54 79 70 65 28  e = arg.GetType(
4960: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4970: 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
4980: 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a 20 20 20  of(DBNull))..   
4990: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
49a0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
49b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
49c0: 79 70 65 20 21 3d 20 74 79 70 65 6f 66 28 62 79  ype != typeof(by
49d0: 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20 20 20  te\[\]))..      
49e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
49f0: 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
4a00: 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  on(String.Format
4a10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4a20: 20 22 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20   "argument must 
4a30: 62 65 20 62 79 74 65 20 61 72 72 61 79 2c 20 67  be byte array, g
4a40: 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65 29 29 3b  ot {0}", type));
4a50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
4a60: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42  turn Convert.ToB
4a70: 61 73 65 36 34 53 74 72 69 6e 67 28 28 62 79 74  ase64String((byt
4a80: 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a 20 20  e\[\]) arg);..  
4a90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
4aa0: 0d 0a 0d 0a 20 20 20 20 20 20 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 2f 2f  ////////////////
4af0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62  ///....      pub
4b00: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
4b10: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
4b20: 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d  t${id} : SQLiteM
4b30: 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20 20 20  oduleNoop..     
4b40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
4b50: 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ic SQLiteModuleT
4b60: 65 73 74 24 7b 69 64 7d 28 73 74 72 69 6e 67 20  est${id}(string 
4b70: 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  name)..         
4b80: 20 3a 20 62 61 73 65 28 6e 61 6d 65 29 0d 0a 20   : base(name).. 
4b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ba0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4bb0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
4bc0: 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
4c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
4c20: 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  ic override SQLi
4c30: 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61  teErrorCode Crea
4c40: 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53  te(..          S
4c50: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
4c60: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20  connection,..   
4c70: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
4c80: 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
4c90: 20 20 20 20 20 20 73 74 72 69 6e 67 5c 5b 5c 5d        string\[\]
4ca0: 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20   arguments,..   
4cb0: 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
4cc0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
4cd0: 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
4ce0: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
4cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
4d00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4d10: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
4d20: 6f 64 65 20 72 63 20 3d 20 44 65 63 6c 61 72 65  ode rc = Declare
4d30: 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
4d40: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20      connection, 
4d50: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 69 67  "CREATE TABLE ig
4d60: 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72 65 66 20  nored(x);", ref 
4d70: 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  error);....     
4d80: 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53       if (rc != S
4d90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
4da0: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
4db0: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20  return rc;....  
4dc0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 44 65 63          rc = Dec
4dd0: 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28 63 6f 6e  lareFunction(con
4de0: 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20 22 42 61  nection, -1, "Ba
4df0: 73 65 36 34 22 2c 20 72 65 66 20 65 72 72 6f 72  se64", ref error
4e00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4e10: 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
4e20: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
4e30: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4e40: 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n rc;....       
4e50: 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53     table = new S
4e60: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
4e70: 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20  e(arguments);.. 
4e80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4e90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
4ea0: 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  Ok;..        }..
4eb0: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
4f00: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
4f10: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c  lic override SQL
4f20: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65  iteErrorCode Ope
4f30: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  n(..          SQ
4f40: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
4f50: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
4f60: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
4f70: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
4f80: 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
4f90: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
4fa0: 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
4fb0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72   = new SQLiteVir
4fc0: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28  tualTableCursor(
4fd0: 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  table);..       
4fe0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
4ff0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
5000: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5010: 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5060: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
5070: 65 72 72 69 64 65 20 62 6f 6f 6c 20 46 69 6e 64  erride bool Find
5080: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
5090: 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
50a0: 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a  alTable table,..
50b0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
50c0: 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20  gumentCount,..  
50d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
50e0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
50f0: 72 65 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ref SQLiteFuncti
5100: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20  on function,..  
5110: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
5120: 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a  tr pClientData..
5130: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5150: 20 20 69 66 20 28 61 72 67 75 6d 65 6e 74 43 6f    if (argumentCo
5160: 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20 20 20 20  unt != 2)..     
5170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5180: 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
5190: 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e  r(table, String.
51a0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
51b0: 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30         "no \\"{0
51c0: 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61  }\\" functions a
51d0: 63 63 65 70 74 20 7b 31 7d 20 61 72 67 75 6d 65  ccept {1} argume
51e0: 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20 20 20 20  nt(s)",..       
51f0: 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65         base.Name
5200: 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29  , argumentCount)
5210: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5220: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
5230: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
5240: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
5250: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 6e 61 6d  tring.Equals(nam
5260: 65 2c 20 22 42 61 73 65 36 34 22 2c 0d 0a 20 20  e, "Base64",..  
5270: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
5280: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
5290: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
52a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
52b0: 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
52c0: 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65 2c 20  bleError(table, 
52d0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
52f0: 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63  o \\"{0}\\" func
5300: 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d 65 64 20  tions are named 
5310: 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20  \\"{1}\\"",..   
5320: 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e             base.
5330: 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d  Name, name));...
5340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5350: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
5360: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5370: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20       function = 
5380: 6e 65 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69  new SQLiteFuncti
5390: 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20 20 20 20  on${id}();..    
53a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
53b0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
53c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5420: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
5430: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
5440: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
5450: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
5460: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
5470: 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ist()..        {
5480: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69  ..          Stri
5490: 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20  ngList result = 
54a0: 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
54b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
54c0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
54d0: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
54e0: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
54f0: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
5500: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
5510: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
5520: 63 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20 20 20  ce};"))..       
5530: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5540: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65    connection.Ope
5550: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
5560: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
5570: 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51  ateModule(new SQ
5580: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
5590: 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29  id}("mod${id}"))
55a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
55b0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
55c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
55d0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
55e0: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
55f0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
5600: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5630: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
5640: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
5650: 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(1)}]";..    
5660: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5670: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
5680: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
5690: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
56a0: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
56b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
56c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
56d0: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
56e0: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
56f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5700: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
5710: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
5720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5730: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
5740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5750: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
5760: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
5770: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
5780: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
5790: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
57a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
57b0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
57c0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
57d0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
57e0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
57f0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
5800: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
5810: 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78  {0}", command.Ex
5820: 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b  ecuteScalar()));
5830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5840: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
5860: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
5870: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5890: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
58a0: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
58b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
58c0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
58d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
58e0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
58f0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
5900: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
5910: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
5920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5940: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
5950: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
5960: 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a  t ${sql(3)}]";..
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5980: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
5990: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
59a0: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
59b0: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
59c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
59d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
59e0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
59f0: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
5a00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5a10: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5a20: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
5a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5a40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
5a50: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
5a60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5a70: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
5a80: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
5a90: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
5aa0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
5ab0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
5ad0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
5ae0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
5af0: 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(4)}]";..      
5b00: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5b10: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
5b20: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
5b30: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
5b40: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
5b50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5b60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5b70: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
5b80: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
5b90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5ba0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
5bb0: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
5bc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5bd0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
5be0: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
5bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5c00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
5c10: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
5c20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
5c70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
5c80: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
5c90: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
5ca0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
5cb0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
5cc0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5cd0: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
5ce0: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
5cf0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
5d00: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
5d10: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
5d20: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
5d30: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
5d40: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
5d50: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
5d60: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
5d70: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
5d80: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
5d90: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
5da0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
5db0: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
5dc0: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
5dd0: 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20 72 65  List..      } re
5de0: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
5df0: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
5e00: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
5e10: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
5e20: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
5e30: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
5e40: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
5e50: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
5e60: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
5e70: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
5e80: 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
5e90: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
5ea0: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
5eb0: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
5ec0: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
5ed0: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
5ee0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
5ef0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
5f00: 41 42 4c 45 7d 20 2d 6d 61 74 63 68 20 72 65 67  ABLE} -match reg
5f10: 65 78 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 5b  exp -result \..[
5f20: 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74  string map [list
5f30: 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20 53   \n \r\n] {^Ok S
5f40: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
5f50: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
5f60: 65 73 75 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b 5c  esults#\d+\..\{\
5f70: 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 62 32 35 6c 20  } 0 \{\{\} b25l 
5f80: 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f  \{SQL logic erro
5f90: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
5fa0: 61 62 61 73 65 0d 0a 28 3f 3a 75 6e 61 62 6c 65  abase..(?:unable
5fb0: 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f 6e   to use function
5fc0: 20 42 61 73 65 36 34 20 69 6e 20 74 68 65 20 72   Base64 in the r
5fd0: 65 71 75 65 73 74 65 64 20 63 6f 6e 74 65 78 74  equested context
5fe0: 7c 6e 65 65 64 20 65 78 61 63 74 6c 79 20 6f 6e  |need exactly on
5ff0: 65 5c 0d 0a 61 72 67 75 6d 65 6e 74 2c 20 67 6f  e\..argument, go
6000: 74 20 33 29 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67  t 3)\} \{SQL log
6010: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
6020: 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 6e 6f  ing database..no
6030: 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20   such function: 
6040: 42 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a  Base65\}\}$}]}..
6050: 0d 0a 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 23 23 23 23  ################
60a0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
60b0: 73 74 20 76 74 61 62 2d 31 2e 36 20 7b 76 69 72  st vtab-1.6 {vir
60c0: 74 75 61 6c 20 74 61 62 6c 65 20 72 65 6e 61 6d  tual table renam
60d0: 65 20 73 75 70 70 6f 72 74 7d 20 2d 73 65 74 75  e support} -setu
60e0: 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e  p {..  set fileN
60f0: 61 6d 65 20 76 74 61 62 2d 31 2e 36 2e 64 62 0d  ame vtab-1.6.db.
6100: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
6110: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
6120: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
6130: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
6140: 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75  ]..  set dataSou
6150: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
6160: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
6170: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
6180: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29  ....  set sql(1)
6190: 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45   { \..    CREATE
61a0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
61b0: 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24  ${id} USING mod$
61c0: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
61d0: 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c    set sql(2) { \
61e0: 0d 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  ..    ALTER TABL
61f0: 45 20 74 24 7b 69 64 7d 20 52 45 4e 41 4d 45 20  E t${id} RENAME 
6200: 54 4f 20 78 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  TO x${id}; \..  
6210: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33  }....  set sql(3
6220: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
6230: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
6240: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
6250: 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 4f  type = 'table' O
6260: 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 20 5c 0d  RDER BY name; \.
6270: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
6280: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
6290: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
62a0: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
62b0: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
62c0: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
62d0: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
62e0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
62f0: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
6300: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
6310: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
6320: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
6330: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
6340: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
6350: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
6360: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
6370: 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c  d} : SQLiteModul
6380: 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a  eNoop..      {..
6390: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
63a0: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
63b0: 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65  {id}(string name
63c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62  )..          : b
63d0: 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ase(name)..     
63e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
63f0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
6400: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6410: 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6460: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
6470: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
6480: 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d  rorCode Create(.
6490: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
64a0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
64b0: 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ection,..       
64c0: 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e     IntPtr pClien
64d0: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
64e0: 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67    string\[\] arg
64f0: 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20  uments,..       
6500: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
6510: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
6520: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
6530: 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
6540: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6550: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6560: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6570: 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c  rc = DeclareTabl
6580: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
6590: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45  connection, "CRE
65a0: 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65  ATE TABLE ignore
65b0: 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f  d(x);", ref erro
65c0: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
65d0: 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
65e0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6600: 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  rn rc;....      
6610: 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77 20      table = new 
6620: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
6630: 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a  le(arguments);..
6640: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6650: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6660: 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  .Ok;..        }.
6670: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
66c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
66d0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51  blic override SQ
66e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70  LiteErrorCode Op
66f0: 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53  en(..          S
6700: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
6710: 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  e table,..      
6720: 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
6730: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
6740: 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20   cursor..       
6750: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
6760: 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f  .          curso
6770: 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69  r = new SQLiteVi
6780: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
6790: 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20  (table);..      
67a0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
67b0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
67c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
67d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
6830: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
6840: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
6850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
6860: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
6870: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
6880: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6890: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
68a0: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
68b0: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
68c0: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
68d0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
68e0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
68f0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
6900: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
6910: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
6920: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
6930: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
6940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
6950: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
6960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
6970: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d  nnection.CreateM
6980: 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65  odule(new SQLite
6990: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28  ModuleTest${id}(
69a0: 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d  "mod${id}"));...
69b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
69c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
69d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
69e0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
69f0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
6a00: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
6a10: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
6a20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
6a40: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
6a50: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
6a60: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
6a70: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
6a80: 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  dd(String.Format
6a90: 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e  ("{0}", command.
6aa0: 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29  ExecuteScalar())
6ab0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6ac0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6ad0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6ae0: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
6af0: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
6b00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6b10: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
6b20: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
6b30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6b40: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
6b50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6b60: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
6b70: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
6b80: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
6b90: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
6ba0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
6bb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6bc0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
6bd0: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
6be0: 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b  bst ${sql(3)}]";
6bf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6c00: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
6c10: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
6c20: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
6c30: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
6c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6c50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6c60: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64          while (d
6c70: 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29  ataReader.Read()
6c80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6c90: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
6ca0: 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c  d(dataReader\[0\
6cb0: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ].ToString());..
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cd0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
6ce0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6cf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
6d00: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
6d10: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
6d20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6d30: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
6d40: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
6d50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6d60: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
6d70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6d80: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
6d90: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
6da0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
6db0: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
6dc0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
6dd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6de0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
6df0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
6e00: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
6e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6e20: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
6e30: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
6e40: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
6e50: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
6e60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6e70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6e80: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
6e90: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
6ea0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6eb0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
6ec0: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
6ed0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6ee0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6ef0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
6f00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6f10: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
6f20: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
6f30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
6f40: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6f70: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
6f80: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
6f90: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(3)}]";....   
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
6fb0: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
6fc0: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
6fd0: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
6fe0: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7010: 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64   while (dataRead
7020: 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20  er.Read())..    
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7040: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
7050: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
7060: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
7070: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7080: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7090: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
70a0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
70b0: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
70c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
70d0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
70e0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
70f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7100: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
7110: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
7120: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
7130: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
7140: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
7150: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7160: 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
71b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
71c0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
71d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
71e0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
71f0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
7200: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
7210: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
7220: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
7230: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
7240: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
7250: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
7260: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
7270: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
7280: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
7290: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
72a0: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
72b0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
72c0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
72d0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
72e0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
72f0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
7300: 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20  d} GetList..    
7310: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
7320: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
7330: 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61  $result..} -clea
7340: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
7350: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
7360: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
7370: 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
7380: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73  results errors s
7390: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
73a0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
73b0: 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61  nstraints \..{ea
73c0: 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
73d0: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
73e0: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
73f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
7400: 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
7410: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
7420: 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52  Lite.INTEROP_VIR
7430: 54 55 41 4c 5f 54 41 42 4c 45 7d 20 2d 6d 61 74  TUAL_TABLE} -mat
7440: 63 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c  ch regexp -resul
7450: 74 20 5c 0d 0a 5b 73 74 72 69 6e 67 20 6d 61 70  t \..[string map
7460: 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20   [list \n \r\n] 
7470: 7b 5e 4f 6b 20 53 79 73 74 65 6d 23 43 6f 64 65  {^Ok System#Code
7480: 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d  Dom#Compiler#Com
7490: 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b  pilerResults#\d+
74a0: 5c 0d 0a 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d  \..\{\} 0 \{\{\}
74b0: 20 74 5c 64 2b 20 5c 7b 5c 7d 20 78 5c 64 2b 5c   t\d+ \{\} x\d+\
74c0: 7d 24 7d 5d 7d 0d 0a 0d 0a 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 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
7520: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
7530: 2e 37 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c  .7 {virtual tabl
7540: 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 61 72  e xBestIndex mar
7550: 73 68 61 6c 6c 69 6e 67 20 28 31 29 7d 20 2d 73  shalling (1)} -s
7560: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
7570: 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 37 2e  leName vtab-1.7.
7580: 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20  db..} -body {.. 
7590: 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20   set id [object 
75a0: 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74  invoke Interpret
75b0: 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78  er.GetActive Nex
75c0: 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61  tId]..  set data
75d0: 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  Source [file joi
75e0: 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69  n [getDatabaseDi
75f0: 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61  rectory] $fileNa
7600: 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c  me]....  set sql
7610: 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45  (1) { \..    CRE
7620: 41 54 45 20 54 41 42 4c 45 20 74 24 7b 69 64 7d  ATE TABLE t${id}
7630: 28 79 20 43 48 41 52 28 31 30 29 20 4e 4f 54 20  (y CHAR(10) NOT 
7640: 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59  NULL PRIMARY KEY
7650: 29 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45  ); \..    CREATE
7660: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 75   VIRTUAL TABLE u
7670: 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24  ${id} USING mod$
7680: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
7690: 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c    set sql(2) { \
76a0: 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
76b0: 4f 20 74 24 7b 69 64 7d 20 53 45 4c 45 43 54 20  O t${id} SELECT 
76c0: 78 20 46 52 4f 4d 20 75 24 7b 69 64 7d 3b 20 5c  x FROM u${id}; \
76d0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
76e0: 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(3) { \..    S
76f0: 45 4c 45 43 54 20 76 24 7b 69 64 7d 2e 79 20 46  ELECT v${id}.y F
7700: 52 4f 4d 20 74 24 7b 69 64 7d 20 76 24 7b 69 64  ROM t${id} v${id
7710: 7d 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49  } LEFT OUTER JOI
7720: 4e 20 5c 0d 0a 20 20 20 20 75 24 7b 69 64 7d 20  N \..    u${id} 
7730: 4f 4e 20 75 24 7b 69 64 7d 2e 78 20 3d 20 76 24  ON u${id}.x = v$
7740: 7b 69 64 7d 2e 79 20 57 48 45 52 45 20 75 24 7b  {id}.y WHERE u${
7750: 69 64 7d 2e 78 20 49 53 20 4e 4f 54 20 4e 55 4c  id}.x IS NOT NUL
7760: 4c 20 5c 0d 0a 20 20 20 20 4f 52 44 45 52 20 42  L \..    ORDER B
7770: 59 20 76 24 7b 69 64 7d 2e 79 20 44 45 53 43 3b  Y v${id}.y DESC;
7780: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
7790: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
77a0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
77b0: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
77c0: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
77d0: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
77e0: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
77f0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
7800: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
7810: 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74  sing Eagle._Cont
7820: 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a  ainers.Public;..
7830: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
7840: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
7850: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
7860: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
7870: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
7880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
7890: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
78a0: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
78b0: 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73  ams string\[\] s
78c0: 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20  trings)..       
78d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
78e0: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
78f0: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
7900: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
7910: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
7920: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
7930: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
7940: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
7950: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
7960: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
7970: 75 72 63 65 7d 3b 22 29 29 0d 0a 20 20 20 20 20  urce};"))..     
7980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7990: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f      connection.O
79a0: 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pen();....      
79b0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
79c0: 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65  .CreateModule(ne
79d0: 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e  w SQLiteModuleEn
79e0: 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20 20  umerable(..     
79f0: 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69           "mod${i
7a00: 64 7d 22 2c 20 73 74 72 69 6e 67 73 29 29 3b 0d  d}", strings));.
7a10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
7a20: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
7a30: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
7a40: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
7a50: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
7a60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7a70: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
7a80: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
7a90: 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d  subst ${sql(1)}]
7aa0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
7ab0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d    result.Add(com
7ac0: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
7ad0: 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e 67 28  uery().ToString(
7ae0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
7af0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7b00: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
7b10: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
7b20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
7b30: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
7b40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7b50: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
7b60: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
7b70: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32   "[subst ${sql(2
7b80: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
7b90: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
7ba0: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
7bb0: 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69  onQuery().ToStri
7bc0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
7bd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7be0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
7bf0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
7c00: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
7c10: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
7c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
7c40: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
7c50: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
7c60: 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(3)}]";....    
7c70: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
7c80: 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  (SQLiteDataReade
7c90: 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63  r dataReader = c
7ca0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65  ommand.ExecuteRe
7cb0: 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20  ader())..       
7cc0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7cd0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
7ce0: 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64  (dataReader.Read
7cf0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
7d00: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
7d10: 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c  d(dataReader\[0\
7d20: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ].ToString());..
7d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
7d60: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
7d70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
7d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
7d90: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
7da0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7db0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7e00: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
7e10: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
7e20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7e30: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
7e40: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
7e50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
7e60: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
7e70: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
7e80: 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44  s [list System.D
7e90: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45  ata.SQLite.dll E
7ea0: 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  agle.dll]]....  
7eb0: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
7ec0: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
7ed0: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
7ee0: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
7ef0: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
7f00: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
7f10: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
7f20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
7f30: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
7f40: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
7f50: 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77  } GetList one tw
7f60: 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20  o three 4 5.0.. 
7f70: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
7f80: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
7f90: 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  }] $result..} -c
7fa0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
7fb0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
7fc0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
7fd0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
7fe0: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
7ff0: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
8000: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
8010: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a  -constraints \..
8020: 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38  {eagle monoBug28
8030: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
8040: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
8050: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
8060: 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  ite\..defineCons
8070: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
8080: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
8090: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 7d 20 2d  VIRTUAL_TABLE} -
80a0: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65  match regexp -re
80b0: 73 75 6c 74 20 5c 0d 0a 5b 73 74 72 69 6e 67 20  sult \..[string 
80c0: 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c  map [list \n \r\
80d0: 6e 5d 20 7b 5e 4f 6b 20 53 79 73 74 65 6d 23 43  n] {^Ok System#C
80e0: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
80f0: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
8100: 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20 30 20 5c 7b 30  \d+\..\{\} 0 \{0
8110: 20 35 20 74 77 6f 20 74 68 72 65 65 20 6f 6e 65   5 two three one
8120: 20 35 5c 2e 30 20 34 5c 7d 24 7d 5d 7d 0d 0a 0d   5\.0 4\}$}]}...
8130: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
8140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8180: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
8190: 74 20 76 74 61 62 2d 31 2e 38 20 7b 76 69 72 74  t vtab-1.8 {virt
81a0: 75 61 6c 20 74 61 62 6c 65 20 78 42 65 73 74 49  ual table xBestI
81b0: 6e 64 65 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67  ndex marshalling
81c0: 20 28 32 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a   (2)} -setup {..
81d0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76    set fileName v
81e0: 74 61 62 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62  tab-1.8.db..} -b
81f0: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
8200: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
8210: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
8220: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
8230: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
8240: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
8250: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
8260: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
8270: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
8280: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
8290: 45 20 74 24 7b 69 64 7d 28 79 20 43 48 41 52 28  E t${id}(y CHAR(
82a0: 31 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49  10) NOT NULL PRI
82b0: 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20  MARY KEY); \..  
82c0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
82d0: 20 54 41 42 4c 45 20 75 24 7b 69 64 7d 20 55 53   TABLE u${id} US
82e0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
82f0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
8300: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e  l(2) { \..    IN
8310: 53 45 52 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d  SERT INTO t${id}
8320: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 75   SELECT x FROM u
8330: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
8340: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
8350: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 76 24  \..    SELECT v$
8360: 7b 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69  {id}.y FROM t${i
8370: 64 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f  d} v${id} LEFT O
8380: 55 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20  UTER JOIN \..   
8390: 20 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64   u${id} ON u${id
83a0: 7d 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57  }.x = v${id}.y W
83b0: 48 45 52 45 20 75 24 7b 69 64 7d 2e 78 20 49 53  HERE u${id}.x IS
83c0: 20 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20   NOT NULL \..   
83d0: 20 41 4e 44 20 75 24 7b 69 64 7d 2e 78 20 42 45   AND u${id}.x BE
83e0: 54 57 45 45 4e 20 27 6f 6e 65 27 20 61 6e 64 20  TWEEN 'one' and 
83f0: 27 74 68 72 65 65 27 20 4f 52 44 45 52 20 42 59  'three' ORDER BY
8400: 20 75 24 7b 69 64 7d 2e 78 20 41 53 43 2c 20 5c   u${id}.x ASC, \
8410: 0d 0a 20 20 20 20 75 24 7b 69 64 7d 2e 78 20 44  ..    u${id}.x D
8420: 45 53 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  ESC; \..  }.... 
8430: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
8440: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
8450: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
8460: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
8470: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
8480: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
8490: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
84a0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
84b0: 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f     using Eagle._
84c0: 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69  Containers.Publi
84d0: 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  c;....    namesp
84e0: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
84f0: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
8500: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
8510: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
8520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8530: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74  public static St
8540: 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74  ringList GetList
8550: 28 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b  (params string\[
8560: 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20  \] strings)..   
8570: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8580: 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73    StringList res
8590: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
85a0: 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
85b0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
85c0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
85d0: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
85e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
85f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
8600: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
8610: 74 61 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a 20  taSource};")).. 
8620: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8630: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
8640: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
8650: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
8660: 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c  tion.CreateModul
8670: 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75  e(new SQLiteModu
8680: 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20  leEnumerable(.. 
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f               "mo
86a0: 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73  d${id}", strings
86b0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
86c0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
86d0: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
86e0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
86f0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
8700: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8710: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
8720: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
8730: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
8740: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
8750: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
8760: 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  (command.Execute
8770: 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72  NonQuery().ToStr
8780: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
8790: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
87a0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
87b0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
87c0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
87d0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
87e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
87f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
8800: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
8810: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
8820: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(2)}]";..     
8830: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
8840: 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  Add(command.Exec
8850: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f  uteNonQuery().To
8860: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
8870: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8880: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
8890: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
88a0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
88b0: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
88c0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
88d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
88e0: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
88f0: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
8900: 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a  ${sql(3)}]";....
8910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
8920: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
8930: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
8940: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
8950: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
8960: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
8980: 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e  ile (dataReader.
8990: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
89a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
89b0: 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72  t.Add(dataReader
89c0: 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29  \[0\].ToString()
89d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
89e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
89f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8a00: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f    connection.Clo
8a10: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
8a20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8a30: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
8a40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8a50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8aa0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
8ab0: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
8ac0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8ad0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8ae0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8af0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
8b00: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
8b10: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
8b20: 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74  rrors [list Syst
8b30: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
8b40: 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a  ll Eagle.dll]]..
8b50: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
8b60: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
8b70: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
8b80: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
8b90: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
8ba0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
8bb0: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
8bc0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
8bd0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
8be0: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
8bf0: 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e  ${id} GetList on
8c00: 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e  e two three 4 5.
8c10: 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  0..      } resul
8c20: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
8c30: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a   ""]}] $result..
8c40: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
8c50: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
8c60: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
8c70: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
8c80: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
8c90: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
8ca0: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
8cb0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
8cc0: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
8cd0: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
8ce0: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
8cf0: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
8d00: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
8d10: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
8d20: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
8d30: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
8d40: 45 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70  E} -match regexp
8d50: 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 5b 73 74 72   -result \..[str
8d60: 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e  ing map [list \n
8d70: 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20 53 79 73 74   \r\n] {^Ok Syst
8d80: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
8d90: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
8da0: 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20 30  lts#\d+\..\{\} 0
8db0: 20 5c 7b 30 20 35 20 6f 6e 65 20 74 68 72 65 65   \{0 5 one three
8dc0: 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \}$}]}....######
8dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8e10: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
8e20: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
8e30: 31 2e 39 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65  1.9 {IEnumerable
8e40: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
8e50: 2f 6c 61 72 67 65 20 62 79 74 65 20 61 72 72 61  /large byte arra
8e60: 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  y} -setup {..  s
8e70: 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62  et fileName vtab
8e80: 2d 31 2e 39 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.9.db..} -body
8e90: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
8ea0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
8eb0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
8ec0: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
8ed0: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
8ee0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
8ef0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
8f00: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
8f10: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
8f20: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
8f30: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
8f40: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
8f50: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
8f60: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
8f70: 4c 45 43 54 20 53 55 4d 28 78 29 20 46 52 4f 4d  LECT SUM(x) FROM
8f80: 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   t${id}; \..  }.
8f90: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
8fa0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
8fb0: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
8fc0: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
8fd0: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
8fe0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
8ff0: 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
9000: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
9010: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
9020: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
9030: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
9040: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
9050: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
9060: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
9070: 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a  ublic static obj
9080: 65 63 74 20 47 65 74 53 75 6d 28 29 0d 0a 20 20  ect GetSum()..  
9090: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
90a0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
90b0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
90c0: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
90d0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
90f0: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
9100: 53 6f 75 72 63 65 7d 3b 22 29 29 0d 0a 20 20 20  Source};"))..   
9110: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9120: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
9130: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
9140: 20 20 20 20 20 20 20 20 62 79 74 65 5c 5b 5c 5d          byte\[\]
9150: 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74   bytes = new byt
9160: 65 5c 5b 31 30 34 38 35 37 36 5c 5d 3b 0d 0a 20  e\[1048576\];.. 
9170: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 52             new R
9180: 61 6e 64 6f 6d 28 29 2e 4e 65 78 74 42 79 74 65  andom().NextByte
9190: 73 28 62 79 74 65 73 29 3b 0d 0a 0d 0a 20 20 20  s(bytes);....   
91a0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
91b0: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
91c0: 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c  (new SQLiteModul
91d0: 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20  eEnumerable(..  
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
91f0: 24 7b 69 64 7d 22 2c 20 62 79 74 65 73 29 29 3b  ${id}", bytes));
9200: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9210: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
9220: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
9230: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
9240: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
9250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9260: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
9270: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
9280: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d  [subst ${sql(1)}
9290: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
92a0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75     command.Execu
92b0: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
92c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
92d0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
92e0: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
92f0: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
9300: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
9310: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
9320: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9330: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
9340: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
9350: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
9360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
9370: 65 74 75 72 6e 20 63 6f 6d 6d 61 6e 64 2e 45 78  eturn command.Ex
9380: 65 63 75 74 65 53 63 61 6c 61 72 28 29 3b 0d 0a  ecuteScalar();..
9390: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
93a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
93b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
93c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9410: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9420: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
9430: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9440: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
9450: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
9460: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
9470: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
9480: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
9490: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
94a0: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
94b0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
94c0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
94d0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
94e0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
94f0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
9500: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
9510: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
9520: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
9530: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
9540: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
9550: 20 47 65 74 53 75 6d 0d 0a 20 20 20 20 20 20 7d   GetSum..      }
9560: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
9570: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
9580: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
9590: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
95a0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
95b0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
95c0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73   result code res
95d0: 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20  ults errors sql 
95e0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
95f0: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 74 69 6d 65 20  leName..} -time 
9600: 74 72 75 65 20 2d 63 6f 6e 73 74 72 61 69 6e 74  true -constraint
9610: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
9620: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
9630: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
9640: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
9650: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
9660: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
9670: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
9680: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
9690: 4c 45 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78  LE} -match regex
96a0: 70 20 2d 72 65 73 75 6c 74 20 5c 0d 0a 5b 73 74  p -result \..[st
96b0: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
96c0: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 20 53 79 73  n \r\n] {^Ok Sys
96d0: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
96e0: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
96f0: 75 6c 74 73 23 5c 64 2b 5c 0d 0a 5c 7b 5c 7d 20  ults#\d+\..\{\} 
9700: 30 20 28 3f 3a 2d 29 3f 5c 64 2b 24 7d 5d 7d 0d  0 (?:-)?\d+$}]}.
9710: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
9720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9760: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
9770: 65 73 74 20 76 74 61 62 2d 31 2e 31 30 20 7b 76  est vtab-1.10 {v
9780: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 52 6f  irtual table xRo
9790: 77 49 64 20 75 6e 69 71 75 65 6e 65 73 73 7d 20  wId uniqueness} 
97a0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20  -setup {..  set 
97b0: 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e  fileName vtab-1.
97c0: 31 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b  10.db..} -body {
97d0: 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65  ..  set id [obje
97e0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
97f0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
9800: 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64  NextId]..  set d
9810: 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20  ataSource [file 
9820: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
9830: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c  eDirectory] $fil
9840: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20  eName]....  set 
9850: 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(1) { \..    
9860: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
9870: 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e  ABLE t${id} USIN
9880: 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20  G mod${id}; \.. 
9890: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
98a0: 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  2) { \..    SELE
98b0: 43 54 20 43 41 53 45 20 57 48 45 4e 20 30 20 54  CT CASE WHEN 0 T
98c0: 48 45 4e 20 72 6f 77 49 64 20 45 4c 53 45 20 72  HEN rowId ELSE r
98d0: 6f 77 49 64 20 45 4e 44 2c 20 5c 0d 0a 20 20 20  owId END, \..   
98e0: 20 20 20 20 20 20 20 20 43 41 53 45 20 57 48 45          CASE WHE
98f0: 4e 20 31 20 54 48 45 4e 20 72 6f 77 49 64 20 45  N 1 THEN rowId E
9900: 4c 53 45 20 72 6f 77 49 64 20 45 4e 44 20 46 52  LSE rowId END FR
9910: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
9920: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
9930: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
9940: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
9950: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
9960: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
9970: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
9980: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
9990: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
99a0: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
99b0: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
99c0: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
99d0: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
99e0: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
99f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
9a00: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
9a10: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
9a20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
9a30: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
9a40: 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74  etList(params st
9a50: 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73  ring\[\] strings
9a60: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9a70: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
9a80: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
9a90: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
9aa0: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
9ab0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
9ac0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
9ad0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
9ae0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
9af0: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
9b00: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
9b10: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
9b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
9b30: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
9b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9b50: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
9b60: 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69  eModule(new SQLi
9b70: 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62  teModuleEnumerab
9b80: 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
9b90: 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73     "mod${id}", s
9ba0: 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20 20  trings));....   
9bb0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9bc0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
9bd0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
9be0: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
9bf0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
9c00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9c10: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
9c20: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
9c30: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
9c50: 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45  lt.Add(command.E
9c60: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
9c70: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
9c80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
9ca0: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
9cb0: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
9cc0: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
9cd0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
9ce0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9cf0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
9d00: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
9d10: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
9d20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9d30: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61   using (SQLiteDa
9d40: 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
9d50: 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78  der = command.Ex
9d60: 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a  ecuteReader())..
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
9da0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61       // NOTE: Ma
9db0: 73 6b 20 6f 66 66 20 74 68 65 20 68 61 73 68 20  sk off the hash 
9dc0: 63 6f 64 65 20 70 6f 72 74 69 6f 6e 20 62 65 63  code portion bec
9dd0: 61 75 73 65 20 69 74 20 64 69 66 66 65 72 73 0d  ause it differs.
9de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9df0: 20 2f 2f 20 20 20 20 20 20 20 62 65 74 77 65 65   //       betwee
9e00: 6e 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  n framework vers
9e10: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ions...         
9e20: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9e30: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
9e40: 6d 61 73 6b 20 3d 20 75 6e 63 68 65 63 6b 65 64  mask = unchecked
9e50: 28 28 6c 6f 6e 67 29 30 78 46 46 46 46 46 46 46  ((long)0xFFFFFFF
9e60: 46 30 30 30 30 30 30 30 30 29 3b 0d 0a 0d 0a 20  F00000000);.... 
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
9e80: 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72  hile (dataReader
9e90: 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
9ea0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9ec0: 65 73 75 6c 74 2e 41 64 64 28 28 64 61 74 61 52  esult.Add((dataR
9ed0: 65 61 64 65 72 2e 47 65 74 49 6e 74 36 34 28 30  eader.GetInt64(0
9ee0: 29 20 26 20 6d 61 73 6b 29 2e 54 6f 53 74 72 69  ) & mask).ToStri
9ef0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
9f00: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
9f10: 2e 41 64 64 28 28 64 61 74 61 52 65 61 64 65 72  .Add((dataReader
9f20: 2e 47 65 74 49 6e 74 36 34 28 31 29 20 26 20 6d  .GetInt64(1) & m
9f30: 61 73 6b 29 2e 54 6f 53 74 72 69 6e 67 28 29 29  ask).ToString())
9f40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9f50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
9f60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9f70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9f80: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
9f90: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
9fa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9fb0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
9fc0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
9fd0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a020: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
a030: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
a040: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
a050: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
a060: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
a070: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
a080: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
a090: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
a0a0: 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79   errors [list Sy
a0b0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a0c0: 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d  .dll Eagle.dll]]
a0d0: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
a0e0: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
a0f0: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
a100: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
a110: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
a120: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
a130: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
a140: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
a150: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
a160: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
a170: 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20  st${id} GetList 
a180: 6f 6e 65 20 6f 6e 65 20 74 77 6f 20 6f 6e 65 20  one one two one 
a190: 74 77 6f 20 74 77 6f 0d 0a 20 20 20 20 20 20 7d  two two..      }
a1a0: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
a1b0: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
a1c0: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
a1d0: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
a1e0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
a1f0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
a200: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73   result code res
a210: 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20  ults errors sql 
a220: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
a230: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
a240: 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
a250: 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
a260: 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
a270: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
a280: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a  m.Data.SQLite\..
a290: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
a2a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
a2b0: 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  e.INTEROP_VIRTUA
a2c0: 4c 5f 54 41 42 4c 45 7d 20 2d 6d 61 74 63 68 20  L_TABLE} -match 
a2d0: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5c  regexp -result \
a2e0: 0d 0a 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c  ..[string map [l
a2f0: 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f  ist \n \r\n] {^O
a300: 6b 20 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  k System#CodeDom
a310: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
a320: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 5c 0d 0a  erResults#\d+\..
a330: 5c 7b 5c 7d 20 30 20 5c 7b 30 20 34 32 39 34 39  \{\} 0 \{0 42949
a340: 36 37 32 39 36 20 34 32 39 34 39 36 37 32 39 36  67296 4294967296
a350: 20 38 35 38 39 39 33 34 35 39 32 20 38 35 38 39   8589934592 8589
a360: 39 33 34 35 39 32 20 31 32 38 38 34 39 30 31 38  934592 128849018
a370: 38 38 20 31 32 38 38 34 39 30 31 38 38 38 5c 0d  88 12884901888\.
a380: 0a 31 37 31 37 39 38 36 39 31 38 34 20 31 37 31  .17179869184 171
a390: 37 39 38 36 39 31 38 34 20 32 31 34 37 34 38 33  79869184 2147483
a3a0: 36 34 38 30 20 32 31 34 37 34 38 33 36 34 38 30  6480 21474836480
a3b0: 20 32 35 37 36 39 38 30 33 37 37 36 20 32 35 37   25769803776 257
a3c0: 36 39 38 30 33 37 37 36 5c 7d 24 7d 5d 7d 0d 0a  69803776\}$}]}..
a3d0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
a3e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a3f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a420: 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69 74 65 54 65  #....runSQLiteTe
a430: 73 74 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 54  stEpilogue..runT
a440: 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a           estEpilogue..