System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1b3f87f53c32d86dc80c9318112f4b48fe2b4af5:


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 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
0890: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
08a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
08b0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
08c0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20  n.Open();..     
08d0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
08e0: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
08f0: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ew SQLiteModuleT
0900: 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69  est${id}("mod${i
0910: 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d}"));....      
0920: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
0930: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
0940: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
0950: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
0960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
0970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
0980: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
0990: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
09a0: 71 6c 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  ql}]";..        
09b0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78        command.Ex
09c0: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
09d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
09e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
09f0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
0a00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
0a10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
0a20: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
0a30: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
0a40: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
0a50: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
0a60: 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74  e.dll]....  list
0a70: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
0a80: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
0a90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
0aa0: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
0ab0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
0ac0: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
0ad0: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
0ae0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
0af0: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
0b00: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61  id}.Test${id} Ma
0b10: 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  in..      } resu
0b20: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
0b30: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
0b40: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
0b50: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
0b60: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
0b70: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
0b80: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
0b90: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
0ba0: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
0bb0: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
0bc0: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
0bd0: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
0be0: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
0bf0: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
0c00: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
0c10: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
0c20: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
0c30: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
0c40: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
0c50: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
0c60: 78 70 20 2d 72 65 73 75 6c 74 20 7b 5e 4f 6b 20  xp -result {^Ok 
0c70: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
0c80: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
0c90: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
0ca0: 20 30 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 23 23   0 \{\}$}}....##
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 23 23 23  ################
0ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
0d00: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
0d10: 74 61 62 2d 31 2e 32 2e 31 20 7b 49 45 6e 75 6d  tab-1.2.1 {IEnum
0d20: 65 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74  erable virtual t
0d30: 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a  able} -setup {..
0d40: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76    set fileName v
0d50: 74 61 62 2d 31 2e 32 2e 31 2e 64 62 0d 0a 7d 20  tab-1.2.1.db..} 
0d60: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
0d70: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
0d80: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
0d90: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
0da0: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
0db0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
0dc0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
0dd0: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
0de0: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
0df0: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
0e00: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
0e10: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
0e20: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
0e30: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
0e40: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
0e50: 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   t${id}; \..  }.
0e60: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
0e70: 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20  { \..    UPDATE 
0e80: 74 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31  t${id} SET x = 1
0e90: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
0ea0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
0eb0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
0ec0: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
0ed0: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
0ee0: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
0ef0: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
0f00: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
0f10: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
0f20: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
0f30: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
0f40: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
0f50: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
0f60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
0f70: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
0f80: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
0f90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
0fa0: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
0fb0: 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61  gList GetList(pa
0fc0: 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20  rams string\[\] 
0fd0: 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20  strings)..      
0fe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
0ff0: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
1000: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
1010: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
1020: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
1030: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
1040: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
1050: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
1060: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
1070: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
1080: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
1090: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
10a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10b0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
10c0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
10d0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
10e0: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
10f0: 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c  (new SQLiteModul
1100: 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20  eEnumerable(..  
1110: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
1120: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
1130: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1140: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
1150: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
1160: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
1170: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
1180: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1190: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
11a0: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
11b0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
11c0: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
11d0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
11e0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
11f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
1210: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
1220: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
1230: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
1240: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
1250: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1260: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
1270: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
1280: 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22  ubst ${sql(2)}]"
1290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12a0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
12b0: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
12c0: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
12d0: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
12e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1300: 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65     while (dataRe
1310: 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20  ader.Read())..  
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1330: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
1340: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
1350: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
1360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1370: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1380: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
1390: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
13a0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
13b0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
13c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
13d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
13f0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
1400: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
1410: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
1430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1440: 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74    command.Execut
1450: 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
1460: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1480: 63 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74  ch (SQLiteExcept
1490: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
14a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 52 65 73 75 6c 74 43 6f 64 65  Add(e.ResultCode
14d0: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
14e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
14f0: 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73  esult.Add(e.Mess
1500: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
1510: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1520: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1530: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
1540: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
1550: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1560: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
1570: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1580: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15d0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
15e0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
15f0: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
1600: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
1610: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
1620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
1630: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
1640: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
1650: 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53  s errors [list S
1660: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1670: 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d  e.dll Eagle.dll]
1680: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
1690: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
16a0: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
16b0: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
16c0: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
16d0: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
16e0: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
16f0: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
1700: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1710: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
1720: 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74  est${id} GetList
1730: 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34   one two three 4
1740: 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65   5.0..      } re
1750: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
1760: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
1770: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
1780: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
1790: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
17a0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
17b0: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
17c0: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
17d0: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
17e0: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
17f0: 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
1800: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
1810: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
1820: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
1830: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
1840: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
1850: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
1860: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1870: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
1880: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
1890: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74  gexp -result [st
18a0: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
18b0: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53  n \r\n] {^Ok\..S
18c0: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
18d0: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
18e0: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
18f0: 30 20 5c 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65  0 \{one two thre
1900: 65 20 34 20 35 5c 2e 30 20 45 72 72 6f 72 5c 0d  e 4 5\.0 Error\.
1910: 0a 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72  .\{SQL logic err
1920: 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  or or missing da
1930: 74 61 62 61 73 65 0d 0a 76 69 72 74 75 61 6c 20  tabase..virtual 
1940: 74 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73 20  table "t\d+" is 
1950: 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d  read-only\}\}$}]
1960: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
1970: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1980: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1990: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b0: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
19c0: 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 32 2e 32  {test vtab-1.2.2
19d0: 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69   {IEnumerable vi
19e0: 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73 65  rtual table} -se
19f0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
1a00: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 32 2e 32  eName vtab-1.2.2
1a10: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
1a20: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
1a30: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
1a40: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
1a50: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
1a60: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
1a70: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
1a80: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
1a90: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
1aa0: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
1ab0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
1ac0: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
1ad0: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
1ae0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
1af0: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
1b00: 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20   * FROM t${id}; 
1b10: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
1b20: 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(3) { \..    
1b30: 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53 45  UPDATE t${id} SE
1b40: 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d 0d  T x = 1; \..  }.
1b50: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
1b60: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
1b70: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
1b80: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
1b90: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
1ba0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
1bb0: 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
1bc0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1bd0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67  ;..    using Eag
1be0: 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50  le._Containers.P
1bf0: 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61  ublic;....    na
1c00: 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63  mespace _Dynamic
1c10: 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20  ${id}..    {..  
1c20: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1c30: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
1c40: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
1c50: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1c60: 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74  c StringList Get
1c70: 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69  List(params stri
1c80: 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d  ng\[\] strings).
1c90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1ca0: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
1cb0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
1cc0: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
1cd0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
1ce0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1cf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
1d00: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
1d10: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
1d20: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
1d30: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
1d40: 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d  etFlagsProperty]
1d50: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
1d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
1d70: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
1d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d90: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
1da0: 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ule = new SQLite
1db0: 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65  ModuleEnumerable
1dc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1dd0: 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73     "mod${id}", s
1de0: 74 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20 20  trings);....    
1df0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
1e00: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
1e10: 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  module);....    
1e20: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
1e30: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
1e40: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
1e50: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
1e60: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e80: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
1e90: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
1ea0: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
1eb0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
1ec0: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
1ed0: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
1ee0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ef0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
1f00: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
1f10: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
1f20: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
1f50: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
1f60: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
1f70: 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  (2)}]";....     
1f80: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
1f90: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
1fa0: 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f   dataReader = co
1fb0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61  mmand.ExecuteRea
1fc0: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
1fd0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fe0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
1ff0: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
2000: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2010: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
2020: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
2030: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2050: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2070: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
2080: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
2090: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
20a0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
20b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20c0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
20d0: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
20e0: 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b  bst ${sql(3)}]";
20f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2100: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
2110: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2120: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
2130: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
2140: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2150: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2160: 20 20 20 63 61 74 63 68 20 28 53 51 4c 69 74 65     catch (SQLite
2170: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
2180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21a0: 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65 73 75  esult.Add(e.Resu
21b0: 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28  ltCode.ToString(
21c0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
21d0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
21e0: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
21f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2200: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2210: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
2220: 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
2230: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
2240: 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  tion.Close();.. 
2250: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2260: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2270: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
2280: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22e0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
22f0: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
2300: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2310: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
2320: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2330: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
2340: 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72  true true true r
2350: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c  esults errors [l
2360: 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ist System.Data.
2370: 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65  SQLite.dll Eagle
2380: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74  .dll]]....  list
2390: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
23a0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
23b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
23c0: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
23d0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
23e0: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
23f0: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
2400: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
2410: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
2420: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
2430: 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68  tList one two th
2440: 72 65 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20  ree 4 5.0..     
2450: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
2460: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
2470: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
2480: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
2490: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
24a0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
24b0: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
24c0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
24d0: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
24e0: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
24f0: 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67  straints \..{eag
2500: 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
2510: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
2520: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
2530: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
2540: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
2550: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
2560: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
2570: 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c  UAL_TABLE compil
2580: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
2590: 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c  \..regexp -resul
25a0: 74 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c  t [string map [l
25b0: 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f  ist \n \r\n] {^O
25c0: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
25d0: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
25e0: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
25f0: 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74 77 6f  \{\} 0 \{one two
2600: 20 74 68 72 65 65 20 34 20 35 5c 2e 30 20 45 72   three 4 5\.0 Er
2610: 72 6f 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69  ror\..\{SQL logi
2620: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
2630: 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 76 69 72  ng database..vir
2640: 74 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b  tual table "t\d+
2650: 22 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d  " is read-only\}
2660: 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \}$}]}....######
2670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26b0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
26c0: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
26d0: 31 2e 33 2e 31 20 7b 49 45 6e 75 6d 65 72 61 62  1.3.1 {IEnumerab
26e0: 6c 65 3c 54 3e 20 76 69 72 74 75 61 6c 20 74 61  le<T> virtual ta
26f0: 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ble} -setup {.. 
2700: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
2710: 61 62 2d 31 2e 33 2e 31 2e 64 62 0d 0a 7d 20 2d  ab-1.3.1.db..} -
2720: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
2730: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
2740: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
2750: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
2760: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
2770: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
2780: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
2790: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
27a0: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
27b0: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ..    CREATE VIR
27c0: 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64  TUAL TABLE t${id
27d0: 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d  } USING mod${id}
27e0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
27f0: 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20  t sql(2) { \..  
2800: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2810: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
2820: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
2830: 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74   \..    UPDATE t
2840: 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b  ${id} SET x = 1;
2850: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
2860: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
2870: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
2880: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
2890: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
28a0: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
28b0: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
28c0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
28d0: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
28e0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
28f0: 2e 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63 3b  .SQLite.Generic;
2900: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
2910: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
2920: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
2930: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
2940: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
2950: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2960: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
2970: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
2980: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2990: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
29a0: 69 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c 5b  ist(params int\[
29b0: 5c 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20 20  \] integers)..  
29c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29d0: 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65     StringList re
29e0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
29f0: 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
2a00: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2a10: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
2a20: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
2a30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
2a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a50: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
2a60: 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46  ataSource};[getF
2a70: 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29  lagsProperty]"))
2a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2a90: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
2aa0: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d  ction.Open();...
2ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
2ac0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
2ad0: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
2ae0: 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c  oduleEnumerable<
2af0: 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  int>(..         
2b00: 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c       "mod${id}",
2b10: 20 69 6e 74 65 67 65 72 73 29 29 3b 0d 0a 0d 0a   integers));....
2b20: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2b30: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
2b40: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
2b50: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
2b60: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
2b70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b80: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
2b90: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
2ba0: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
2bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2bc0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
2bd0: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
2be0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2bf0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
2c00: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
2c10: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
2c20: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
2c30: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2c40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c50: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
2c60: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
2c70: 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(2)}]";.... 
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2c90: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
2ca0: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
2cb0: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
2cc0: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
2cd0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
2cf0: 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52  le (dataReader.R
2d00: 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
2d10: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2d20: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
2d30: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
2d40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2d60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d70: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
2d80: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
2d90: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
2da0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
2db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2dc0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
2dd0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
2de0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
2df0: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
2e00: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2e10: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
2e30: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
2e40: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
2e50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e60: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51         catch (SQ
2e70: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29  LiteException e)
2e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ea0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
2eb0: 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72  ResultCode.ToStr
2ec0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
2ed0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
2ee0: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
2ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
2f20: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
2f30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
2f40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
2f50: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
2f60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2fc0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2fd0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
2fe0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ff0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
3000: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
3010: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3020: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
3030: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
3040: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
3050: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
3060: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
3070: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
3080: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
3090: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
30a0: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
30b0: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
30c0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
30d0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
30e0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
30f0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
3100: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
3110: 64 7d 20 47 65 74 4c 69 73 74 20 31 20 32 20 33  d} GetList 1 2 3
3120: 20 34 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65   4 5..      } re
3130: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
3140: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
3150: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
3160: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
3170: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
3180: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
3190: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
31a0: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
31b0: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
31c0: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
31d0: 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f  nts \..{eagle mo
31e0: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
31f0: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
3200: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
3210: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
3220: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
3230: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
3240: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
3250: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
3260: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
3270: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74  gexp -result [st
3280: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
3290: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53  n \r\n] {^Ok\..S
32a0: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
32b0: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
32c0: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
32d0: 30 20 5c 7b 31 20 32 20 33 20 34 20 35 20 45 72  0 \{1 2 3 4 5 Er
32e0: 72 6f 72 20 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67 69  ror \{SQL\..logi
32f0: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
3300: 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 76 69 72  ng database..vir
3310: 74 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b  tual table "t\d+
3320: 22 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d  " is read-only\}
3330: 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \}$}]}....######
3340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3380: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
3390: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
33a0: 31 2e 33 2e 32 20 7b 49 45 6e 75 6d 65 72 61 62  1.3.2 {IEnumerab
33b0: 6c 65 3c 54 3e 20 76 69 72 74 75 61 6c 20 74 61  le<T> virtual ta
33c0: 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ble} -setup {.. 
33d0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
33e0: 61 62 2d 31 2e 33 2e 32 2e 64 62 0d 0a 7d 20 2d  ab-1.3.2.db..} -
33f0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
3400: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
3410: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
3420: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
3430: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
3440: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
3450: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
3460: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
3470: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
3480: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ..    CREATE VIR
3490: 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64  TUAL TABLE t${id
34a0: 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d  } USING mod${id}
34b0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
34c0: 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20  t sql(2) { \..  
34d0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
34e0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
34f0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
3500: 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74   \..    UPDATE t
3510: 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b  ${id} SET x = 1;
3520: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
3530: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
3540: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
3550: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
3560: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
3570: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
3580: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
3590: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
35a0: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
35b0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
35c0: 2e 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63 3b  .SQLite.Generic;
35d0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
35e0: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
35f0: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
3600: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
3610: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
3620: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3630: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
3640: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3650: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3660: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
3670: 69 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c 5b  ist(params int\[
3680: 5c 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20 20  \] integers)..  
3690: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36a0: 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65     StringList re
36b0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
36c0: 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
36d0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
36e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
36f0: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
3700: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
3710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3720: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
3730: 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46  ataSource};[getF
3740: 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29  lagsProperty]"))
3750: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
3760: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
3770: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d  ction.Open();...
3780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
3790: 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
37a0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64   = new SQLiteMod
37b0: 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69 6e  uleEnumerable<in
37c0: 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t>(..           
37d0: 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c       "mod${id}",
37e0: 20 69 6e 74 65 67 65 72 73 29 3b 0d 0a 0d 0a 20   integers);.... 
37f0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
3800: 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75  ction.CreateModu
3810: 6c 65 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20  le(module);.... 
3820: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
3830: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
3840: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
3850: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
3860: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
3870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3880: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
3890: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
38a0: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
38c0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
38d0: 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
38e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
38f0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3900: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
3910: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
3920: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
3930: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3950: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
3960: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
3970: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(2)}]";....  
3980: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
3990: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
39a0: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
39b0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
39c0: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
39d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
39f0: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
3a00: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
3a10: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3a20: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
3a30: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
3a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
3a60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3a70: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
3a80: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
3a90: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
3aa0: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
3ab0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3ac0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
3ad0: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
3ae0: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d  [subst ${sql(3)}
3af0: 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]";....         
3b00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3b10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3b20: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
3b30: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
3b40: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
3b50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3b60: 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c        catch (SQL
3b70: 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  iteException e).
3b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
3b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ba0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52    result.Add(e.R
3bb0: 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69  esultCode.ToStri
3bc0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
3bd0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
3be0: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f  ..            mo
3c20: 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d  dule.Dispose();.
3c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
3c40: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
3c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
3c60: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
3c70: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
3c80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3ce0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3cf0: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
3d00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3d10: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
3d20: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
3d30: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
3d40: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
3d50: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
3d60: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
3d70: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
3d80: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
3d90: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
3da0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
3db0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
3dc0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
3dd0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
3de0: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
3df0: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
3e00: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
3e10: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
3e20: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
3e30: 20 47 65 74 4c 69 73 74 20 31 20 32 20 33 20 34   GetList 1 2 3 4
3e40: 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75   5..      } resu
3e50: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
3e60: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
3e70: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
3e80: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
3e90: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
3ea0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
3eb0: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
3ec0: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
3ed0: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
3ee0: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
3ef0: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
3f00: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
3f10: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
3f20: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
3f30: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
3f40: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
3f50: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
3f60: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
3f70: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
3f80: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
3f90: 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72 69  xp -result [stri
3fa0: 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20  ng map [list \n 
3fb0: 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  \r\n] {^Ok\..Sys
3fc0: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
3fd0: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
3fe0: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20  ults#\d+ \{\} 0 
3ff0: 5c 7b 31 20 32 20 33 20 34 20 35 20 45 72 72 6f  \{1 2 3 4 5 Erro
4000: 72 20 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67 69 63 20  r \{SQL\..logic 
4010: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
4020: 20 64 61 74 61 62 61 73 65 0d 0a 76 69 72 74 75   database..virtu
4030: 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22 20  al table "t\d+" 
4040: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d  is read-only\}\}
4050: 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  $}]}....########
4060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
40a0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
40b0: 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e  st {test vtab-1.
40c0: 34 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  4 {virtual table
40d0: 20 66 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f 72   function suppor
40e0: 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  t} -setup {..  s
40f0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62  et fileName vtab
4100: 2d 31 2e 34 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.4.db..} -body
4110: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
4120: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
4130: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
4140: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
4150: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
4160: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
4170: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
4180: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
4190: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
41a0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
41b0: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
41c0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
41d0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
41e0: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
41f0: 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43  LECT Base64(x, C
4200: 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f  AST('one' AS BLO
4210: 42 29 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  B)) FROM t${id};
4220: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
4230: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
4240: 20 53 45 4c 45 43 54 20 42 61 73 65 36 34 28 78   SELECT Base64(x
4250: 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20  , CAST('one' AS 
4260: 42 4c 4f 42 29 2c 20 27 74 77 6f 27 29 20 46 52  BLOB), 'two') FR
4270: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
4280: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 34  }....  set sql(4
4290: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
42a0: 54 20 42 61 73 65 36 35 28 78 2c 20 43 41 53 54  T Base65(x, CAST
42b0: 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29  ('one' AS BLOB))
42c0: 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d   FROM t${id}; \.
42d0: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
42e0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
42f0: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
4300: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
4310: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
4320: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
4330: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
4340: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
4350: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
4360: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
4370: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
4380: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
4390: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
43a0: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
43b0: 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63  class SQLiteFunc
43c0: 74 69 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c 69  tion${id} : SQLi
43d0: 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  teFunction..    
43e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
43f0: 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69  lic SQLiteFuncti
4400: 6f 6e 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20 20  on${id}()..     
4410: 20 20 20 20 20 3a 20 62 61 73 65 28 53 51 4c 69       : base(SQLi
4420: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65  teDateFormats.De
4430: 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b  fault, DateTimeK
4440: 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 2c  ind.Unspecified,
4450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4460: 20 20 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 0d     null, false).
4470: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4480: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
4490: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
44a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
44b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
4500: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
4510: 6a 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20  ject Invoke(..  
4520: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b          object\[
4530: 5c 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20  \] args..       
4540: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
4550: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
4560: 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
4570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4580: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
4590: 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e      if (args.Len
45a0: 67 74 68 20 21 3d 20 32 29 0d 0a 20 20 20 20 20  gth != 2)..     
45b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
45c0: 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
45d0: 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ion(String.Forma
45e0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
45f0: 20 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20    "need exactly 
4600: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 67  two arguments, g
4610: 6f 74 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c 65  ot {0}", args.Le
4620: 6e 67 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ngth));....     
4630: 20 20 20 20 20 6f 62 6a 65 63 74 20 61 72 67 20       object arg 
4640: 3d 20 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a  = args\[1\];....
4650: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
4660: 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  g == null)..    
4670: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
4680: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
4690: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
46a0: 79 70 65 20 3d 20 61 72 67 2e 47 65 74 54 79 70  ype = arg.GetTyp
46b0: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
46c0: 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79    if (type == ty
46d0: 70 65 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a 20  peof(DBNull)).. 
46e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
46f0: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
4700: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
4710: 28 74 79 70 65 20 21 3d 20 74 79 70 65 6f 66 28  (type != typeof(
4720: 62 79 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20  byte\[\]))..    
4730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4740: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
4750: 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d  tion(String.Form
4760: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
4770: 20 20 20 22 61 72 67 75 6d 65 6e 74 20 6d 75 73     "argument mus
4780: 74 20 62 65 20 62 79 74 65 20 61 72 72 61 79 2c  t be byte array,
4790: 20 67 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65 29   got {0}", type)
47a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
47b0: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
47c0: 6f 42 61 73 65 36 34 53 74 72 69 6e 67 28 28 62  oBase64String((b
47d0: 79 74 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a  yte\[\]) arg);..
47e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
47f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4840: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
4850: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
4860: 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ss SQLiteModuleT
4870: 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74  est${id} : SQLit
4880: 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20  eModuleNoop..   
4890: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
48a0: 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
48b0: 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69 6e  eTest${id}(strin
48c0: 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  g name)..       
48d0: 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29 0d     : base(name).
48e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
48f0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
4900: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
4910: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
4970: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51  blic override SQ
4980: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
4990: 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
49a0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
49b0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20  n connection,.. 
49c0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
49d0: 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  pClientData,..  
49e0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c 5b          string\[
49f0: 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20  \] arguments,.. 
4a00: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
4a10: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
4a20: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
4a30: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
4a40: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  or..          ).
4a50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4a60: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
4a70: 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c 61  rCode rc = Decla
4a80: 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  reTable(..      
4a90: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
4aa0: 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  , "CREATE TABLE 
4ab0: 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72 65  ignored(x);", re
4ac0: 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  f error);....   
4ad0: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d         if (rc !=
4ae0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4af0: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
4b00: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a    return rc;....
4b10: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 44            rc = D
4b20: 65 63 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28 63  eclareFunction(c
4b30: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20 22  onnection, -1, "
4b40: 42 61 73 65 36 34 22 2c 20 72 65 66 20 65 72 72  Base64", ref err
4b50: 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
4b60: 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69    if (rc != SQLi
4b70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4b90: 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  urn rc;....     
4ba0: 20 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77       table = new
4bb0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
4bc0: 62 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d  ble(arguments);.
4bd0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
4be0: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
4bf0: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  e.Ok;..        }
4c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
4c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c50: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
4c60: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
4c70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f  QLiteErrorCode O
4c80: 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
4c90: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
4ca0: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
4cb0: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
4cc0: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
4cd0: 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20  r cursor..      
4ce0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
4cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 73  ..          curs
4d00: 6f 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56  or = new SQLiteV
4d10: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
4d20: 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20  r(table);..     
4d30: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4d40: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
4d50: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
4d60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4db0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
4dc0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 46 69  override bool Fi
4dd0: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
4de0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
4df0: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
4e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
4e10: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a  argumentCount,..
4e20: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4e30: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
4e40: 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e 63    ref SQLiteFunc
4e50: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a  tion function,..
4e60: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
4e70: 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
4e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
4e90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ea0: 20 20 20 20 69 66 20 28 61 72 67 75 6d 65 6e 74      if (argument
4eb0: 43 6f 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20 20  Count != 2)..   
4ec0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ed0: 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
4ee0: 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e  ror(table, Strin
4ef0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4f00: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22           "no \\"
4f10: 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73  {0}\\" functions
4f20: 20 61 63 63 65 70 74 20 7b 31 7d 20 61 72 67 75   accept {1} argu
4f30: 6d 65 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20 20  ment(s)",..     
4f40: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
4f50: 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me, argumentCoun
4f60: 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
4f70: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
4f80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
4f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
4fa0: 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 6e  !String.Equals(n
4fb0: 61 6d 65 2c 20 22 42 61 73 65 36 34 22 2c 0d 0a  ame, "Base64",..
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
4fd0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
4fe0: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
4ff0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
5000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
5010: 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65  TableError(table
5020: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
5030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5040: 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75  "no \\"{0}\\" fu
5050: 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d 65  nctions are name
5060: 64 20 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20  d \\"{1}\\"",.. 
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73               bas
5080: 65 2e 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d  e.Name, name));.
5090: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
50a0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
50b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
50c0: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
50d0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75 6e 63  = new SQLiteFunc
50e0: 74 69 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20 20  tion${id}();..  
50f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
5100: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
5110: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
5120: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5170: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
5180: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
5190: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
51a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
51b0: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
51c0: 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  tList()..       
51d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
51e0: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
51f0: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
5200: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
5210: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
5220: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
5230: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
5240: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
5250: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
5260: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
5270: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
5280: 72 6f 70 65 72 74 79 20 4e 6f 42 69 6e 64 46 75  roperty NoBindFu
5290: 6e 63 74 69 6f 6e 73 5d 22 29 29 0d 0a 20 20 20  nctions]"))..   
52a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
52b0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
52c0: 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20  .Open();..      
52d0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
52e0: 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65  .CreateModule(ne
52f0: 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65  w SQLiteModuleTe
5300: 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64  st${id}("mod${id
5310: 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  }"));....       
5320: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5330: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5340: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
5350: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
5360: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
5370: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
5380: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5390: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
53a0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
53b0: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
53c0: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53e0: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
53f0: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
5400: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
5410: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
5420: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5430: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5440: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
5450: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
5460: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5470: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5480: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
5490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
54a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
54b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
54c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
54d0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
54e0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
54f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
5500: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
5510: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
5530: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
5540: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
5550: 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(2)}]";..      
5560: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5570: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
5580: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
5590: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
55a0: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
55b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
55c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
55d0: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
55e0: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
55f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5600: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
5610: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
5620: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5630: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
5640: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5650: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
5660: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
5670: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
5680: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
5690: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
56a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
56b0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
56c0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
56d0: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
56e0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
56f0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53      result.Add(S
5700: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
5710: 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  }", command.Exec
5720: 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a  uteScalar()));..
5730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5750: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
5760: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
5770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5790: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
57a0: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
57b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
57c0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
57d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
57e0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
57f0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
5800: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
5810: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
5830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5840: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
5850: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
5860: 24 7b 73 71 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20  ${sql(4)}]";..  
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5880: 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e  sult.Add(String.
5890: 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f  Format("{0}", co
58a0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61  mmand.ExecuteSca
58b0: 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20  lar()));..      
58c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
58d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
58e0: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
58f0: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
5900: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5910: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
5920: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
5930: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
5950: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
5960: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
5970: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
5980: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
5990: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
59f0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
5a00: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
5a10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5a20: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
5a30: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
5a40: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
5a50: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
5a60: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
5a70: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
5a80: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
5a90: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
5aa0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
5ab0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
5ac0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
5ad0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
5ae0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
5af0: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
5b00: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
5b10: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
5b20: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
5b30: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
5b40: 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20 20 20   GetList..      
5b50: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
5b60: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
5b70: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
5b80: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
5b90: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
5ba0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
5bb0: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
5bc0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
5bd0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
5be0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
5bf0: 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c  traints \..{eagl
5c00: 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  e monoBug28 comm
5c10: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
5c20: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
5c30: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d  em.Data.SQLite\.
5c40: 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
5c50: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
5c60: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
5c70: 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65  AL_TABLE compile
5c80: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c  CSharp} -match \
5c90: 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  ..regexp -result
5ca0: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69   [string map [li
5cb0: 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b  st \n \r\n] {^Ok
5cc0: 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  \..System#CodeDo
5cd0: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
5ce0: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c  lerResults#\d+ \
5cf0: 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 62 32 35  {\} 0 \{\{\} b25
5d00: 6c 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 5c 0d 0a  l \{SQL logic\..
5d10: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
5d20: 20 64 61 74 61 62 61 73 65 0d 0a 75 6e 61 62 6c   database..unabl
5d30: 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f  e to use functio
5d40: 6e 20 42 61 73 65 36 34 20 69 6e 20 74 68 65 20  n Base64 in the 
5d50: 72 65 71 75 65 73 74 65 64 20 63 6f 6e 74 65 78  requested contex
5d60: 74 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  t\} \{SQL logic 
5d70: 65 72 72 6f 72 20 6f 72 5c 0d 0a 6d 69 73 73 69  error or\..missi
5d80: 6e 67 20 64 61 74 61 62 61 73 65 0d 0a 6e 6f 20  ng database..no 
5d90: 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 42  such function: B
5da0: 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d  ase65\}\}$}]}...
5db0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
5dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e00: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
5e10: 74 20 76 74 61 62 2d 31 2e 35 20 7b 76 69 72 74  t vtab-1.5 {virt
5e20: 75 61 6c 20 74 61 62 6c 65 20 66 75 6e 63 74 69  ual table functi
5e30: 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d 73 65 74  on support} -set
5e40: 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65  up {..  set file
5e50: 4e 61 6d 65 20 76 74 61 62 2d 31 2e 35 2e 64 62  Name vtab-1.5.db
5e60: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
5e70: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
5e80: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
5e90: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
5ea0: 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f  d]..  set dataSo
5eb0: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
5ec0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
5ed0: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
5ee0: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31  ]....  set sql(1
5ef0: 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54  ) { \..    CREAT
5f00: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
5f10: 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64  t${id} USING mod
5f20: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
5f30: 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20  .  set sql(2) { 
5f40: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
5f50: 73 65 36 34 28 78 2c 20 43 41 53 54 28 27 6f 6e  se64(x, CAST('on
5f60: 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f  e' AS BLOB)) FRO
5f70: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
5f80: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29  ....  set sql(3)
5f90: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
5fa0: 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54 28   Base64(x, CAST(
5fb0: 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 2c 20  'one' AS BLOB), 
5fc0: 27 74 77 6f 27 29 20 46 52 4f 4d 20 74 24 7b 69  'two') FROM t${i
5fd0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
5fe0: 73 65 74 20 73 71 6c 28 34 29 20 7b 20 5c 0d 0a  set sql(4) { \..
5ff0: 20 20 20 20 53 45 4c 45 43 54 20 42 61 73 65 36      SELECT Base6
6000: 35 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20  5(x, CAST('one' 
6010: 41 53 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20 74  AS BLOB)) FROM t
6020: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
6030: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
6040: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
6050: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
6060: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
6070: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
6080: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b     using System;
6090: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
60a0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
60b0: 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65  .    using Eagle
60c0: 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62  ._Containers.Pub
60d0: 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  lic;....    name
60e0: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
60f0: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
6100: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53    public class S
6110: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69  QLiteFunction${i
6120: 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74  d} : SQLiteFunct
6130: 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ion..      {..  
6140: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
6150: 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d  iteFunction${id}
6160: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20  ()..          : 
6170: 62 61 73 65 28 53 51 4c 69 74 65 44 61 74 65 46  base(SQLiteDateF
6180: 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c 74 2c 20  ormats.Default, 
6190: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73  DateTimeKind.Uns
61a0: 70 65 63 69 66 69 65 64 2c 0d 0a 20 20 20 20 20  pecified,..     
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c              null
61c0: 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20  , false)..      
61d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
61e0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
61f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6200: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6250: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
6260: 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49 6e  erride object In
6270: 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20  voke(..         
6280: 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61 72 67 73   object\[\] args
6290: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
62a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
62b0: 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20      if (args == 
62c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
62d0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
62e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
62f0: 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 21 3d 20  (args.Length != 
6300: 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2)..            
6310: 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75 6d  return new Argum
6320: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72  entException(Str
6330: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
6340: 20 20 20 20 20 20 20 20 20 20 20 22 6e 65 65 64             "need
6350: 20 65 78 61 63 74 6c 79 20 74 77 6f 20 61 72 67   exactly two arg
6360: 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b 30 7d 22  uments, got {0}"
6370: 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68 29 29 3b  , args.Length));
6380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  ....          ob
6390: 6a 65 63 74 20 61 72 67 20 3d 20 61 72 67 73 5c  ject arg = args\
63a0: 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  [1\];....       
63b0: 20 20 20 69 66 20 28 61 72 67 20 3d 3d 20 6e 75     if (arg == nu
63c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
63d0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
63e0: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
63f0: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 61     Type type = a
6400: 72 67 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d  rg.GetType();...
6410: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
6420: 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 42  ype == typeof(DB
6430: 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  Null))..        
6440: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
6450: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
6460: 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20 21        if (type !
6470: 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5c 5b 5c  = typeof(byte\[\
6480: 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]))..           
6490: 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75   return new Argu
64a0: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74  mentException(St
64b0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 61 72 67              "arg
64d0: 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 62 79  ument must be by
64e0: 74 65 20 61 72 72 61 79 2c 20 67 6f 74 20 7b 30  te array, got {0
64f0: 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a 0d 0a 20  }", type));.... 
6500: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6510: 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73 65 36 34  Convert.ToBase64
6520: 53 74 72 69 6e 67 28 28 62 79 74 65 5c 5b 5c 5d  String((byte\[\]
6530: 29 20 61 72 67 29 3b 0d 0a 20 20 20 20 20 20 20  ) arg);..       
6540: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
6550: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
65a0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
65b0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
65c0: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
65d0: 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  } : SQLiteModule
65e0: 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  Noop..      {.. 
65f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
6600: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
6610: 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  id}(string name)
6620: 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61  ..          : ba
6630: 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  se(name)..      
6640: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
6650: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
6660: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6670: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
66c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
66d0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
66e0: 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a  orCode Create(..
66f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6700: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
6710: 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ction,..        
6720: 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74    IntPtr pClient
6730: 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
6740: 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75   string\[\] argu
6750: 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20  ments,..        
6760: 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
6770: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
6780: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73  .          ref s
6790: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
67a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
67b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
67c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
67d0: 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65  c = DeclareTable
67e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  (..            c
67f0: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41  onnection, "CREA
6800: 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64  TE TABLE ignored
6810: 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72  (x);", ref error
6820: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6830: 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
6840: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
6850: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6860: 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n rc;....       
6870: 20 20 20 72 63 20 3d 20 44 65 63 6c 61 72 65 46     rc = DeclareF
6880: 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65 63 74 69  unction(connecti
6890: 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65 36 34 22  on, -1, "Base64"
68a0: 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d  , ref error);...
68b0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72  .          if (r
68c0: 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
68d0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
68e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b        return rc;
68f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 61  ....          ta
6900: 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ble = new SQLite
6910: 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61 72 67  VirtualTable(arg
6920: 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 20 20  uments);..      
6930: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
6940: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
6950: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6960: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
69b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
69c0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
69d0: 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20  rorCode Open(.. 
69e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
69f0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
6a00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
6a10: 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  f SQLiteVirtualT
6a20: 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
6a30: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  r..          )..
6a40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6a50: 20 20 20 20 20 63 75 72 73 6f 72 20 3d 20 6e 65       cursor = ne
6a60: 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  w SQLiteVirtualT
6a70: 61 62 6c 65 43 75 72 73 6f 72 28 74 61 62 6c 65  ableCursor(table
6a80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
6a90: 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
6aa0: 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20  Code.Ok;..      
6ab0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6b10: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
6b20: 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74  e bool FindFunct
6b30: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
6b40: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
6b50: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
6b60: 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
6b70: 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  tCount,..       
6b80: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
6b90: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53  .          ref S
6ba0: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
6bb0: 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
6bc0: 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 43     ref IntPtr pC
6bd0: 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20  lientData..     
6be0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6bf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
6c00: 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 21  (argumentCount !
6c10: 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 2)..          
6c20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
6c30: 65 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62  etTableError(tab
6c40: 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  le, String.Forma
6c50: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
6c60: 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20    "no \\"{0}\\" 
6c70: 66 75 6e 63 74 69 6f 6e 73 20 61 63 63 65 70 74  functions accept
6c80: 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74 28 73 29   {1} argument(s)
6c90: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
6ca0: 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20 61 72 67    base.Name, arg
6cb0: 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b 0d 0a 0d  umentCount));...
6cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
6cd0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
6ce0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6cf0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
6d00: 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c 20 22 42  .Equals(name, "B
6d10: 61 73 65 36 34 22 2c 0d 0a 20 20 20 20 20 20 20  ase64",..       
6d20: 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
6d30: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
6d40: 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20  gnoreCase))..   
6d50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6d60: 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
6d70: 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e  ror(table, Strin
6d80: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6d90: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22           "no \\"
6da0: 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73  {0}\\" functions
6db0: 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c 22 7b 31   are named \\"{1
6dc0: 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20  }\\"",..        
6dd0: 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c        base.Name,
6de0: 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20   name));....    
6df0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
6e00: 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
6e10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6e20: 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  function = new S
6e30: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69  QLiteFunction${i
6e40: 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  d}();..         
6e50: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
6e60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6e70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ec0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75  ////....      pu
6ed0: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
6ee0: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
6ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
6f00: 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69  blic static Stri
6f10: 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29  ngList GetList()
6f20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6f30: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
6f40: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
6f50: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
6f60: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
6f70: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
6f80: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
6f90: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
6fa0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
6fb0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
6fc0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
6fd0: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
6fe0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
6ff0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
7000: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
7010: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
7020: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
7030: 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74  Module(new SQLit
7040: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
7050: 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a  ("mod${id}"));..
7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
7070: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
7080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7090: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
70a0: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
70b0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
70c0: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
70d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
70f0: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
7100: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
7110: 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (1)}]";..       
7120: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
7130: 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  Add(String.Forma
7140: 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64  t("{0}", command
7150: 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29  .ExecuteScalar()
7160: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
7170: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7180: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7190: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
71a0: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
71b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
71c0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
71d0: 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20  Message);..     
71e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
71f0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
7200: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7210: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
7220: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
7230: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
7240: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
7250: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
7260: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7270: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
7280: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
7290: 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22  ubst ${sql(2)}]"
72a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
72b0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74     result.Add(St
72c0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
72d0: 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75  ", command.Execu
72e0: 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20  teScalar()));.. 
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7300: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7310: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
7320: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
7330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
7350: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
7360: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
7370: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7380: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
7390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
73a0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
73b0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
73c0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
73d0: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
73f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7400: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
7410: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
7420: 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(3)}]";..   
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
7440: 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46  ult.Add(String.F
7450: 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d  ormat("{0}", com
7460: 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c  mand.ExecuteScal
7470: 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20  ar()));..       
7480: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
74a0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
74b0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
74c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
74d0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
74e0: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
74f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7500: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
7510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
7530: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
7540: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
7550: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
7560: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
7570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7580: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
7590: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
75a0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 34   "[subst ${sql(4
75b0: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
75c0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
75d0: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
75e0: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
75f0: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
7600: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7610: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
7630: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
7640: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
7650: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7660: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
7670: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
7680: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7690: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
76a0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
76b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
76c0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
76d0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  t;..        }...
76e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
76f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
7740: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
7750: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
7760: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
7770: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7780: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
7790: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
77a0: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
77b0: 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20  ts errors [list 
77c0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
77d0: 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c  te.dll Eagle.dll
77e0: 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  ]]....  list $co
77f0: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
7800: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
7810: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
7820: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
7830: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
7840: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
7850: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
7860: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
7870: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
7880: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73  Test${id} GetLis
7890: 74 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  t..      } resul
78a0: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
78b0: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a   ""]}] $result..
78c0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
78d0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
78e0: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
78f0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
7900: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
7910: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
7920: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
7930: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
7940: 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f 42   \..{eagle monoB
7950: 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  ug28 command.sql
7960: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
7970: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
7980: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
7990: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
79a0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
79b0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
79c0: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
79d0: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
79e0: 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72 69 6e  p -result [strin
79f0: 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c  g map [list \n \
7a00: 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74  r\n] {^Ok\..Syst
7a10: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
7a20: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
7a30: 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c  lts#\d+ \{\} 0 \
7a40: 7b 5c 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c  {\{\} b25l \{SQL
7a50: 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 20 6f   logic\..error o
7a60: 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61  r missing databa
7a70: 73 65 0d 0a 28 3f 3a 75 6e 61 62 6c 65 20 74 6f  se..(?:unable to
7a80: 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 42 61   use function Ba
7a90: 73 65 36 34 20 69 6e 20 74 68 65 20 72 65 71 75  se64 in the requ
7aa0: 65 73 74 65 64 20 63 6f 6e 74 65 78 74 7c 6e 65  ested context|ne
7ab0: 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 5c 0d  ed exactly one\.
7ac0: 0a 61 72 67 75 6d 65 6e 74 2c 20 67 6f 74 20 33  .argument, got 3
7ad0: 29 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  )\} \{SQL logic 
7ae0: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
7af0: 20 64 61 74 61 62 61 73 65 0d 0a 6e 6f 20 73 75   database..no su
7b00: 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 42 61 73  ch function: Bas
7b10: 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  e65\}\}$}]}....#
7b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
7b70: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
7b80: 76 74 61 62 2d 31 2e 36 20 7b 76 69 72 74 75 61  vtab-1.6 {virtua
7b90: 6c 20 74 61 62 6c 65 20 72 65 6e 61 6d 65 20 73  l table rename s
7ba0: 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b  upport} -setup {
7bb0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
7bc0: 20 76 74 61 62 2d 31 2e 36 2e 64 62 0d 0a 7d 20   vtab-1.6.db..} 
7bd0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
7be0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
7bf0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
7c00: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
7c10: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
7c20: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
7c30: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
7c40: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
7c50: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
7c60: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
7c70: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
7c80: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
7c90: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
7ca0: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
7cb0: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
7cc0: 24 7b 69 64 7d 20 52 45 4e 41 4d 45 20 54 4f 20  ${id} RENAME TO 
7cd0: 78 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  x${id}; \..  }..
7ce0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
7cf0: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 6e   \..    SELECT n
7d00: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
7d10: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
7d20: 65 20 3d 20 27 74 61 62 6c 65 27 20 4f 52 44 45  e = 'table' ORDE
7d30: 52 20 42 59 20 6e 61 6d 65 3b 20 5c 0d 0a 20 20  R BY name; \..  
7d40: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
7d50: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
7d60: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
7d70: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
7d80: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
7d90: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
7da0: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
7db0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7dc0: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
7dd0: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
7de0: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
7df0: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
7e00: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
7e10: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
7e20: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
7e30: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
7e40: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f  : SQLiteModuleNo
7e50: 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  op..      {..   
7e60: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
7e70: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
7e80: 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a  }(string name)..
7e90: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
7ea0: 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  (name)..        
7eb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
7ec0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
7ed0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7ee0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7f30: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
7f40: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
7f50: 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20  Code Create(..  
7f60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
7f70: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
7f80: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
7f90: 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
7fa0: 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ta,..          s
7fb0: 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65  tring\[\] argume
7fc0: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nts,..          
7fd0: 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
7fe0: 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
7ff0: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
8000: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
8010: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8020: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  {..          SQL
8030: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
8040: 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d  = DeclareTable(.
8050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
8060: 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45  nection, "CREATE
8070: 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78   TABLE ignored(x
8080: 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  );", ref error);
8090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
80a0: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
80b0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
80c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
80d0: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
80e0: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
80f0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
8100: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
8110: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8120: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
8130: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8140: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8190: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
81a0: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
81b0: 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
81c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
81d0: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
81e0: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
81f0: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
8200: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
8210: 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
8220: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8230: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d          cursor =
8240: 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74 75   new SQLiteVirtu
8250: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61  alTableCursor(ta
8260: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
8270: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
8280: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
8290: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
82a0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c  //....      publ
8300: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
8310: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
8320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
8330: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
8340: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29 0d 0a  List GetList()..
8350: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8360: 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20       StringList 
8370: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
8380: 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
8390: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
83a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
83b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
83c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
83d0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
83e0: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
83f0: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
8400: 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22  tFlagsProperty]"
8410: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
8420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
8430: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
8440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
8450: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
8460: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
8470: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 22  oduleTest${id}("
8480: 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a  mod${id}"));....
8490: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
84a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
84c0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
84d0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
84e0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
84f0: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
8500: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8510: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
8520: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
8530: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
8540: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
8550: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
8560: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
8570: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
8580: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
8590: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
85a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
85b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
85c0: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
85d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
85e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
85f0: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
8600: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
8610: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8620: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
8630: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8640: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
8650: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
8660: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
8670: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
8680: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
8690: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
86a0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
86b0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
86c0: 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d  st ${sql(3)}]";.
86d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
86e0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
86f0: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
8700: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
8710: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
8720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8740: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 61         while (da
8750: 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29 29  taReader.Read())
8760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8770: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
8780: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
8790: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
87a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
87b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
87c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
87d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
87e0: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
87f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8810: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
8820: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
8830: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8840: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
8850: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8860: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
8870: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
8880: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
8890: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
88a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
88b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
88c0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
88d0: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
88e0: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8900: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
8910: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
8920: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
8930: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
8940: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8950: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8960: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
8970: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
8980: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8990: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
89a0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
89b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
89c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
89d0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
89e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
89f0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
8a00: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
8a10: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
8a20: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
8a30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8a50: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
8a60: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
8a70: 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(3)}]";....    
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
8a90: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
8aa0: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
8ab0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
8ac0: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
8ad0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8af0: 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65  while (dataReade
8b00: 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  r.Read())..     
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8b20: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
8b30: 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69  ader\[0\].ToStri
8b40: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
8b50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8b60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8b70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8b80: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
8b90: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
8ba0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8bb0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
8bc0: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
8bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
8bf0: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
8c00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
8c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
8c20: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
8c30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8c90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
8ca0: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
8cb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8cc0: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8cd0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
8ce0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
8cf0: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
8d00: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
8d10: 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44  s [list System.D
8d20: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45  ata.SQLite.dll E
8d30: 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  agle.dll]]....  
8d40: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
8d50: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
8d60: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
8d70: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
8d80: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
8d90: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
8da0: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
8db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
8dc0: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
8dd0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
8de0: 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20 20  } GetList..     
8df0: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
8e00: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
8e10: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
8e20: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
8e30: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
8e40: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
8e50: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
8e60: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
8e70: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
8e80: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
8e90: 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67  straints \..{eag
8ea0: 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
8eb0: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
8ec0: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
8ed0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
8ee0: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
8ef0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
8f00: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
8f10: 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c  UAL_TABLE compil
8f20: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
8f30: 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c  \..regexp -resul
8f40: 74 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c  t [string map [l
8f50: 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f  ist \n \r\n] {^O
8f60: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
8f70: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
8f80: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
8f90: 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 74 5c  \{\} 0 \{\{\} t\
8fa0: 64 2b 20 5c 7b 5c 7d 20 78 5c 64 2b 5c 7d 24 7d  d+ \{\} x\d+\}$}
8fb0: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
8fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8fe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8ff0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9000: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
9010: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 37 20   {test vtab-1.7 
9020: 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78  {virtual table x
9030: 42 65 73 74 49 6e 64 65 78 20 6d 61 72 73 68 61  BestIndex marsha
9040: 6c 6c 69 6e 67 20 28 31 29 7d 20 2d 73 65 74 75  lling (1)} -setu
9050: 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e  p {..  set fileN
9060: 61 6d 65 20 76 74 61 62 2d 31 2e 37 2e 64 62 0d  ame vtab-1.7.db.
9070: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
9080: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
9090: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
90a0: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
90b0: 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75  ]..  set dataSou
90c0: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
90d0: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
90e0: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
90f0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29  ....  set sql(1)
9100: 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45   { \..    CREATE
9110: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 28 79 20   TABLE t${id}(y 
9120: 43 48 41 52 28 31 30 29 20 4e 4f 54 20 4e 55 4c  CHAR(10) NOT NUL
9130: 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 20  L PRIMARY KEY); 
9140: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
9150: 52 54 55 41 4c 20 54 41 42 4c 45 20 75 24 7b 69  RTUAL TABLE u${i
9160: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
9170: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
9180: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
9190: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
91a0: 24 7b 69 64 7d 20 53 45 4c 45 43 54 20 78 20 46  ${id} SELECT x F
91b0: 52 4f 4d 20 75 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM u${id}; \.. 
91c0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
91d0: 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  3) { \..    SELE
91e0: 43 54 20 76 24 7b 69 64 7d 2e 79 20 46 52 4f 4d  CT v${id}.y FROM
91f0: 20 74 24 7b 69 64 7d 20 76 24 7b 69 64 7d 20 4c   t${id} v${id} L
9200: 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 5c  EFT OUTER JOIN \
9210: 0d 0a 20 20 20 20 75 24 7b 69 64 7d 20 4f 4e 20  ..    u${id} ON 
9220: 75 24 7b 69 64 7d 2e 78 20 3d 20 76 24 7b 69 64  u${id}.x = v${id
9230: 7d 2e 79 20 57 48 45 52 45 20 75 24 7b 69 64 7d  }.y WHERE u${id}
9240: 2e 78 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 5c  .x IS NOT NULL \
9250: 0d 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 76  ..    ORDER BY v
9260: 24 7b 69 64 7d 2e 79 20 44 45 53 43 3b 20 5c 0d  ${id}.y DESC; \.
9270: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
9280: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
9290: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
92a0: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
92b0: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
92c0: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
92d0: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
92e0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
92f0: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
9300: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
9310: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
9320: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
9330: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
9340: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
9350: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73  static class Tes
9360: 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d  t${id}..      {.
9370: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
9380: 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73  static StringLis
9390: 74 20 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73  t GetList(params
93a0: 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69   string\[\] stri
93b0: 6e 67 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ngs)..        {.
93c0: 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e  .          Strin
93d0: 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e  gList result = n
93e0: 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
93f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73  ....          us
9400: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65  ing (SQLiteConne
9410: 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
9420: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
9430: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
9440: 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f          "Data So
9450: 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63  urce=${dataSourc
9460: 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70  e};[getFlagsProp
9470: 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20 20 20  erty]"))..      
9480: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9490: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
94a0: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
94b0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
94c0: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77  CreateModule(new
94d0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75   SQLiteModuleEnu
94e0: 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  merable(..      
94f0: 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64          "mod${id
9500: 7d 22 2c 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a  }", strings));..
9510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
9520: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
9530: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
9540: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
9550: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
9560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9570: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
9580: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
9590: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
95a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
95b0: 20 72 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d   result.Add(comm
95c0: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
95d0: 65 72 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29  ery().ToString()
95e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
95f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9600: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
9610: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
9620: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
9630: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
9640: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9650: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
9660: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
9670: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
9680: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
9690: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63      result.Add(c
96a0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
96b0: 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e  nQuery().ToStrin
96c0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
96d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
96e0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
96f0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
9700: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
9710: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
9720: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
9740: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
9750: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
9760: 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  (3)}]";....     
9770: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9780: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9790: 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f   dataReader = co
97a0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61  mmand.ExecuteRea
97b0: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
97c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
97d0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
97e0: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
97f0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
9800: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
9810: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
9820: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9840: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
9860: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
9870: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
9880: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
9890: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
98a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9900: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
9910: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
9920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9930: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
9940: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
9950: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
9960: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
9970: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
9980: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
9990: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
99a0: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
99b0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
99c0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
99d0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
99e0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
99f0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
9a00: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
9a10: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
9a20: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
9a30: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
9a40: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
9a50: 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f   GetList one two
9a60: 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20 20   three 4 5.0..  
9a70: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
9a80: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
9a90: 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  ] $result..} -cl
9aa0: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
9ab0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
9ac0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
9ad0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
9ae0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
9af0: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
9b00: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
9b10: 63 6f 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b  constraints \..{
9b20: 65 61 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20  eagle monoBug28 
9b30: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
9b40: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
9b50: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
9b60: 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  te\..defineConst
9b70: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
9b80: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
9b90: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
9ba0: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
9bb0: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
9bc0: 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61 70  sult [string map
9bd0: 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20   [list \n \r\n] 
9be0: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
9bf0: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
9c00: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
9c10: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 30 20 35 20  d+ \{\} 0 \{0 5 
9c20: 74 77 6f 20 74 68 72 65 65 20 6f 6e 65 20 35 5c  two three one 5\
9c30: 2e 30 5c 0d 0a 34 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  .0\..4\}$}]}....
9c40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9c80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
9c90: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
9ca0: 20 76 74 61 62 2d 31 2e 38 20 7b 76 69 72 74 75   vtab-1.8 {virtu
9cb0: 61 6c 20 74 61 62 6c 65 20 78 42 65 73 74 49 6e  al table xBestIn
9cc0: 64 65 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67 20  dex marshalling 
9cd0: 28 32 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  (2)} -setup {.. 
9ce0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
9cf0: 61 62 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62 6f  ab-1.8.db..} -bo
9d00: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
9d10: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
9d20: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
9d30: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
9d40: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
9d50: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
9d60: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
9d70: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
9d80: 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a  set sql(1) { \..
9d90: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
9da0: 20 74 24 7b 69 64 7d 28 79 20 43 48 41 52 28 31   t${id}(y CHAR(1
9db0: 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49 4d  0) NOT NULL PRIM
9dc0: 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20 20  ARY KEY); \..   
9dd0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
9de0: 54 41 42 4c 45 20 75 24 7b 69 64 7d 20 55 53 49  TABLE u${id} USI
9df0: 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a  NG mod${id}; \..
9e00: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
9e10: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53  (2) { \..    INS
9e20: 45 52 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d 20  ERT INTO t${id} 
9e30: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 75 24  SELECT x FROM u$
9e40: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
9e50: 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c    set sql(3) { \
9e60: 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 76 24 7b  ..    SELECT v${
9e70: 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69 64  id}.y FROM t${id
9e80: 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f 55  } v${id} LEFT OU
9e90: 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20 20  TER JOIN \..    
9ea0: 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64 7d  u${id} ON u${id}
9eb0: 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57 48  .x = v${id}.y WH
9ec0: 45 52 45 20 75 24 7b 69 64 7d 2e 78 20 49 53 20  ERE u${id}.x IS 
9ed0: 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20 20  NOT NULL \..    
9ee0: 41 4e 44 20 75 24 7b 69 64 7d 2e 78 20 42 45 54  AND u${id}.x BET
9ef0: 57 45 45 4e 20 27 6f 6e 65 27 20 61 6e 64 20 27  WEEN 'one' and '
9f00: 74 68 72 65 65 27 20 4f 52 44 45 52 20 42 59 20  three' ORDER BY 
9f10: 75 24 7b 69 64 7d 2e 78 20 41 53 43 2c 20 5c 0d  u${id}.x ASC, \.
9f20: 0a 20 20 20 20 75 24 7b 69 64 7d 2e 78 20 44 45  .    u${id}.x DE
9f30: 53 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  SC; \..  }....  
9f40: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
9f50: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
9f60: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
9f70: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
9f80: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
9f90: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20  using System;.. 
9fa0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
9fb0: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20  Data.SQLite;..  
9fc0: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
9fd0: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
9fe0: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
9ff0: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
a000: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
a010: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
a020: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
a030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
a040: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
a050: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
a060: 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c  params string\[\
a070: 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20  ] strings)..    
a080: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a090: 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75   StringList resu
a0a0: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c  lt = new StringL
a0b0: 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
a0c0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
a0d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
a0e0: 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
a0f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
a110: 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74  ata Source=${dat
a120: 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61  aSource};[getFla
a130: 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a  gsProperty]"))..
a140: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a150: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
a160: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
a170: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
a180: 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75  ction.CreateModu
a190: 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64  le(new SQLiteMod
a1a0: 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a  uleEnumerable(..
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
a1c0: 6f 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67  od${id}", string
a1d0: 73 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s));....        
a1e0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
a1f0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
a200: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
a210: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
a220: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
a240: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
a250: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
a260: 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (1)}]";..       
a270: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
a280: 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  d(command.Execut
a290: 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74  eNonQuery().ToSt
a2a0: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
a2b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a2c0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
a2d0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
a2e0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
a2f0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
a300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a320: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
a330: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
a340: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(2)}]";..    
a350: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
a360: 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65  .Add(command.Exe
a370: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54  cuteNonQuery().T
a380: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
a390: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a3a0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
a3b0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
a3c0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
a3d0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
a3e0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
a3f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a400: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
a410: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
a420: 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d   ${sql(3)}]";...
a430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
a440: 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61  sing (SQLiteData
a450: 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65  Reader dataReade
a460: 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  r = command.Exec
a470: 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20  uteReader())..  
a480: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
a4a0: 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72  hile (dataReader
a4b0: 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
a4d0: 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65  lt.Add(dataReade
a4e0: 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28  r\[0\].ToString(
a4f0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
a500: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a510: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a520: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
a530: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
a540: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a550: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
a560: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
a570: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a5c0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a5d0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
a5e0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
a5f0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
a600: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
a610: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
a620: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
a630: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
a640: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
a650: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a660: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
a670: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
a680: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
a690: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
a6a0: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
a6b0: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
a6c0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
a6d0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
a6e0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
a6f0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
a700: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
a710: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f  t${id} GetList o
a720: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35  ne two three 4 5
a730: 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  .0..      } resu
a740: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
a750: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
a760: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
a770: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
a780: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
a790: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
a7a0: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
a7b0: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
a7c0: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
a7d0: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
a7e0: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
a7f0: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
a800: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
a810: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
a820: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
a830: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
a840: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
a850: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
a860: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
a870: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
a880: 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72 69  xp -result [stri
a890: 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20  ng map [list \n 
a8a0: 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  \r\n] {^Ok\..Sys
a8b0: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
a8c0: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
a8d0: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20  ults#\d+ \{\} 0 
a8e0: 5c 7b 30 20 35 20 6f 6e 65 20 74 68 72 65 65 5c  \{0 5 one three\
a8f0: 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }$}]}....#######
a900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a940: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
a950: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
a960: 2e 39 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20  .9 {IEnumerable 
a970: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 2f  virtual table w/
a980: 6c 61 72 67 65 20 62 79 74 65 20 61 72 72 61 79  large byte array
a990: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
a9a0: 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d  t fileName vtab-
a9b0: 31 2e 39 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20  1.9.db..} -body 
a9c0: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
a9d0: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
a9e0: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
a9f0: 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20   NextId]..  set 
aa00: 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65  dataSource [file
aa10: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
aa20: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69  seDirectory] $fi
aa30: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74  leName]....  set
aa40: 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20   sql(1) { \..   
aa50: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
aa60: 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49  TABLE t${id} USI
aa70: 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a  NG mod${id}; \..
aa80: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
aa90: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (2) { \..    SEL
aaa0: 45 43 54 20 53 55 4d 28 78 29 20 46 52 4f 4d 20  ECT SUM(x) FROM 
aab0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
aac0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
aad0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
aae0: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
aaf0: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
ab00: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
ab10: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
ab20: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
ab30: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
ab40: 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ....    namespac
ab50: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d  e _Dynamic${id}.
ab60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
ab70: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
ab80: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
ab90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
aba0: 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65  blic static obje
abb0: 63 74 20 47 65 74 53 75 6d 28 29 0d 0a 20 20 20  ct GetSum()..   
abc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
abd0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
abe0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
abf0: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
ac00: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
ac20: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
ac30: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
ac40: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
ac50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ac60: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
ac70: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
ac80: 20 20 20 20 20 20 20 20 20 62 79 74 65 5c 5b 5c           byte\[\
ac90: 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79  ] bytes = new by
aca0: 74 65 5c 5b 31 30 34 38 35 37 36 5c 5d 3b 0d 0a  te\[1048576\];..
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
acc0: 52 61 6e 64 6f 6d 28 29 2e 4e 65 78 74 42 79 74  Random().NextByt
acd0: 65 73 28 62 79 74 65 73 29 3b 0d 0a 0d 0a 20 20  es(bytes);....  
ace0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
acf0: 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c  tion.CreateModul
ad00: 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75  e(new SQLiteModu
ad10: 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20  leEnumerable(.. 
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f               "mo
ad30: 64 24 7b 69 64 7d 22 2c 20 62 79 74 65 73 29 29  d${id}", bytes))
ad40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ad50: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
ad60: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
ad70: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
ad80: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
ad90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ada0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
adb0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
adc0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
add0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
ade0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
adf0: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ae10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
ae20: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
ae30: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
ae40: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
ae50: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
ae60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ae70: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
ae80: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
ae90: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
aea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aeb0: 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e 64 2e 45  return command.E
aec0: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 3b 0d  xecuteScalar();.
aed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
aee0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
aef0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
af00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
af10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
af50: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
af60: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
af70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
af80: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
af90: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
afa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
afb0: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
afc0: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
afd0: 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  rs System.Data.S
afe0: 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  QLite.dll]....  
aff0: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
b000: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
b010: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
b020: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
b030: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
b040: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
b050: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
b060: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
b070: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
b080: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
b090: 7d 20 47 65 74 53 75 6d 0d 0a 20 20 20 20 20 20  } GetSum..      
b0a0: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
b0b0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
b0c0: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
b0d0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
b0e0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
b0f0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
b100: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
b110: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
b120: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
b130: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 74 69 6d 65  ileName..} -time
b140: 20 74 72 75 65 20 2d 63 6f 6e 73 74 72 61 69 6e   true -constrain
b150: 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e  ts \..{eagle mon
b160: 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73  oBug28 command.s
b170: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
b180: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
b190: 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69  ta.SQLite\..defi
b1a0: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
b1b0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
b1c0: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
b1d0: 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  BLE compileCShar
b1e0: 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67  p} -match \..reg
b1f0: 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72  exp -result [str
b200: 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e  ing map [list \n
b210: 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79   \r\n] {^Ok\..Sy
b220: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
b230: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
b240: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
b250: 20 28 3f 3a 2d 29 3f 5c 64 2b 24 7d 5d 7d 0d 0a   (?:-)?\d+$}]}..
b260: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
b270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b2b0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
b2c0: 73 74 20 76 74 61 62 2d 31 2e 31 30 20 7b 76 69  st vtab-1.10 {vi
b2d0: 72 74 75 61 6c 20 74 61 62 6c 65 20 78 52 6f 77  rtual table xRow
b2e0: 49 64 20 75 6e 69 71 75 65 6e 65 73 73 7d 20 2d  Id uniqueness} -
b2f0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
b300: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 31  ileName vtab-1.1
b310: 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  0.db..} -body {.
b320: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
b330: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
b340: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
b350: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
b360: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
b370: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
b380: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
b390: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
b3a0: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
b3b0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
b3c0: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
b3d0: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
b3e0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
b3f0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
b400: 54 20 43 41 53 45 20 57 48 45 4e 20 30 20 54 48  T CASE WHEN 0 TH
b410: 45 4e 20 72 6f 77 49 64 20 45 4c 53 45 20 72 6f  EN rowId ELSE ro
b420: 77 49 64 20 45 4e 44 2c 20 5c 0d 0a 20 20 20 20  wId END, \..    
b430: 20 20 20 20 20 20 20 43 41 53 45 20 57 48 45 4e         CASE WHEN
b440: 20 31 20 54 48 45 4e 20 72 6f 77 49 64 20 45 4c   1 THEN rowId EL
b450: 53 45 20 72 6f 77 49 64 20 45 4e 44 20 46 52 4f  SE rowId END FRO
b460: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
b470: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
b480: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
b490: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
b4a0: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
b4b0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
b4c0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
b4d0: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
b4e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
b4f0: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
b500: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
b510: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
b520: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
b530: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
b540: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b550: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
b560: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
b570: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b580: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
b590: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
b5a0: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
b5b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b5c0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
b5d0: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
b5e0: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
b5f0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
b600: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
b610: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
b620: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
b630: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
b640: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
b650: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
b660: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
b670: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
b680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
b690: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
b6a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b6b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
b6c0: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
b6d0: 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61  iteModuleEnumera
b6e0: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
b6f0: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
b700: 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20  strings));....  
b710: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
b720: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
b730: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
b740: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
b750: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
b760: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b770: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
b780: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
b790: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
b7b0: 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e  ult.Add(command.
b7c0: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
b7d0: 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ).ToString());..
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
b800: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
b810: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
b820: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
b830: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
b840: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b850: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
b860: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
b870: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
b880: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b890: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44    using (SQLiteD
b8a0: 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65  ataReader dataRe
b8b0: 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45  ader = command.E
b8c0: 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d  xecuteReader()).
b8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
b8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b8f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b900: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d        // NOTE: M
b910: 61 73 6b 20 6f 66 66 20 74 68 65 20 68 61 73 68  ask off the hash
b920: 20 63 6f 64 65 20 70 6f 72 74 69 6f 6e 20 62 65   code portion be
b930: 63 61 75 73 65 20 69 74 20 64 69 66 66 65 72 73  cause it differs
b940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b950: 20 20 2f 2f 20 20 20 20 20 20 20 62 65 74 77 65    //       betwe
b960: 65 6e 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  en framework ver
b970: 73 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  sions...        
b980: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
b990: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
b9a0: 20 6d 61 73 6b 20 3d 20 75 6e 63 68 65 63 6b 65   mask = unchecke
b9b0: 64 28 28 6c 6f 6e 67 29 30 78 46 46 46 46 46 46  d((long)0xFFFFFF
b9c0: 46 46 30 30 30 30 30 30 30 30 29 3b 0d 0a 0d 0a  FF00000000);....
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9e0: 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65  while (dataReade
b9f0: 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  r.Read())..     
ba00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba20: 72 65 73 75 6c 74 2e 41 64 64 28 28 64 61 74 61  result.Add((data
ba30: 52 65 61 64 65 72 2e 47 65 74 49 6e 74 36 34 28  Reader.GetInt64(
ba40: 30 29 20 26 20 6d 61 73 6b 29 2e 54 6f 53 74 72  0) & mask).ToStr
ba50: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
ba60: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
ba70: 74 2e 41 64 64 28 28 64 61 74 61 52 65 61 64 65  t.Add((dataReade
ba80: 72 2e 47 65 74 49 6e 74 36 34 28 31 29 20 26 20  r.GetInt64(1) & 
ba90: 6d 61 73 6b 29 2e 54 6f 53 74 72 69 6e 67 28 29  mask).ToString()
baa0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
bab0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
bac0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bad0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bae0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
baf0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
bb00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bb10: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
bb20: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
bb30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
bb80: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
bb90: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
bba0: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
bbb0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
bbc0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
bbd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
bbe0: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
bbf0: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
bc00: 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53  s errors [list S
bc10: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
bc20: 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d  e.dll Eagle.dll]
bc30: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
bc40: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
bc50: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
bc60: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
bc70: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
bc80: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
bc90: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
bca0: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
bcb0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
bcc0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
bcd0: 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74  est${id} GetList
bce0: 20 6f 6e 65 20 6f 6e 65 20 74 77 6f 20 6f 6e 65   one one two one
bcf0: 20 74 77 6f 20 74 77 6f 0d 0a 20 20 20 20 20 20   two two..      
bd00: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
bd10: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
bd20: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
bd30: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
bd40: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
bd50: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
bd60: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
bd70: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
bd80: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
bd90: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
bda0: 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c  traints \..{eagl
bdb0: 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  e monoBug28 comm
bdc0: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
bdd0: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
bde0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d  em.Data.SQLite\.
bdf0: 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
be00: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
be10: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
be20: 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65  AL_TABLE compile
be30: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c  CSharp} -match \
be40: 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  ..regexp -result
be50: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69   [string map [li
be60: 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b  st \n \r\n] {^Ok
be70: 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  \..System#CodeDo
be80: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
be90: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c  lerResults#\d+ \
bea0: 7b 5c 7d 20 30 20 5c 7b 30 20 34 32 39 34 39 36  {\} 0 \{0 429496
beb0: 37 32 39 36 20 34 32 39 34 39 36 37 32 39 36 5c  7296 4294967296\
bec0: 0d 0a 38 35 38 39 39 33 34 35 39 32 20 38 35 38  ..8589934592 858
bed0: 39 39 33 34 35 39 32 20 31 32 38 38 34 39 30 31  9934592 12884901
bee0: 38 38 38 20 31 32 38 38 34 39 30 31 38 38 38 20  888 12884901888 
bef0: 31 37 31 37 39 38 36 39 31 38 34 20 31 37 31 37  17179869184 1717
bf00: 39 38 36 39 31 38 34 5c 0d 0a 32 31 34 37 34 38  9869184\..214748
bf10: 33 36 34 38 30 20 32 31 34 37 34 38 33 36 34 38  36480 2147483648
bf20: 30 20 32 35 37 36 39 38 30 33 37 37 36 20 32 35  0 25769803776 25
bf30: 37 36 39 38 30 33 37 37 36 5c 7d 24 7d 5d 7d 0d  769803776\}$}]}.
bf40: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
bf50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bf90: 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69 74 65 54  ##....runSQLiteT
bfa0: 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e  estEpilogue..run
bfb0: 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a        TestEpilogue..