System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9bca197be92fef079dd65c0bba405a83bda64de7:


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 43 6f 6c 6c 65 63  ng System.Collec
92f0: 74 69 6f 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e  tions;..    usin
9300: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
9310: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
9320: 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65   Eagle._Containe
9330: 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20  rs.Public;....  
9340: 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e    namespace _Dyn
9350: 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b  amic${id}..    {
9360: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
9370: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
9380: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
9390: 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  } : SQLiteModule
93a0: 45 6e 75 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20  Enumerable..    
93b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
93c0: 6c 69 63 20 73 74 72 69 6e 67 20 52 65 73 75 6c  lic string Resul
93d0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t;....        //
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9420: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9430: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f   public SQLiteMo
9440: 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a  duleTest${id}(..
9450: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9460: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
9470: 20 20 49 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e    IEnumerable en
9480: 75 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20  umerable..      
9490: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
94a0: 20 3a 20 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e   : base(name, en
94b0: 75 6d 65 72 61 62 6c 65 29 0d 0a 20 20 20 20 20  umerable)..     
94c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
94d0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
94e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
94f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9540: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9550: 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 54      // BUGFIX: T
9560: 68 69 73 20 6d 65 74 68 6f 64 20 68 65 6c 70 73  his method helps
9570: 20 76 65 72 69 66 79 20 74 69 63 6b 65 74 20 5c   verify ticket \
9580: 5b 35 36 66 35 31 31 64 32 36 38 5c 5d 20 69 73  [56f511d268\] is
9590: 20 66 69 78 65 64 2e 0d 0a 20 20 20 20 20 20 20   fixed...       
95a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 75 62   //..        pub
95b0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c  lic override SQL
95c0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73  iteErrorCode Bes
95d0: 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
95e0: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
95f0: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
9600: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e          SQLiteIn
9610: 64 65 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20  dex index..     
9620: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
9640: 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43  (index.Outputs.C
9650: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e  onstraintUsages.
9660: 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20  Length > 0)..   
9670: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9680: 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 2e        if (index.
9690: 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  Outputs.Constrai
96a0: 6e 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d  ntUsages\[0\] ==
96b0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
96c0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
96d0: 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
96e0: 6e 28 22 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  n("ConstraintUsa
96f0: 67 65 73 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c  ges\[0\] is null
9700: 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
9710: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
9720: 20 20 20 20 20 52 65 73 75 6c 74 20 3d 20 22 43       Result = "C
9730: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20  onstraintUsages 
9740: 69 73 20 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20  is OK";..       
9750: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9760: 20 20 72 65 74 75 72 6e 20 62 61 73 65 2e 42 65    return base.Be
9770: 73 74 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69  stIndex(table, i
9780: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
9790: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
97a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
97f0: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
9800: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
9810: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
9820: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
9830: 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  atic StringList 
9840: 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73  GetList(params s
9850: 74 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67  tring\[\] string
9860: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
9870: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c           StringL
9880: 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ist result = new
9890: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
98a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
98b0: 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
98c0: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
98d0: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
98e0: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
98f0: 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
9900: 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
9910: 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  ;[getFlagsProper
9920: 74 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ty]"))..        
9930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9940: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
9950: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9960: 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54     SQLiteModuleT
9970: 65 73 74 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20  est${id} module 
9980: 3d 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75  = new SQLiteModu
9990: 6c 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20  leTest${id}(..  
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
99b0: 6f 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67  od${id}", string
99c0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
99d0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
99e0: 65 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c  eateModule(modul
99f0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
9a00: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
9a10: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
9a20: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
9a30: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
9a40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
9a60: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
9a70: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
9a80: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
9a90: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
9aa0: 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  (command.Execute
9ab0: 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72  NonQuery().ToStr
9ac0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
9ad0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9ae0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
9af0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
9b00: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
9b10: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
9b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
9b40: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
9b50: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
9b60: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(2)}]";..     
9b70: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
9b80: 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  Add(command.Exec
9b90: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f  uteNonQuery().To
9ba0: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
9bb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9bc0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9bd0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
9be0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
9bf0: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
9c00: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
9c10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9c20: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
9c30: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
9c40: 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a  ${sql(3)}]";....
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
9c60: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
9c70: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
9c80: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
9c90: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
9ca0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
9cc0: 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e  ile (dataReader.
9cd0: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
9ce0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
9cf0: 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72  t.Add(dataReader
9d00: 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29  \[0\].ToString()
9d10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9d20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9d30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9d40: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64    result.Add(mod
9d50: 75 6c 65 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20  ule.Result);..  
9d60: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
9d70: 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  tion.Close();.. 
9d80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9d90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
9da0: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
9db0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
9dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9e10: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
9e20: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
9e30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9e40: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
9e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9e60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
9e70: 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72  true true true r
9e80: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c  esults errors [l
9e90: 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ist System.Data.
9ea0: 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65  SQLite.dll Eagle
9eb0: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74  .dll]]....  list
9ec0: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
9ed0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
9ee0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
9ef0: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
9f00: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
9f10: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
9f20: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
9f30: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
9f40: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
9f50: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
9f60: 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68  tList one two th
9f70: 72 65 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20  ree 4 5.0..     
9f80: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
9f90: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
9fa0: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
9fb0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
9fc0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
9fd0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
9fe0: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
9ff0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
a000: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
a010: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
a020: 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67  straints \..{eag
a030: 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  le monoBug28 com
a040: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
a050: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
a060: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
a070: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
a080: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
a090: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
a0a0: 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c  UAL_TABLE compil
a0b0: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
a0c0: 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c  \..regexp -resul
a0d0: 74 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c  t [string map [l
a0e0: 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f  ist \n \r\n] {^O
a0f0: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
a100: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
a110: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
a120: 5c 7b 5c 7d 20 30 20 5c 7b 30 20 35 20 74 77 6f  \{\} 0 \{0 5 two
a130: 20 74 68 72 65 65 20 6f 6e 65 20 35 5c 2e 30 5c   three one 5\.0\
a140: 0d 0a 34 20 5c 7b 43 6f 6e 73 74 72 61 69 6e 74  ..4 \{Constraint
a150: 55 73 61 67 65 73 20 69 73 20 4f 4b 5c 7d 5c 7d  Usages is OK\}\}
a160: 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  $}]}....########
a170: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1b0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
a1c0: 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e  st {test vtab-1.
a1d0: 38 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  8 {virtual table
a1e0: 20 78 42 65 73 74 49 6e 64 65 78 20 6d 61 72 73   xBestIndex mars
a1f0: 68 61 6c 6c 69 6e 67 20 28 32 29 7d 20 2d 73 65  halling (2)} -se
a200: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
a210: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 38 2e 64  eName vtab-1.8.d
a220: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
a230: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
a240: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
a250: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
a260: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
a270: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
a280: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
a290: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
a2a0: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
a2b0: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
a2c0: 54 45 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 28  TE TABLE t${id}(
a2d0: 79 20 43 48 41 52 28 31 30 29 20 4e 4f 54 20 4e  y CHAR(10) NOT N
a2e0: 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 29  ULL PRIMARY KEY)
a2f0: 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  ; \..    CREATE 
a300: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 75 24  VIRTUAL TABLE u$
a310: 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b  {id} USING mod${
a320: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
a330: 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
a340: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
a350: 20 74 24 7b 69 64 7d 20 53 45 4c 45 43 54 20 78   t${id} SELECT x
a360: 20 46 52 4f 4d 20 75 24 7b 69 64 7d 3b 20 5c 0d   FROM u${id}; \.
a370: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
a380: 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(3) { \..    SE
a390: 4c 45 43 54 20 76 24 7b 69 64 7d 2e 79 20 46 52  LECT v${id}.y FR
a3a0: 4f 4d 20 74 24 7b 69 64 7d 20 76 24 7b 69 64 7d  OM t${id} v${id}
a3b0: 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e   LEFT OUTER JOIN
a3c0: 20 5c 0d 0a 20 20 20 20 75 24 7b 69 64 7d 20 4f   \..    u${id} O
a3d0: 4e 20 75 24 7b 69 64 7d 2e 78 20 3d 20 76 24 7b  N u${id}.x = v${
a3e0: 69 64 7d 2e 79 20 57 48 45 52 45 20 75 24 7b 69  id}.y WHERE u${i
a3f0: 64 7d 2e 78 20 49 53 20 4e 4f 54 20 4e 55 4c 4c  d}.x IS NOT NULL
a400: 20 5c 0d 0a 20 20 20 20 41 4e 44 20 75 24 7b 69   \..    AND u${i
a410: 64 7d 2e 78 20 42 45 54 57 45 45 4e 20 27 6f 6e  d}.x BETWEEN 'on
a420: 65 27 20 61 6e 64 20 27 74 68 72 65 65 27 20 4f  e' and 'three' O
a430: 52 44 45 52 20 42 59 20 75 24 7b 69 64 7d 2e 78  RDER BY u${id}.x
a440: 20 41 53 43 2c 20 5c 0d 0a 20 20 20 20 75 24 7b   ASC, \..    u${
a450: 69 64 7d 2e 78 20 44 45 53 43 3b 20 5c 0d 0a 20  id}.x DESC; \.. 
a460: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
a470: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
a480: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
a490: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
a4a0: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
a4b0: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
a4c0: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
a4d0: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
a4e0: 6f 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ons;..    using 
a4f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
a500: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
a510: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
a520: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
a530: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
a540: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
a550: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
a560: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
a570: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
a580: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e  : SQLiteModuleEn
a590: 75 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20  umerable..      
a5a0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
a5b0: 63 20 73 74 72 69 6e 67 20 52 65 73 75 6c 74 3b  c string Result;
a5c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
a620: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
a630: 6c 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20  leTest${id}(..  
a640: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
a650: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
a660: 49 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d  IEnumerable enum
a670: 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  erable..        
a680: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a    )..          :
a690: 20 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d   base(name, enum
a6a0: 65 72 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20  erable)..       
a6b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
a6c0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
a6d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a6e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a730: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
a740: 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 54 68 69    // BUGFIX: Thi
a750: 73 20 6d 65 74 68 6f 64 20 68 65 6c 70 73 20 76  s method helps v
a760: 65 72 69 66 79 20 74 69 63 6b 65 74 20 5c 5b 35  erify ticket \[5
a770: 36 66 35 31 31 64 32 36 38 5c 5d 20 69 73 20 66  6f511d268\] is f
a780: 69 78 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ixed...        /
a790: 2f 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  /..        publi
a7a0: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
a7b0: 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49  eErrorCode BestI
a7c0: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
a7d0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
a7e0: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
a7f0: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65        SQLiteInde
a800: 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  x index..       
a810: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
a820: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
a830: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
a840: 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65  straintUsages.Le
a850: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
a860: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a870: 20 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75      if (index.Ou
a880: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
a890: 55 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e  Usages\[0\] == n
a8a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a8b0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
a8c0: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
a8d0: 22 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  "ConstraintUsage
a8e0: 73 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29  s\[0\] is null")
a8f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ;..            e
a900: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
a910: 20 20 20 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e     Result = "Con
a920: 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73  straintUsages is
a930: 20 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20   OK";..         
a940: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a950: 72 65 74 75 72 6e 20 62 61 73 65 2e 42 65 73 74  return base.Best
a960: 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e 64  Index(table, ind
a970: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex);..        }.
a980: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
a990: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a9e0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a9f0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
aa00: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
aa10: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
aa20: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
aa30: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
aa40: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
aa50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
aa60: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
aa70: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
aa80: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
aa90: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
aaa0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
aab0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
aac0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
aad0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
aae0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
aaf0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
ab00: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
ab10: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
ab20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
ab30: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
ab40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab50: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
ab60: 74 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20 3d 20  t${id} module = 
ab70: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
ab80: 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20  Test${id}(..    
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
aba0: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
abb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
abc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
abd0: 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29  teModule(module)
abe0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
abf0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
ac00: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
ac10: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
ac20: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
ac30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ac40: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
ac50: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
ac60: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
ac70: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
ac80: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63      result.Add(c
ac90: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
aca0: 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e  nQuery().ToStrin
acb0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
acc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
acd0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
ace0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
acf0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
ad00: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
ad30: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
ad40: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
ad50: 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (2)}]";..       
ad60: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
ad70: 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  d(command.Execut
ad80: 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74  eNonQuery().ToSt
ad90: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
ada0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
adb0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
adc0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
add0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
ade0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
adf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
ae00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae10: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
ae20: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
ae30: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
ae50: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
ae60: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
ae70: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
ae80: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
ae90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
aeb0: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
aec0: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
aed0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
aee0: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
aef0: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
af00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af10: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
af20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
af30: 72 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64 75 6c  result.Add(modul
af40: 65 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20  e.Result);..    
af50: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
af60: 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  on.Close();..   
af70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
af80: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
af90: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
afa0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
b000: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
b010: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
b020: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
b030: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
b040: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
b050: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72  ..    }..  }] tr
b060: 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73  ue true true res
b070: 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73  ults errors [lis
b080: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
b090: 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64  Lite.dll Eagle.d
b0a0: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  ll]]....  list $
b0b0: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
b0c0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  .      [expr {[i
b0d0: 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72  nfo exists error
b0e0: 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22  s] ? $errors : "
b0f0: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  "}] \..      [ex
b100: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
b110: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
b120: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
b130: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
b140: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c  }.Test${id} GetL
b150: 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  ist one two thre
b160: 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d  e 4 5.0..      }
b170: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
b180: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65  result ""]}] $re
b190: 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  sult..} -cleanup
b1a0: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
b1b0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
b1c0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
b1d0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73   result code res
b1e0: 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20  ults errors sql 
b1f0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
b200: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
b210: 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65  raints \..{eagle
b220: 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61   monoBug28 comma
b230: 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44  nd.sql compile.D
b240: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
b250: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a  m.Data.SQLite\..
b260: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
b270: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
b280: 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  e.INTEROP_VIRTUA
b290: 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43  L_TABLE compileC
b2a0: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d  Sharp} -match \.
b2b0: 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20  .regexp -result 
b2c0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
b2d0: 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c  t \n \r\n] {^Ok\
b2e0: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
b2f0: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
b300: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
b310: 5c 7d 20 30 20 5c 7b 30 20 35 20 6f 6e 65 20 74  \} 0 \{0 5 one t
b320: 68 72 65 65 5c 0d 0a 5c 7b 43 6f 6e 73 74 72 61  hree\..\{Constra
b330: 69 6e 74 55 73 61 67 65 73 20 69 73 20 4f 4b 5c  intUsages is OK\
b340: 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23  }\}$}]}....#####
b350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b390: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
b3a0: 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62  nTest {test vtab
b3b0: 2d 31 2e 39 20 7b 49 45 6e 75 6d 65 72 61 62 6c  -1.9 {IEnumerabl
b3c0: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
b3d0: 77 2f 6c 61 72 67 65 20 62 79 74 65 20 61 72 72  w/large byte arr
b3e0: 61 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  ay} -setup {..  
b3f0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
b400: 62 2d 31 2e 39 2e 64 62 0d 0a 7d 20 2d 62 6f 64  b-1.9.db..} -bod
b410: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
b420: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
b430: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
b440: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
b450: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
b460: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
b470: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
b480: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
b490: 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20  et sql(1) { \.. 
b4a0: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
b4b0: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
b4c0: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
b4d0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
b4e0: 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(2) { \..    S
b4f0: 45 4c 45 43 54 20 53 55 4d 28 78 29 20 46 52 4f  ELECT SUM(x) FRO
b500: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
b510: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
b520: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
b530: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
b540: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
b550: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
b560: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
b570: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
b580: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
b590: 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  e;....    namesp
b5a0: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
b5b0: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
b5c0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
b5d0: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
b5e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b5f0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62  public static ob
b600: 6a 65 63 74 20 47 65 74 53 75 6d 28 29 0d 0a 20  ject GetSum().. 
b610: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b620: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
b630: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
b640: 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
b650: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
b670: 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74  ata Source=${dat
b680: 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61  aSource};[getFla
b690: 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a  gsProperty]"))..
b6a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b6b0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
b6c0: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
b6d0: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5c             byte\
b6e0: 5b 5c 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20  [\] bytes = new 
b6f0: 62 79 74 65 5c 5b 31 30 34 38 35 37 36 5c 5d 3b  byte\[1048576\];
b700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
b710: 77 20 52 61 6e 64 6f 6d 28 29 2e 4e 65 78 74 42  w Random().NextB
b720: 79 74 65 73 28 62 79 74 65 73 29 3b 0d 0a 0d 0a  ytes(bytes);....
b730: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
b740: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64  ection.CreateMod
b750: 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f  ule(new SQLiteMo
b760: 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d  duleEnumerable(.
b770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
b780: 6d 6f 64 24 7b 69 64 7d 22 2c 20 62 79 74 65 73  mod${id}", bytes
b790: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
b7a0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
b7b0: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
b7c0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
b7d0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
b7e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
b800: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
b810: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
b820: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
b830: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78        command.Ex
b840: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
b850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b860: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
b870: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
b880: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
b890: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
b8a0: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
b8b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b8c0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
b8d0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
b8e0: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
b8f0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
b900: 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e 64    return command
b910: 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29  .ExecuteScalar()
b920: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b930: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
b940: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b950: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b9a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
b9b0: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
b9c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b9d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
b9e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
b9f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
ba00: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65  ..  }] true true
ba10: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
ba20: 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74 61  rors System.Data
ba30: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
ba40: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
ba50: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
ba60: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
ba70: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
ba80: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
ba90: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
baa0: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
bab0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
bac0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
bad0: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
bae0: 69 64 7d 20 47 65 74 53 75 6d 0d 0a 20 20 20 20  id} GetSum..    
baf0: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
bb00: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
bb10: 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61  $result..} -clea
bb20: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
bb30: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
bb40: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
bb50: 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
bb60: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73  results errors s
bb70: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
bb80: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 74 69   fileName..} -ti
bb90: 6d 65 20 74 72 75 65 20 2d 63 6f 6e 73 74 72 61  me true -constra
bba0: 69 6e 74 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d  ints \..{eagle m
bbb0: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
bbc0: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
bbd0: 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
bbe0: 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65  Data.SQLite\..de
bbf0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
bc00: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
bc10: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
bc20: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
bc30: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
bc40: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73  egexp -result [s
bc50: 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list 
bc60: 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a  \n \r\n] {^Ok\..
bc70: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
bc80: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
bc90: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
bca0: 20 30 20 28 3f 3a 2d 29 3f 5c 64 2b 24 7d 5d 7d   0 (?:-)?\d+$}]}
bcb0: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
bcc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bcd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bcf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd00: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
bd10: 74 65 73 74 20 76 74 61 62 2d 31 2e 31 30 20 7b  test vtab-1.10 {
bd20: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 52  virtual table xR
bd30: 6f 77 49 64 20 75 6e 69 71 75 65 6e 65 73 73 7d  owId uniqueness}
bd40: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
bd50: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
bd60: 2e 31 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20  .10.db..} -body 
bd70: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
bd80: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
bd90: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
bda0: 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20   NextId]..  set 
bdb0: 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65  dataSource [file
bdc0: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
bdd0: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69  seDirectory] $fi
bde0: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74  leName]....  set
bdf0: 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20   sql(1) { \..   
be00: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
be10: 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49  TABLE t${id} USI
be20: 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a  NG mod${id}; \..
be30: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
be40: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (2) { \..    SEL
be50: 45 43 54 20 43 41 53 45 20 57 48 45 4e 20 30 20  ECT CASE WHEN 0 
be60: 54 48 45 4e 20 72 6f 77 49 64 20 45 4c 53 45 20  THEN rowId ELSE 
be70: 72 6f 77 49 64 20 45 4e 44 2c 20 5c 0d 0a 20 20  rowId END, \..  
be80: 20 20 20 20 20 20 20 20 20 43 41 53 45 20 57 48           CASE WH
be90: 45 4e 20 31 20 54 48 45 4e 20 72 6f 77 49 64 20  EN 1 THEN rowId 
bea0: 45 4c 53 45 20 72 6f 77 49 64 20 45 4e 44 20 46  ELSE rowId END F
beb0: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
bec0: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
bed0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
bee0: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
bef0: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
bf00: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
bf10: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
bf20: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
bf30: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
bf40: 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ite;..    using 
bf50: 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72  Eagle._Container
bf60: 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20  s.Public;....   
bf70: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
bf80: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
bf90: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
bfa0: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
bfb0: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
bfc0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
bfd0: 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  atic StringList 
bfe0: 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73  GetList(params s
bff0: 74 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67  tring\[\] string
c000: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
c010: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c           StringL
c020: 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ist result = new
c030: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
c040: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
c050: 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
c060: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
c070: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
c080: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
c090: 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
c0a0: 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
c0b0: 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  ;[getFlagsProper
c0c0: 74 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ty]"))..        
c0d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c0e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
c0f0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
c100: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
c110: 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53  eateModule(new S
c120: 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65  QLiteModuleEnume
c130: 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  rable(..        
c140: 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22        "mod${id}"
c150: 2c 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a  , strings));....
c160: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
c170: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
c180: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
c190: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
c1a0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
c1b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c1c0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
c1d0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
c1e0: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
c1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
c200: 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e  esult.Add(comman
c210: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
c220: 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  y().ToString());
c230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c240: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
c250: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
c260: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
c270: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
c280: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
c290: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c2a0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
c2b0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
c2c0: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
c2d0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
c2e0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
c2f0: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
c300: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
c310: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
c320: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c330: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c340: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c350: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
c360: 20 4d 61 73 6b 20 6f 66 66 20 74 68 65 20 68 61   Mask off the ha
c370: 73 68 20 63 6f 64 65 20 70 6f 72 74 69 6f 6e 20  sh code portion 
c380: 62 65 63 61 75 73 65 20 69 74 20 64 69 66 66 65  because it diffe
c390: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
c3a0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 74      //       bet
c3b0: 77 65 65 6e 20 66 72 61 6d 65 77 6f 72 6b 20 76  ween framework v
c3c0: 65 72 73 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  ersions...      
c3d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
c3f0: 6e 67 20 6d 61 73 6b 20 3d 20 75 6e 63 68 65 63  ng mask = unchec
c400: 6b 65 64 28 28 6c 6f 6e 67 29 30 78 46 46 46 46  ked((long)0xFFFF
c410: 46 46 46 46 30 30 30 30 30 30 30 30 29 3b 0d 0a  FFFF00000000);..
c420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c430: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
c440: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c470: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 28 64 61    result.Add((da
c480: 74 61 52 65 61 64 65 72 2e 47 65 74 49 6e 74 36  taReader.GetInt6
c490: 34 28 30 29 20 26 20 6d 61 73 6b 29 2e 54 6f 53  4(0) & mask).ToS
c4a0: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
c4c0: 75 6c 74 2e 41 64 64 28 28 64 61 74 61 52 65 61  ult.Add((dataRea
c4d0: 64 65 72 2e 47 65 74 49 6e 74 36 34 28 31 29 20  der.GetInt64(1) 
c4e0: 26 20 6d 61 73 6b 29 2e 54 6f 53 74 72 69 6e 67  & mask).ToString
c4f0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
c500: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c510: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c530: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
c540: 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  n.Close();..    
c550: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c560: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
c570: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
c580: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
c590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
c5e0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
c5f0: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
c600: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
c610: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
c620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
c630: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
c640: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
c650: 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74  lts errors [list
c660: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
c670: 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c  ite.dll Eagle.dl
c680: 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  l]]....  list $c
c690: 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a  ode $results \..
c6a0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e        [expr {[in
c6b0: 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73  fo exists errors
c6c0: 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22  ] ? $errors : ""
c6d0: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
c6e0: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
c6f0: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
c700: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
c710: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
c720: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69  .Test${id} GetLi
c730: 73 74 20 6f 6e 65 20 6f 6e 65 20 74 77 6f 20 6f  st one one two o
c740: 6e 65 20 74 77 6f 20 74 77 6f 0d 0a 20 20 20 20  ne two two..    
c750: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
c760: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
c770: 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61  $result..} -clea
c780: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
c790: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
c7a0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
c7b0: 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
c7c0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73  results errors s
c7d0: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
c7e0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
c7f0: 6e 73 74 72 61 69 6e 74 73 20 5c 0d 0a 7b 65 61  nstraints \..{ea
c800: 67 6c 65 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f  gle monoBug28 co
c810: 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c  mmand.sql compil
c820: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
c830: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
c840: 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
c850: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
c860: 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52  Lite.INTEROP_VIR
c870: 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69  TUAL_TABLE compi
c880: 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68  leCSharp} -match
c890: 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75   \..regexp -resu
c8a0: 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  lt [string map [
c8b0: 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e  list \n \r\n] {^
c8c0: 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65  Ok\..System#Code
c8d0: 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d  Dom#Compiler#Com
c8e0: 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b  pilerResults#\d+
c8f0: 20 5c 7b 5c 7d 20 30 20 5c 7b 30 20 34 32 39 34   \{\} 0 \{0 4294
c900: 39 36 37 32 39 36 20 34 32 39 34 39 36 37 32 39  967296 429496729
c910: 36 5c 0d 0a 38 35 38 39 39 33 34 35 39 32 20 38  6\..8589934592 8
c920: 35 38 39 39 33 34 35 39 32 20 31 32 38 38 34 39  589934592 128849
c930: 30 31 38 38 38 20 31 32 38 38 34 39 30 31 38 38  01888 1288490188
c940: 38 20 31 37 31 37 39 38 36 39 31 38 34 20 31 37  8 17179869184 17
c950: 31 37 39 38 36 39 31 38 34 5c 0d 0a 32 31 34 37  179869184\..2147
c960: 34 38 33 36 34 38 30 20 32 31 34 37 34 38 33 36  4836480 21474836
c970: 34 38 30 20 32 35 37 36 39 38 30 33 37 37 36 20  480 25769803776 
c980: 32 35 37 36 39 38 30 33 37 37 36 5c 7d 24 7d 5d  25769803776\}$}]
c990: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
c9a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c9e0: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
c9f0: 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 31 31 20  {test vtab-1.11 
ca00: 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69 72  {IEnumerable vir
ca10: 74 75 61 6c 20 74 61 62 6c 65 20 77 2f 6f 62 6a  tual table w/obj
ca20: 65 63 74 20 69 64 65 6e 74 69 74 79 7d 20 2d 73  ect identity} -s
ca30: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
ca40: 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 31 31  leName vtab-1.11
ca50: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
ca60: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
ca70: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
ca80: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
ca90: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
caa0: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
cab0: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
cac0: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
cad0: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
cae0: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
caf0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
cb00: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
cb10: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
cb20: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
cb30: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
cb40: 20 72 6f 77 49 64 2c 20 2a 20 46 52 4f 4d 20 74   rowId, * FROM t
cb50: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
cb60: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
cb70: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
cb80: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
cb90: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
cba0: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
cbb0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b     using System;
cbc0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
cbd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
cbe0: 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65  .    using Eagle
cbf0: 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62  ._Containers.Pub
cc00: 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  lic;....    name
cc10: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
cc20: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
cc30: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cc40: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
cc50: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
cc60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cc70: 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69  StringList GetLi
cc80: 73 74 28 70 61 72 61 6d 73 20 73 74 72 69 6e 67  st(params string
cc90: 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20  \[\] strings).. 
cca0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ccb0: 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72      StringList r
ccc0: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
ccd0: 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
cce0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
ccf0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
cd00: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
cd10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cd20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
cd30: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
cd40: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
cd50: 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29  FlagsProperty]")
cd60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
cd80: 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  ection.Open();..
cd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
cda0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d  nnection.CreateM
cdb0: 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65  odule(new SQLite
cdc0: 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65  ModuleEnumerable
cdd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
cde0: 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73 74 72   "mod${id}", str
cdf0: 69 6e 67 73 2c 20 74 72 75 65 29 29 3b 0d 0a 0d  ings, true));...
ce00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
ce10: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
ce20: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
ce30: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
ce40: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
ce50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ce60: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
ce70: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
ce80: 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b  bst ${sql(1)}]";
ce90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cea0: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
ceb0: 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20  onQuery();..    
cec0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ced0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
cee0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
cef0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
cf00: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
cf10: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
cf20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cf30: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
cf40: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
cf50: 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a  ${sql(2)}]";....
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
cf70: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
cf80: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
cf90: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
cfa0: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
cfb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
cfd0: 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e  ile (dataReader.
cfe0: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
cff0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d010: 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61  sult.Add(dataRea
d020: 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e  der\[0\].ToStrin
d030: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
d040: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
d050: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
d060: 31 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  1\].ToString());
d070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d080: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d090: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d0a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d0b0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
d0c0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
d0d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d0e0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
d0f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
d100: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d150: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
d160: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
d170: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
d180: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
d190: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
d1a0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
d1b0: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
d1c0: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
d1d0: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
d1e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
d1f0: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
d200: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
d210: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
d220: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
d230: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
d240: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
d250: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
d260: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
d270: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
d280: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
d290: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
d2a0: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f  t${id} GetList o
d2b0: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35  ne two three 4 5
d2c0: 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  .0..      } resu
d2d0: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
d2e0: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
d2f0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
d300: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
d310: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
d320: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
d330: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
d340: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
d350: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
d360: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
d370: 73 20 5c 0d 0a 7b 65 61 67 6c 65 20 6d 6f 6e 6f  s \..{eagle mono
d380: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
d390: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
d3a0: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
d3b0: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
d3c0: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
d3d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
d3e0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
d3f0: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
d400: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
d410: 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72 69  xp -result [stri
d420: 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20  ng map [list \n 
d430: 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  \r\n] {^Ok\..Sys
d440: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
d450: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
d460: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20  ults#\d+ \{\} 0 
d470: 5c 7b 2d 3f 5c 64 2b 20 6f 6e 65 20 2d 3f 5c 64  \{-?\d+ one -?\d
d480: 2b 20 74 77 6f 20 2d 3f 5c 64 2b 5c 0d 0a 74 68  + two -?\d+\..th
d490: 72 65 65 20 2d 3f 5c 64 2b 20 34 20 2d 3f 5c 64  ree -?\d+ 4 -?\d
d4a0: 2b 20 35 5c 2e 30 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  + 5\.0\}$}]}....
d4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
d500: 0a 0d 0a 72 75 6e 53 51 4c 69 74 65 54 65 73 74  ...runSQLiteTest
d510: 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 54 65 73  Epilogue..runTes
d520: 74 45 70 69 6c 6f 67 75 65 0d 0a                 tEpilogue..