System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 359be5bafcde84773ed7ae643525e424ea517753:


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 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
0bd0: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
0be0: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
0bf0: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
0c00: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
0c10: 53 51 4c 69 74 65 20 64 65 66 69 6e 65 43 6f 6e  SQLite defineCon
0c20: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
0c30: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
0c40: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5c 0d  _VIRTUAL_TABLE\.
0c50: 0a 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20  .compileCSharp} 
0c60: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
0c70: 65 73 75 6c 74 20 5c 0d 0a 7b 5e 4f 6b 20 53 79  esult \..{^Ok Sy
0c80: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
0c90: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
0ca0: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
0cb0: 20 5c 7b 5c 7d 24 7d 7d 0d 0a 0d 0a 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 23 23 23  ################
0d00: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
0d10: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61  unTest {test vta
0d20: 62 2d 31 2e 32 2e 31 20 7b 49 45 6e 75 6d 65 72  b-1.2.1 {IEnumer
0d30: 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74 61 62  able virtual tab
0d40: 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  le} -setup {..  
0d50: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
0d60: 62 2d 31 2e 32 2e 31 2e 64 62 0d 0a 7d 20 2d 62  b-1.2.1.db..} -b
0d70: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
0d80: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
0d90: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
0da0: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
0db0: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
0dc0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
0dd0: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
0de0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
0df0: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
0e00: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
0e10: 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d  UAL TABLE t${id}
0e20: 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b   USING mod${id};
0e30: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
0e40: 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20   sql(2) { \..   
0e50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0e60: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
0e70: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
0e80: 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74 24  \..    UPDATE t$
0e90: 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b 20  {id} SET x = 1; 
0ea0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
0eb0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
0ec0: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
0ed0: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
0ee0: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
0ef0: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
0f00: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
0f10: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
0f20: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73  .SQLite;..    us
0f30: 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61  ing Eagle._Conta
0f40: 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d  iners.Public;...
0f50: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
0f60: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
0f70: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
0f80: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
0f90: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
0fa0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
0fb0: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  c static StringL
0fc0: 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72 61  ist GetList(para
0fd0: 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74  ms string\[\] st
0fe0: 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20 20  rings)..        
0ff0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72  {..          Str
1000: 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d  ingList result =
1010: 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
1020: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1030: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
1040: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
1050: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
1060: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
1070: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
1080: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
1090: 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72  rce};[getFlagsPr
10a0: 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20  operty]"))..    
10b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10c0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
10d0: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
10e0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
10f0: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
1100: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
1110: 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20  numerable(..    
1120: 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b            "mod${
1130: 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29 29 3b  id}", strings));
1140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1150: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
1160: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
1170: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
1180: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
1190: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11a0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
11b0: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
11c0: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d  [subst ${sql(1)}
11d0: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
11e0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75     command.Execu
11f0: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
1200: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1210: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1220: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
1230: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
1240: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
1250: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
1260: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1270: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
1280: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
1290: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
12a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12b0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61   using (SQLiteDa
12c0: 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
12d0: 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78  der = command.Ex
12e0: 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a  ecuteReader())..
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1310: 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64   while (dataRead
1320: 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20  er.Read())..    
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1340: 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61  sult.Add(dataRea
1350: 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e  der\[0\].ToStrin
1360: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1370: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1380: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1390: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
13a0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
13b0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
13c0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
13d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13f0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
1400: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
1410: 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(3)}]";....    
1420: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1430: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1450: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
1460: 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20  onQuery();..    
1470: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1480: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1490: 20 28 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f   (SQLiteExceptio
14a0: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
14b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14c0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
14d0: 64 28 65 2e 52 65 73 75 6c 74 43 6f 64 65 2e 54  d(e.ResultCode.T
14e0: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
14f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
1500: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
1510: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1520: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1530: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1540: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
1550: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
1560: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1570: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
1580: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1590: 20 20 20 20 20 20 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 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15e0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
15f0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
1600: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
1610: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
1620: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
1630: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
1640: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
1650: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
1660: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
1670: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1680: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
1690: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
16a0: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
16b0: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
16c0: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
16d0: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
16e0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
16f0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
1700: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
1710: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
1720: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
1730: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f  t${id} GetList o
1740: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35  ne two three 4 5
1750: 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  .0..      } resu
1760: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
1770: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
1780: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
1790: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
17a0: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
17b0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
17c0: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
17d0: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
17e0: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
17f0: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
1800: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
1810: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
1820: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
1830: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
1840: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
1850: 53 51 4c 69 74 65 20 64 65 66 69 6e 65 43 6f 6e  SQLite defineCon
1860: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
1870: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
1880: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5c 0d  _VIRTUAL_TABLE\.
1890: 0a 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20  .compileCSharp} 
18a0: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
18b0: 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61  esult [string ma
18c0: 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d  p [list \n \r\n]
18d0: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
18e0: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
18f0: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
1900: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e 65  \d+ \{\} 0 \{one
1910: 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 5c 2e   two three 4 5\.
1920: 30 20 45 72 72 6f 72 5c 0d 0a 5c 7b 53 51 4c 20  0 Error\..\{SQL 
1930: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
1940: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 0d  issing database.
1950: 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22  .virtual table "
1960: 74 5c 64 2b 22 20 69 73 20 72 65 61 64 2d 6f 6e  t\d+" is read-on
1970: 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  ly\}\}$}]}....##
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 23 23 23 23 23 23 23 23 23 23 23 23  ################
19c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
19d0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
19e0: 74 61 62 2d 31 2e 32 2e 32 20 7b 49 45 6e 75 6d  tab-1.2.2 {IEnum
19f0: 65 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74  erable virtual t
1a00: 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a  able} -setup {..
1a10: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76    set fileName v
1a20: 74 61 62 2d 31 2e 32 2e 32 2e 64 62 0d 0a 7d 20  tab-1.2.2.db..} 
1a30: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
1a40: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
1a50: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
1a60: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
1a70: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
1a80: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
1a90: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
1aa0: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
1ab0: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
1ac0: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
1ad0: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
1ae0: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
1af0: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
1b00: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
1b10: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1b20: 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   t${id}; \..  }.
1b30: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
1b40: 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20  { \..    UPDATE 
1b50: 74 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31  t${id} SET x = 1
1b60: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
1b70: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
1b80: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
1b90: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
1ba0: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
1bb0: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
1bc0: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
1bd0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
1be0: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
1bf0: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
1c00: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
1c10: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
1c20: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
1c30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
1c40: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
1c50: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
1c60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
1c70: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
1c80: 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61  gList GetList(pa
1c90: 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20  rams string\[\] 
1ca0: 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20  strings)..      
1cb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
1cc0: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
1cd0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
1ce0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
1cf0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
1d00: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
1d10: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
1d20: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
1d40: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
1d50: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
1d60: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
1d70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d80: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
1d90: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
1da0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
1db0: 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 6e  odule module = n
1dc0: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
1dd0: 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20  numerable(..    
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
1df0: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
1e00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
1e20: 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29  teModule(module)
1e30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e40: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
1e50: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
1e60: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
1e70: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
1e80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e90: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
1ea0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
1eb0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
1ec0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
1ed0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
1ee0: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
1f10: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
1f20: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
1f30: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
1f40: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
1f50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f60: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
1f70: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
1f80: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
1f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fa0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44    using (SQLiteD
1fb0: 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65  ataReader dataRe
1fc0: 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45  ader = command.E
1fd0: 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d  xecuteReader()).
1fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
1ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2000: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
2010: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2030: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
2040: 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69  ader\[0\].ToStri
2050: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
2060: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2070: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2080: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2090: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
20a0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
20b0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
20e0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
20f0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
2100: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(3)}]";....   
2110: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2140: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
2150: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20  NonQuery();..   
2160: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2170: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2180: 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74 69  h (SQLiteExcepti
2190: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
21a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21b0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
21c0: 64 64 28 65 2e 52 65 73 75 6c 74 43 6f 64 65 2e  dd(e.ResultCode.
21d0: 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21f0: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
2200: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
2210: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2220: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2230: 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f      module.Dispo
2240: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
2250: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
2260: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
2270: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2280: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
2290: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
22a0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22f0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2300: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
2310: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
2320: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
2330: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
2340: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
2350: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
2360: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
2370: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
2380: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2390: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
23a0: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
23b0: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
23c0: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
23d0: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
23e0: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
23f0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
2400: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
2410: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
2420: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
2430: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
2440: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f  t${id} GetList o
2450: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35  ne two three 4 5
2460: 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  .0..      } resu
2470: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
2480: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
2490: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
24a0: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
24b0: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
24c0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
24d0: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
24e0: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
24f0: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
2500: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
2510: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
2520: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
2530: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
2540: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
2550: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
2560: 53 51 4c 69 74 65 20 64 65 66 69 6e 65 43 6f 6e  SQLite defineCon
2570: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
2580: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
2590: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5c 0d  _VIRTUAL_TABLE\.
25a0: 0a 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20  .compileCSharp} 
25b0: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
25c0: 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61  esult [string ma
25d0: 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d  p [list \n \r\n]
25e0: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
25f0: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
2600: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
2610: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e 65  \d+ \{\} 0 \{one
2620: 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 5c 2e   two three 4 5\.
2630: 30 20 45 72 72 6f 72 5c 0d 0a 5c 7b 53 51 4c 20  0 Error\..\{SQL 
2640: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
2650: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 0d  issing database.
2660: 0a 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22  .virtual table "
2670: 74 5c 64 2b 22 20 69 73 20 72 65 61 64 2d 6f 6e  t\d+" is read-on
2680: 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  ly\}\}$}]}....##
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 23 23 23 23 23 23 23  ################
26c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
26e0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
26f0: 74 61 62 2d 31 2e 33 2e 31 20 7b 49 45 6e 75 6d  tab-1.3.1 {IEnum
2700: 65 72 61 62 6c 65 3c 54 3e 20 76 69 72 74 75 61  erable<T> virtua
2710: 6c 20 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20  l table} -setup 
2720: 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  {..  set fileNam
2730: 65 20 76 74 61 62 2d 31 2e 33 2e 31 2e 64 62 0d  e vtab-1.3.1.db.
2740: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
2750: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
2760: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
2770: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
2780: 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75  ]..  set dataSou
2790: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
27a0: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
27b0: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
27c0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29  ....  set sql(1)
27d0: 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45   { \..    CREATE
27e0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
27f0: 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24  ${id} USING mod$
2800: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
2810: 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c    set sql(2) { \
2820: 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ..    SELECT * F
2830: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
2840: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
2850: 33 29 20 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41  3) { \..    UPDA
2860: 54 45 20 74 24 7b 69 64 7d 20 53 45 54 20 78 20  TE t${id} SET x 
2870: 3d 20 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  = 1; \..  }.... 
2880: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
2890: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
28a0: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
28b0: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
28c0: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
28d0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
28e0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
28f0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
2900: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
2910: 44 61 74 61 2e 53 51 4c 69 74 65 2e 47 65 6e 65  Data.SQLite.Gene
2920: 72 69 63 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ric;..    using 
2930: 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72  Eagle._Container
2940: 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20  s.Public;....   
2950: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
2960: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
2970: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
2980: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
2990: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
29a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
29b0: 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  atic StringList 
29c0: 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 69  GetList(params i
29d0: 6e 74 5c 5b 5c 5d 20 69 6e 74 65 67 65 72 73 29  nt\[\] integers)
29e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
29f0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
2a00: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
2a10: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
2a20: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2a30: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
2a40: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
2a50: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
2a60: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
2a70: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
2a80: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
2a90: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
2aa0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
2ab0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
2ac0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
2ad0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ae0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
2af0: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
2b00: 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61  iteModuleEnumera
2b10: 62 6c 65 3c 69 6e 74 3e 28 0d 0a 20 20 20 20 20  ble<int>(..     
2b20: 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69           "mod${i
2b30: 64 7d 22 2c 20 69 6e 74 65 67 65 72 73 29 29 3b  d}", integers));
2b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b50: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
2b60: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
2b70: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
2b80: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
2b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ba0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
2bb0: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
2bc0: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d  [subst ${sql(1)}
2bd0: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
2be0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75     command.Execu
2bf0: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
2c00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2c20: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
2c30: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
2c40: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
2c50: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
2c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c70: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
2c80: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
2c90: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
2ca0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2cb0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61   using (SQLiteDa
2cc0: 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61  taReader dataRea
2cd0: 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78  der = command.Ex
2ce0: 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a  ecuteReader())..
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d10: 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64   while (dataRead
2d20: 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20  er.Read())..    
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d40: 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61  sult.Add(dataRea
2d50: 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e  der\[0\].ToStrin
2d60: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
2d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d90: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
2da0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
2db0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
2dc0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
2dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2df0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
2e00: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
2e10: 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(3)}]";....    
2e20: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e50: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
2e60: 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20  onQuery();..    
2e70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2e80: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
2e90: 20 28 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f   (SQLiteExceptio
2ea0: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
2eb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ec0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
2ed0: 64 28 65 2e 52 65 73 75 6c 74 43 6f 64 65 2e 54  d(e.ResultCode.T
2ee0: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
2f00: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
2f10: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2f20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2f30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f40: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
2f50: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
2f60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f70: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
2f80: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2f90: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2fe0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2ff0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
3000: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
3010: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
3020: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
3030: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
3040: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
3050: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
3060: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
3070: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
3080: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
3090: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
30a0: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
30b0: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
30c0: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
30d0: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
30e0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
30f0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
3100: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
3110: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
3120: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
3130: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 31  t${id} GetList 1
3140: 20 32 20 33 20 34 20 35 0d 0a 20 20 20 20 20 20   2 3 4 5..      
3150: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
3160: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72   result ""]}] $r
3170: 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75  esult..} -cleanu
3180: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
3190: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
31a0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
31b0: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
31c0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
31d0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
31e0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
31f0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
3200: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
3210: 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e  noBug28 command.
3220: 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41  sql compile.DATA
3230: 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d   SQLite\..System
3240: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66  .Data.SQLite def
3250: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
3260: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
3270: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
3280: 41 42 4c 45 5c 0d 0a 63 6f 6d 70 69 6c 65 43 53  ABLE\..compileCS
3290: 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67  harp} -match reg
32a0: 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72  exp -result [str
32b0: 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e  ing map [list \n
32c0: 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79   \r\n] {^Ok\..Sy
32d0: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
32e0: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
32f0: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
3300: 20 5c 7b 31 20 32 20 33 20 34 20 35 20 45 72 72   \{1 2 3 4 5 Err
3310: 6f 72 20 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67 69 63  or \{SQL\..logic
3320: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
3330: 67 20 64 61 74 61 62 61 73 65 0d 0a 76 69 72 74  g database..virt
3340: 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22  ual table "t\d+"
3350: 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c   is read-only\}\
3360: 7d 24 7d 5d 7d 0d 0a 0d 0a 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 23 23 23 23 23 23 23  ################
3390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
33b0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
33c0: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
33d0: 2e 33 2e 32 20 7b 49 45 6e 75 6d 65 72 61 62 6c  .3.2 {IEnumerabl
33e0: 65 3c 54 3e 20 76 69 72 74 75 61 6c 20 74 61 62  e<T> virtual tab
33f0: 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  le} -setup {..  
3400: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
3410: 62 2d 31 2e 33 2e 32 2e 64 62 0d 0a 7d 20 2d 62  b-1.3.2.db..} -b
3420: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
3430: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
3440: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
3450: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
3460: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
3470: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
3480: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
3490: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
34a0: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
34b0: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
34c0: 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d  UAL TABLE t${id}
34d0: 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b   USING mod${id};
34e0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
34f0: 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20   sql(2) { \..   
3500: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3510: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
3520: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
3530: 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74 24  \..    UPDATE t$
3540: 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b 20  {id} SET x = 1; 
3550: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
3560: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
3570: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
3580: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
3590: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
35a0: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
35b0: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
35c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
35d0: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73  .SQLite;..    us
35e0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
35f0: 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63 3b 0d  SQLite.Generic;.
3600: 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65  .    using Eagle
3610: 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62  ._Containers.Pub
3620: 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  lic;....    name
3630: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
3640: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
3650: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3660: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
3670: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
3680: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3690: 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69  StringList GetLi
36a0: 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c 5b 5c  st(params int\[\
36b0: 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20 20 20  ] integers)..   
36c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36d0: 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73    StringList res
36e0: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
36f0: 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
3700: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3710: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
3720: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
3730: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
3740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
3750: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
3760: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c  taSource};[getFl
3770: 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d  agsProperty]")).
3780: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
3790: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
37a0: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
37c0: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20  teModule module 
37d0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75  = new SQLiteModu
37e0: 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69 6e 74  leEnumerable<int
37f0: 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
3800: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
3810: 69 6e 74 65 67 65 72 73 29 3b 0d 0a 0d 0a 20 20  integers);....  
3820: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
3830: 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c  tion.CreateModul
3840: 65 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20  e(module);....  
3850: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
3860: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
3870: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
3880: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
3890: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
38a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
38b0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
38c0: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
38d0: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
38f0: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
3900: 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  uery();..       
3910: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3920: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
3930: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
3940: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
3950: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
3960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
3980: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
3990: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
39a0: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(2)}]";....   
39b0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
39c0: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
39d0: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
39e0: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
39f0: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
3a00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a10: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
3a20: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
3a30: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
3a40: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
3a50: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
3a60: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
3a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
3a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3a90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
3aa0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
3ab0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
3ac0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
3ad0: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
3ae0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3af0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
3b00: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
3b10: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
3b20: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
3b30: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
3b40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3b50: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
3b60: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
3b70: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
3b80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3b90: 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69       catch (SQLi
3ba0: 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a  teException e)..
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3bd0: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65   result.Add(e.Re
3be0: 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e  sultCode.ToStrin
3bf0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
3c00: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
3c10: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
3c50: 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a  ule.Dispose();..
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
3c70: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
3c80: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
3c90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3ca0: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
3cb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3d10: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3d20: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
3d30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3d40: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
3d50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3d60: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
3d70: 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65  ] true true true
3d80: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
3d90: 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74  [list System.Dat
3da0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67  a.SQLite.dll Eag
3db0: 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69  le.dll]]....  li
3dc0: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code $result
3dd0: 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  s \..      [expr
3de0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65   {[info exists e
3df0: 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73  rrors] ? $errors
3e00: 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20   : ""}] \..     
3e10: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
3e20: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
3e30: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
3e40: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
3e50: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
3e60: 47 65 74 4c 69 73 74 20 31 20 32 20 33 20 34 20  GetList 1 2 3 4 
3e70: 35 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  5..      } resul
3e80: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
3e90: 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d 0a   ""]}] $result..
3ea0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
3eb0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
3ec0: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
3ed0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
3ee0: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
3ef0: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
3f00: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
3f10: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
3f20: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
3f30: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
3f40: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d   command.sql com
3f50: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
3f60: 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  \..System.Data.S
3f70: 51 4c 69 74 65 20 64 65 66 69 6e 65 43 6f 6e 73  QLite defineCons
3f80: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
3f90: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
3fa0: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5c 0d 0a  VIRTUAL_TABLE\..
3fb0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
3fc0: 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72 65  match regexp -re
3fd0: 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61 70  sult [string map
3fe0: 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20   [list \n \r\n] 
3ff0: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
4000: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
4010: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
4020: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 31 20 32 20  d+ \{\} 0 \{1 2 
4030: 33 20 34 20 35 20 45 72 72 6f 72 20 5c 7b 53 51  3 4 5 Error \{SQ
4040: 4c 5c 0d 0a 6c 6f 67 69 63 20 65 72 72 6f 72 20  L\..logic error 
4050: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
4060: 61 73 65 0d 0a 76 69 72 74 75 61 6c 20 74 61 62  ase..virtual tab
4070: 6c 65 20 22 74 5c 64 2b 22 20 69 73 20 72 65 61  le "t\d+" is rea
4080: 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a  d-only\}\}$}]}..
4090: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
40a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
40b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
40c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
40d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
40e0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
40f0: 73 74 20 76 74 61 62 2d 31 2e 34 20 7b 76 69 72  st vtab-1.4 {vir
4100: 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e 63 74  tual table funct
4110: 69 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d 73 65  ion support} -se
4120: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
4130: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 34 2e 64  eName vtab-1.4.d
4140: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
4150: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
4160: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
4170: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
4180: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
4190: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
41a0: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
41b0: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
41c0: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
41d0: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
41e0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
41f0: 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f   t${id} USING mo
4200: 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  d${id}; \..  }..
4210: 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b  ..  set sql(2) {
4220: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42   \..    SELECT B
4230: 61 73 65 36 34 28 78 2c 20 43 41 53 54 28 27 6f  ase64(x, CAST('o
4240: 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52  ne' AS BLOB)) FR
4250: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
4260: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33  }....  set sql(3
4270: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
4280: 54 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54  T Base64(x, CAST
4290: 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 2c  ('one' AS BLOB),
42a0: 20 27 74 77 6f 27 29 20 46 52 4f 4d 20 74 24 7b   'two') FROM t${
42b0: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
42c0: 20 73 65 74 20 73 71 6c 28 34 29 20 7b 20 5c 0d   set sql(4) { \.
42d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61 73 65  .    SELECT Base
42e0: 36 35 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27  65(x, CAST('one'
42f0: 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20   AS BLOB)) FROM 
4300: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
4310: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
4320: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
4330: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
4340: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
4350: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
4360: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
4370: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
4380: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
4390: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
43a0: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
43b0: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
43c0: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
43d0: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
43e0: 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20     public class 
43f0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
4400: 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63  id} : SQLiteFunc
4410: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  tion..      {.. 
4420: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
4430: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64  LiteFunction${id
4440: 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a  }()..          :
4450: 20 62 61 73 65 28 53 51 4c 69 74 65 44 61 74 65   base(SQLiteDate
4460: 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c 74 2c  Formats.Default,
4470: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e   DateTimeKind.Un
4480: 73 70 65 63 69 66 69 65 64 2c 0d 0a 20 20 20 20  specified,..    
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
44a0: 6c 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  l, false)..     
44b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
44c0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
44d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
44e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
44f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4530: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
4540: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49  verride object I
4550: 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20  nvoke(..        
4560: 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61 72 67    object\[\] arg
4570: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  s..          )..
4580: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4590: 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
45a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
45b0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
45c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
45d0: 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 21 3d   (args.Length !=
45e0: 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   2)..           
45f0: 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75   return new Argu
4600: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74  mentException(St
4610: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
4620: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 65 65              "nee
4630: 64 20 65 78 61 63 74 6c 79 20 74 77 6f 20 61 72  d exactly two ar
4640: 67 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b 30 7d  guments, got {0}
4650: 22 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68 29 29  ", args.Length))
4660: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  ;....          o
4670: 62 6a 65 63 74 20 61 72 67 20 3d 20 61 72 67 73  bject arg = args
4680: 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  \[1\];....      
4690: 20 20 20 20 69 66 20 28 61 72 67 20 3d 3d 20 6e      if (arg == n
46a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
46b0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
46c0: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
46d0: 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
46e0: 61 72 67 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  arg.GetType();..
46f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
4700: 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44  type == typeof(D
4710: 42 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20  BNull))..       
4720: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
4730: 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20  ng.Empty;....   
4740: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20         if (type 
4750: 21 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5c 5b  != typeof(byte\[
4760: 5c 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  \]))..          
4770: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67    return new Arg
4780: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53  umentException(S
4790: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 72               "ar
47b0: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 62  gument must be b
47c0: 79 74 65 20 61 72 72 61 79 2c 20 67 6f 74 20 7b  yte array, got {
47d0: 30 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a 0d 0a  0}", type));....
47e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
47f0: 20 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73 65 36   Convert.ToBase6
4800: 34 53 74 72 69 6e 67 28 28 62 79 74 65 5c 5b 5c  4String((byte\[\
4810: 5d 29 20 61 72 67 29 3b 0d 0a 20 20 20 20 20 20  ]) arg);..      
4820: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
4830: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4880: 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  ...      public 
4890: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
48a0: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
48b0: 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c  d} : SQLiteModul
48c0: 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a  eNoop..      {..
48d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
48e0: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
48f0: 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65  {id}(string name
4900: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62  )..          : b
4910: 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ase(name)..     
4920: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4930: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
4940: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4950: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
49a0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
49b0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
49c0: 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d  rorCode Create(.
49d0: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
49e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
49f0: 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ection,..       
4a00: 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e     IntPtr pClien
4a10: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
4a20: 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67    string\[\] arg
4a30: 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20  uments,..       
4a40: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
4a50: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
4a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
4a70: 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
4a80: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4a90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4aa0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
4ab0: 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c  rc = DeclareTabl
4ac0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4ad0: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45  connection, "CRE
4ae0: 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65  ATE TABLE ignore
4af0: 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f  d(x);", ref erro
4b00: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
4b10: 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
4b20: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4b40: 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  rn rc;....      
4b50: 20 20 20 20 72 63 20 3d 20 44 65 63 6c 61 72 65      rc = Declare
4b60: 46 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65 63 74  Function(connect
4b70: 69 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65 36 34  ion, -1, "Base64
4b80: 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  ", ref error);..
4b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
4ba0: 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
4bb0: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
4bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
4bd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74  ;....          t
4be0: 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  able = new SQLit
4bf0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61 72  eVirtualTable(ar
4c00: 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 20  guments);..     
4c10: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4c20: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
4c30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
4c40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4c90: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
4ca0: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
4cb0: 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a  rrorCode Open(..
4cc0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
4cd0: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
4ce0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  le,..          r
4cf0: 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
4d00: 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
4d10: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  or..          ).
4d20: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4d30: 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d 20 6e        cursor = n
4d40: 65 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ew SQLiteVirtual
4d50: 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61 62 6c  TableCursor(tabl
4d60: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  e);..          r
4d70: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
4d80: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
4d90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4df0: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
4e00: 64 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63  de bool FindFunc
4e10: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
4e20: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
4e30: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
4e40: 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
4e50: 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ntCount,..      
4e60: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
4e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
4e80: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
4e90: 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  unction,..      
4ea0: 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
4eb0: 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20  ClientData..    
4ec0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
4ee0: 20 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20   (argumentCount 
4ef0: 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20  != 2)..         
4f00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4f10: 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61  SetTableError(ta
4f20: 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ble, String.Form
4f30: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
4f40: 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22     "no \\"{0}\\"
4f50: 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 63 65 70   functions accep
4f60: 74 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74 28 73  t {1} argument(s
4f70: 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )",..           
4f80: 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20 61 72     base.Name, ar
4f90: 67 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b 0d 0a  gumentCount));..
4fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4fb0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
4fc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4fd0: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
4fe0: 67 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c 20 22  g.Equals(name, "
4ff0: 42 61 73 65 36 34 22 2c 0d 0a 20 20 20 20 20 20  Base64",..      
5000: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
5010: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
5020: 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
5030: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5040: 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
5050: 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69  rror(table, Stri
5060: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
5070: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c            "no \\
5080: 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e  "{0}\\" function
5090: 73 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c 22 7b  s are named \\"{
50a0: 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20  1}\\"",..       
50b0: 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65         base.Name
50c0: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  , name));....   
50d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
50e0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
50f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5100: 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20   function = new 
5110: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
5120: 69 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  id}();..        
5130: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
5140: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5150: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
51b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
51c0: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
51d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
51e0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
51f0: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
5200: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
5210: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
5220: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
5230: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
5240: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
5250: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
5260: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
5270: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
5280: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
5290: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
52a0: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
52b0: 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74  [getFlagsPropert
52c0: 79 20 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e  y NoBindFunction
52d0: 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  s]"))..         
52e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
52f0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
5300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5310: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
5320: 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69  eModule(new SQLi
5330: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
5340: 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d  }("mod${id}"));.
5350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
5360: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
5370: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5380: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
5390: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
53a0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
53b0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
53c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
53e0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
53f0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
5400: 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(1)}]";..      
5410: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5420: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
5430: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
5440: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
5450: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
5460: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5470: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5480: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
5490: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
54a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
54b0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
54c0: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
54d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
54e0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
54f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5500: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
5510: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
5520: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
5530: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
5540: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
5550: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5560: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
5570: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
5580: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
5590: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
55a0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53      result.Add(S
55b0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
55c0: 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  }", command.Exec
55d0: 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a  uteScalar()));..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
55f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
5610: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
5620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5640: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
5650: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
5660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5670: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
5680: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5690: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
56a0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
56b0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
56c0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
56d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
56e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
56f0: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
5700: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
5710: 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 20 20  ${sql(3)}]";..  
5720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5730: 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e  sult.Add(String.
5740: 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f  Format("{0}", co
5750: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61  mmand.ExecuteSca
5760: 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20  lar()));..      
5770: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5780: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5790: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
57a0: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
57b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
57c0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
57d0: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
57f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
5820: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
5830: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
5840: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
5850: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
5860: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5870: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
5880: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
5890: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
58a0: 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  4)}]";..        
58b0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
58c0: 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  dd(String.Format
58d0: 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e  ("{0}", command.
58e0: 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29  ExecuteScalar())
58f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5900: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5910: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5920: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
5930: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
5940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5950: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
5960: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
5970: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5980: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
5990: 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  n.Close();..    
59a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
59b0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
59c0: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
59d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
59e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a20: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
5a30: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
5a40: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
5a50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
5a60: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
5a70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
5a80: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
5a90: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
5aa0: 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74  lts errors [list
5ab0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
5ac0: 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c  ite.dll Eagle.dl
5ad0: 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  l]]....  list $c
5ae0: 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a  ode $results \..
5af0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e        [expr {[in
5b00: 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73  fo exists errors
5b10: 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22  ] ? $errors : ""
5b20: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
5b30: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
5b40: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
5b50: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
5b60: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
5b70: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69  .Test${id} GetLi
5b80: 73 74 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  st..      } resu
5b90: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
5ba0: 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c 74 0d  t ""]}] $result.
5bb0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
5bc0: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
5bd0: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
5be0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
5bf0: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
5c00: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
5c10: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
5c20: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
5c30: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
5c40: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
5c50: 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f  8 command.sql co
5c60: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
5c70: 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74 61 2e  e\..System.Data.
5c80: 53 51 4c 69 74 65 20 64 65 66 69 6e 65 43 6f 6e  SQLite defineCon
5c90: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
5ca0: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
5cb0: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5c 0d  _VIRTUAL_TABLE\.
5cc0: 0a 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20  .compileCSharp} 
5cd0: 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20 2d 72  -match regexp -r
5ce0: 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 6d 61  esult [string ma
5cf0: 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c 6e 5d  p [list \n \r\n]
5d00: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
5d10: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
5d20: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
5d30: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c  \d+ \{\} 0 \{\{\
5d40: 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c 6f 67  } b25l \{SQL log
5d50: 69 63 5c 0d 0a 65 72 72 6f 72 20 6f 72 20 6d 69  ic\..error or mi
5d60: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 0d 0a  ssing database..
5d70: 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 66 75  unable to use fu
5d80: 6e 63 74 69 6f 6e 20 42 61 73 65 36 34 20 69 6e  nction Base64 in
5d90: 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 63   the requested c
5da0: 6f 6e 74 65 78 74 5c 7d 20 5c 7b 53 51 4c 20 6c  ontext\} \{SQL l
5db0: 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 5c 0d 0a  ogic error or\..
5dc0: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
5dd0: 0d 0a 6e 6f 20 73 75 63 68 20 66 75 6e 63 74 69  ..no such functi
5de0: 6f 6e 3a 20 42 61 73 65 36 35 5c 7d 5c 7d 24 7d  on: Base65\}\}$}
5df0: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
5e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5e40: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
5e50: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 35 20   {test vtab-1.5 
5e60: 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66  {virtual table f
5e70: 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f 72 74 7d  unction support}
5e80: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
5e90: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
5ea0: 2e 35 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b  .5.db..} -body {
5eb0: 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65  ..  set id [obje
5ec0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
5ed0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
5ee0: 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64  NextId]..  set d
5ef0: 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20  ataSource [file 
5f00: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
5f10: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c  eDirectory] $fil
5f20: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20  eName]....  set 
5f30: 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(1) { \..    
5f40: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
5f50: 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e  ABLE t${id} USIN
5f60: 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20  G mod${id}; \.. 
5f70: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
5f80: 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  2) { \..    SELE
5f90: 43 54 20 42 61 73 65 36 34 28 78 2c 20 43 41 53  CT Base64(x, CAS
5fa0: 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29  T('one' AS BLOB)
5fb0: 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c  ) FROM t${id}; \
5fc0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
5fd0: 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(3) { \..    S
5fe0: 45 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20  ELECT Base64(x, 
5ff0: 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c  CAST('one' AS BL
6000: 4f 42 29 2c 20 27 74 77 6f 27 29 20 46 52 4f 4d  OB), 'two') FROM
6010: 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   t${id}; \..  }.
6020: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 34 29 20  ...  set sql(4) 
6030: 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20  { \..    SELECT 
6040: 42 61 73 65 36 35 28 78 2c 20 43 41 53 54 28 27  Base65(x, CAST('
6050: 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46  one' AS BLOB)) F
6060: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
6070: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
6080: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
6090: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
60a0: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
60b0: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
60c0: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
60d0: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
60e0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
60f0: 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ite;..    using 
6100: 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72  Eagle._Container
6110: 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20  s.Public;....   
6120: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
6130: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
6140: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c  .      public cl
6150: 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ass SQLiteFuncti
6160: 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65  on${id} : SQLite
6170: 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Function..      
6180: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
6190: 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  c SQLiteFunction
61a0: 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20  ${id}()..       
61b0: 20 20 20 3a 20 62 61 73 65 28 53 51 4c 69 74 65     : base(SQLite
61c0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61  DateFormats.Defa
61d0: 75 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e  ult, DateTimeKin
61e0: 64 2e 55 6e 73 70 65 63 69 66 69 65 64 2c 0d 0a  d.Unspecified,..
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 0d 0a 20   null, false).. 
6210: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6220: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
6230: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
6240: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
62a0: 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  ic override obje
62b0: 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20  ct Invoke(..    
62c0: 20 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d        object\[\]
62d0: 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20   args..         
62e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
62f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67           if (arg
6300: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
6310: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
6320: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
6330: 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74    if (args.Lengt
6340: 68 20 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20  h != 2)..       
6350: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
6360: 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f  ArgumentExceptio
6370: 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n(String.Format(
6380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6390: 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20 74 77  "need exactly tw
63a0: 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 67 6f 74  o arguments, got
63b0: 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c 65 6e 67   {0}", args.Leng
63c0: 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  th));....       
63d0: 20 20 20 6f 62 6a 65 63 74 20 61 72 67 20 3d 20     object arg = 
63e0: 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20  args\[1\];....  
63f0: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 20          if (arg 
6400: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6410: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
6420: 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20  ing.Empty;....  
6430: 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
6440: 65 20 3d 20 61 72 67 2e 47 65 74 54 79 70 65 28  e = arg.GetType(
6450: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6460: 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
6470: 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a 20 20 20  of(DBNull))..   
6480: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6490: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
64a0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
64b0: 79 70 65 20 21 3d 20 74 79 70 65 6f 66 28 62 79  ype != typeof(by
64c0: 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20 20 20  te\[\]))..      
64d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
64e0: 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
64f0: 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  on(String.Format
6500: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6510: 20 22 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20   "argument must 
6520: 62 65 20 62 79 74 65 20 61 72 72 61 79 2c 20 67  be byte array, g
6530: 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65 29 29 3b  ot {0}", type));
6540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
6550: 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42  turn Convert.ToB
6560: 61 73 65 36 34 53 74 72 69 6e 67 28 28 62 79 74  ase64String((byt
6570: 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a 20 20  e\[\]) arg);..  
6580: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
6590: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
65a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62  ///....      pub
65f0: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
6600: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
6610: 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d  t${id} : SQLiteM
6620: 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20 20 20  oduleNoop..     
6630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
6640: 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ic SQLiteModuleT
6650: 65 73 74 24 7b 69 64 7d 28 73 74 72 69 6e 67 20  est${id}(string 
6660: 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  name)..         
6670: 20 3a 20 62 61 73 65 28 6e 61 6d 65 29 0d 0a 20   : base(name).. 
6680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6690: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
66a0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
66b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
66c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
6710: 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  ic override SQLi
6720: 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61  teErrorCode Crea
6730: 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53  te(..          S
6740: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
6750: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20  connection,..   
6760: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
6770: 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
6780: 20 20 20 20 20 20 73 74 72 69 6e 67 5c 5b 5c 5d        string\[\]
6790: 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20   arguments,..   
67a0: 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
67b0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
67c0: 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
67d0: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
67e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
67f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6800: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
6810: 6f 64 65 20 72 63 20 3d 20 44 65 63 6c 61 72 65  ode rc = Declare
6820: 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  Table(..        
6830: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20      connection, 
6840: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 69 67  "CREATE TABLE ig
6850: 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72 65 66 20  nored(x);", ref 
6860: 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  error);....     
6870: 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53       if (rc != S
6880: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6890: 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k)..            
68a0: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20  return rc;....  
68b0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 44 65 63          rc = Dec
68c0: 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28 63 6f 6e  lareFunction(con
68d0: 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20 22 42 61  nection, -1, "Ba
68e0: 73 65 36 34 22 2c 20 72 65 66 20 65 72 72 6f 72  se64", ref error
68f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6900: 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
6910: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
6920: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6930: 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n rc;....       
6940: 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53     table = new S
6950: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
6960: 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20  e(arguments);.. 
6970: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6980: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
6990: 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  Ok;..        }..
69a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
6a00: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c  lic override SQL
6a10: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65  iteErrorCode Ope
6a20: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  n(..          SQ
6a30: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
6a40: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
6a50: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
6a60: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
6a70: 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
6a80: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
6a90: 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
6aa0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72   = new SQLiteVir
6ab0: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28  tualTableCursor(
6ac0: 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  table);..       
6ad0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
6ae0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
6af0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6b00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6b50: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
6b60: 65 72 72 69 64 65 20 62 6f 6f 6c 20 46 69 6e 64  erride bool Find
6b70: 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
6b80: 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
6b90: 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a  alTable table,..
6ba0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
6bb0: 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20  gumentCount,..  
6bc0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
6bd0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6be0: 72 65 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ref SQLiteFuncti
6bf0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20  on function,..  
6c00: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
6c10: 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a  tr pClientData..
6c20: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
6c30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6c40: 20 20 69 66 20 28 61 72 67 75 6d 65 6e 74 43 6f    if (argumentCo
6c50: 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20 20 20 20  unt != 2)..     
6c60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6c70: 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
6c80: 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e  r(table, String.
6c90: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
6ca0: 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30         "no \\"{0
6cb0: 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61  }\\" functions a
6cc0: 63 63 65 70 74 20 7b 31 7d 20 61 72 67 75 6d 65  ccept {1} argume
6cd0: 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20 20 20 20  nt(s)",..       
6ce0: 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65         base.Name
6cf0: 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29  , argumentCount)
6d00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6d10: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
6d20: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
6d30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
6d40: 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 6e 61 6d  tring.Equals(nam
6d50: 65 2c 20 22 42 61 73 65 36 34 22 2c 0d 0a 20 20  e, "Base64",..  
6d60: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
6d70: 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
6d80: 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29  inalIgnoreCase))
6d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
6da0: 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
6db0: 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65 2c 20  bleError(table, 
6dc0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
6dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
6de0: 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63  o \\"{0}\\" func
6df0: 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d 65 64 20  tions are named 
6e00: 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20  \\"{1}\\"",..   
6e10: 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e             base.
6e20: 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d  Name, name));...
6e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
6e40: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
6e50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6e60: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20       function = 
6e70: 6e 65 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69  new SQLiteFuncti
6e80: 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20 20 20 20  on${id}();..    
6e90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
6ea0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
6eb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6f10: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
6f20: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
6f30: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6f40: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
6f50: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
6f60: 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ist()..        {
6f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69  ..          Stri
6f80: 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20  ngList result = 
6f90: 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
6fa0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
6fb0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
6fc0: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
6fd0: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
6fe0: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
6ff0: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
7000: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
7010: 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f  ce};[getFlagsPro
7020: 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20 20  perty]"))..     
7030: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7040: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f      connection.O
7050: 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  pen();..        
7060: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
7070: 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20  reateModule(new 
7080: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74  SQLiteModuleTest
7090: 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22  ${id}("mod${id}"
70a0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
70b0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
70c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
70d0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
70e0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
70f0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
7100: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
7110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
7120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7130: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
7140: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
7150: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
7160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7170: 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e  sult.Add(String.
7180: 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f  Format("{0}", co
7190: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61  mmand.ExecuteSca
71a0: 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20  lar()));..      
71b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
71c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
71d0: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
71e0: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
71f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7200: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
7210: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
7220: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
7240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
7260: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
7270: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
7280: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
7290: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
72a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
72c0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
72d0: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
72e0: 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  2)}]";..        
72f0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
7300: 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  dd(String.Format
7310: 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e  ("{0}", command.
7320: 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29  ExecuteScalar())
7330: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7340: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7350: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7360: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
7370: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
7380: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7390: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
73a0: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
73b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
73c0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
73d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
73e0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
73f0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
7400: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
7410: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
7420: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
7430: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7440: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
7450: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
7460: 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b  bst ${sql(3)}]";
7470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7480: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72    result.Add(Str
7490: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22  ing.Format("{0}"
74a0: 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  , command.Execut
74b0: 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20  eScalar()));..  
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
74d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
74e0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
74f0: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
7500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7510: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
7520: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
7530: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7540: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7550: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
7560: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7570: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
7580: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
7590: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
75a0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75d0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
75e0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
75f0: 73 71 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(4)}]";..    
7600: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
7610: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
7620: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
7630: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
7640: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
7650: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7660: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7670: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
7680: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
7690: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
76a0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
76b0: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
76c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
76d0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
76e0: 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a  ction.Close();..
76f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7700: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7710: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
7720: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
7730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7780: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
7790: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
77a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
77b0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
77c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
77d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
77e0: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
77f0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b  results errors [
7800: 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61  list System.Data
7810: 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c  .SQLite.dll Eagl
7820: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73  e.dll]]....  lis
7830: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
7840: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
7850: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
7860: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
7870: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
7880: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
7890: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
78a0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
78b0: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
78c0: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
78d0: 65 74 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20  etList..      } 
78e0: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
78f0: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73  esult ""]}] $res
7900: 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  ult..} -cleanup 
7910: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
7920: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
7930: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
7940: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
7950: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
7960: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
7970: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
7980: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
7990: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
79a0: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
79b0: 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  l compile.DATA S
79c0: 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44  QLite\..System.D
79d0: 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e  ata.SQLite defin
79e0: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
79f0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
7a00: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
7a10: 4c 45 5c 0d 0a 63 6f 6d 70 69 6c 65 43 53 68 61  LE\..compileCSha
7a20: 72 70 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78  rp} -match regex
7a30: 70 20 2d 72 65 73 75 6c 74 20 5b 73 74 72 69 6e  p -result [strin
7a40: 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c  g map [list \n \
7a50: 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74  r\n] {^Ok\..Syst
7a60: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
7a70: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
7a80: 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c  lts#\d+ \{\} 0 \
7a90: 7b 5c 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c  {\{\} b25l \{SQL
7aa0: 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 20 6f   logic\..error o
7ab0: 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61  r missing databa
7ac0: 73 65 0d 0a 28 3f 3a 75 6e 61 62 6c 65 20 74 6f  se..(?:unable to
7ad0: 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 42 61   use function Ba
7ae0: 73 65 36 34 20 69 6e 20 74 68 65 20 72 65 71 75  se64 in the requ
7af0: 65 73 74 65 64 20 63 6f 6e 74 65 78 74 7c 6e 65  ested context|ne
7b00: 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 5c 0d  ed exactly one\.
7b10: 0a 61 72 67 75 6d 65 6e 74 2c 20 67 6f 74 20 33  .argument, got 3
7b20: 29 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  )\} \{SQL logic 
7b30: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
7b40: 20 64 61 74 61 62 61 73 65 0d 0a 6e 6f 20 73 75   database..no su
7b50: 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 42 61 73  ch function: Bas
7b60: 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  e65\}\}$}]}....#
7b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7ba0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7bb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
7bc0: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
7bd0: 76 74 61 62 2d 31 2e 36 20 7b 76 69 72 74 75 61  vtab-1.6 {virtua
7be0: 6c 20 74 61 62 6c 65 20 72 65 6e 61 6d 65 20 73  l table rename s
7bf0: 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b  upport} -setup {
7c00: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
7c10: 20 76 74 61 62 2d 31 2e 36 2e 64 62 0d 0a 7d 20   vtab-1.6.db..} 
7c20: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
7c30: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
7c40: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
7c50: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
7c60: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
7c70: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
7c80: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
7c90: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
7ca0: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
7cb0: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
7cc0: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
7cd0: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
7ce0: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
7cf0: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
7d00: 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74     ALTER TABLE t
7d10: 24 7b 69 64 7d 20 52 45 4e 41 4d 45 20 54 4f 20  ${id} RENAME TO 
7d20: 78 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  x${id}; \..  }..
7d30: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
7d40: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 6e   \..    SELECT n
7d50: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
7d60: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
7d70: 65 20 3d 20 27 74 61 62 6c 65 27 20 4f 52 44 45  e = 'table' ORDE
7d80: 52 20 42 59 20 6e 61 6d 65 3b 20 5c 0d 0a 20 20  R BY name; \..  
7d90: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
7da0: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
7db0: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
7dc0: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
7dd0: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
7de0: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
7df0: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
7e00: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7e10: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
7e20: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
7e30: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
7e40: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
7e50: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
7e60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
7e70: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
7e80: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
7e90: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f  : SQLiteModuleNo
7ea0: 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  op..      {..   
7eb0: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
7ec0: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
7ed0: 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a  }(string name)..
7ee0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
7ef0: 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  (name)..        
7f00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
7f10: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
7f20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7f30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7f80: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
7f90: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
7fa0: 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20  Code Create(..  
7fb0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
7fc0: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
7fd0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
7fe0: 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
7ff0: 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ta,..          s
8000: 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65  tring\[\] argume
8010: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nts,..          
8020: 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
8030: 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
8040: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
8050: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
8060: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  {..          SQL
8080: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
8090: 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d  = DeclareTable(.
80a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
80b0: 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45  nection, "CREATE
80c0: 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78   TABLE ignored(x
80d0: 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  );", ref error);
80e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
80f0: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
8100: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
8110: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8120: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
8130: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
8140: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
8150: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
8160: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
8170: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
8180: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
8190: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
81e0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
81f0: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
8200: 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
8210: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
8220: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
8230: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
8240: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
8250: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
8260: 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
8270: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8280: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d          cursor =
8290: 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74 75   new SQLiteVirtu
82a0: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61  alTableCursor(ta
82b0: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
82c0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
82d0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
82e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
82f0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8340: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c  //....      publ
8350: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
8360: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
8370: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
8380: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
8390: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29 0d 0a  List GetList()..
83a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
83b0: 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20       StringList 
83c0: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
83d0: 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
83e0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
83f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
8400: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
8410: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
8420: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
8430: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
8440: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
8450: 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22  tFlagsProperty]"
8460: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
8470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
8480: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
8490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
84a0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
84b0: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
84c0: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 22  oduleTest${id}("
84d0: 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a  mod${id}"));....
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
84f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
8510: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
8520: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
8530: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
8540: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
8550: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8560: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
8570: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
8580: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
8590: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
85a0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
85b0: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
85c0: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
85d0: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
85e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
85f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8600: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
8610: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
8620: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
8630: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8640: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
8650: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
8660: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8670: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
8680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8690: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
86a0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
86b0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
86c0: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
86d0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
86e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
86f0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
8700: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
8710: 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d  st ${sql(3)}]";.
8720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8730: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
8740: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
8750: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
8760: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
8770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8780: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8790: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 61         while (da
87a0: 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29 29  taReader.Read())
87b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
87c0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
87d0: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
87e0: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8810: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
8820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
8830: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
8840: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8860: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
8870: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
8880: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8890: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
88a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
88b0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
88c0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
88d0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
88e0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
88f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8900: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8910: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
8920: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
8930: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8950: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
8960: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
8970: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
8980: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
8990: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
89a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
89b0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
89c0: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
89d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
89e0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
89f0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
8a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8a10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
8a20: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
8a30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8a40: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
8a50: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
8a60: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
8a70: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
8a80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8aa0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
8ab0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
8ac0: 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(3)}]";....    
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
8ae0: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
8af0: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
8b00: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
8b10: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
8b20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65  while (dataReade
8b50: 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  r.Read())..     
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8b70: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
8b80: 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69  ader\[0\].ToStri
8b90: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
8ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8bb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8bc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8bd0: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
8be0: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
8bf0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8c00: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
8c10: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
8c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
8c40: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
8c50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
8c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
8c70: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
8c80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8ce0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
8cf0: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
8d00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8d10: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8d20: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
8d30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
8d40: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
8d50: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
8d60: 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44  s [list System.D
8d70: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45  ata.SQLite.dll E
8d80: 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  agle.dll]]....  
8d90: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
8da0: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
8db0: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
8dc0: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
8dd0: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
8de0: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
8df0: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
8e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
8e10: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
8e20: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
8e30: 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20 20  } GetList..     
8e40: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
8e50: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
8e60: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
8e70: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
8e80: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
8e90: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
8ea0: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
8eb0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
8ec0: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
8ed0: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
8ee0: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
8ef0: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
8f00: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
8f10: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
8f20: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
8f30: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65  m.Data.SQLite de
8f40: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
8f50: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
8f60: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
8f70: 54 41 42 4c 45 5c 0d 0a 63 6f 6d 70 69 6c 65 43  TABLE\..compileC
8f80: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65  Sharp} -match re
8f90: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74  gexp -result [st
8fa0: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
8fb0: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53  n \r\n] {^Ok\..S
8fc0: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
8fd0: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
8fe0: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
8ff0: 30 20 5c 7b 5c 7b 5c 7d 20 74 5c 64 2b 20 5c 7b  0 \{\{\} t\d+ \{
9000: 5c 7d 20 78 5c 64 2b 5c 7d 24 7d 5d 7d 0d 0a 0d  \} x\d+\}$}]}...
9010: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
9020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9060: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
9070: 74 20 76 74 61 62 2d 31 2e 37 20 7b 76 69 72 74  t vtab-1.7 {virt
9080: 75 61 6c 20 74 61 62 6c 65 20 78 42 65 73 74 49  ual table xBestI
9090: 6e 64 65 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67  ndex marshalling
90a0: 20 28 31 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a   (1)} -setup {..
90b0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76    set fileName v
90c0: 74 61 62 2d 31 2e 37 2e 64 62 0d 0a 7d 20 2d 62  tab-1.7.db..} -b
90d0: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
90e0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
90f0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
9100: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
9110: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
9120: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
9130: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
9140: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
9150: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
9160: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
9170: 45 20 74 24 7b 69 64 7d 28 79 20 43 48 41 52 28  E t${id}(y CHAR(
9180: 31 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49  10) NOT NULL PRI
9190: 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20  MARY KEY); \..  
91a0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
91b0: 20 54 41 42 4c 45 20 75 24 7b 69 64 7d 20 55 53   TABLE u${id} US
91c0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
91d0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
91e0: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e  l(2) { \..    IN
91f0: 53 45 52 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d  SERT INTO t${id}
9200: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 75   SELECT x FROM u
9210: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
9220: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
9230: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 76 24  \..    SELECT v$
9240: 7b 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69  {id}.y FROM t${i
9250: 64 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f  d} v${id} LEFT O
9260: 55 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20  UTER JOIN \..   
9270: 20 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64   u${id} ON u${id
9280: 7d 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57  }.x = v${id}.y W
9290: 48 45 52 45 20 75 24 7b 69 64 7d 2e 78 20 49 53  HERE u${id}.x IS
92a0: 20 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20   NOT NULL \..   
92b0: 20 4f 52 44 45 52 20 42 59 20 76 24 7b 69 64 7d   ORDER BY v${id}
92c0: 2e 79 20 44 45 53 43 3b 20 5c 0d 0a 20 20 7d 0d  .y DESC; \..  }.
92d0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
92e0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
92f0: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
9300: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
9310: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
9320: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
9330: 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
9340: 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73  stem.Collections
9350: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
9360: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
9370: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
9380: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
9390: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
93a0: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
93b0: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
93c0: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
93d0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f 64   class SQLiteMod
93e0: 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a 20 53  uleTest${id} : S
93f0: 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65  QLiteModuleEnume
9400: 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 7b 0d 0a  rable..      {..
9410: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
9420: 74 72 69 6e 67 20 52 65 73 75 6c 74 3b 0d 0a 0d  tring Result;...
9430: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
9490: 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ic SQLiteModuleT
94a0: 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20 20  est${id}(..     
94b0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
94c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49 45 6e  ,..          IEn
94d0: 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d 65 72 61  umerable enumera
94e0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ble..          )
94f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61  ..          : ba
9500: 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d 65 72 61  se(name, enumera
9510: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ble)..        {.
9520: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
9530: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9540: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9590: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
95a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
95b0: 2f 20 42 55 47 46 49 58 3a 20 54 68 69 73 20 6d  / BUGFIX: This m
95c0: 65 74 68 6f 64 20 68 65 6c 70 73 20 76 65 72 69  ethod helps veri
95d0: 66 79 20 74 69 63 6b 65 74 20 5c 5b 35 36 66 35  fy ticket \[56f5
95e0: 31 31 64 32 36 38 5c 5d 20 69 73 20 66 69 78 65  11d268\] is fixe
95f0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  d...        //..
9600: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
9610: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
9620: 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64 65  rorCode BestInde
9630: 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  x(..          SQ
9640: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
9650: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
9660: 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78 20 69     SQLiteIndex i
9670: 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
9680: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9690: 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64 65          if (inde
96a0: 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  x.Outputs.Constr
96b0: 61 69 6e 74 55 73 61 67 65 73 2e 4c 65 6e 67 74  aintUsages.Lengt
96c0: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
96d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
96e0: 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74 70 75   if (index.Outpu
96f0: 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  ts.ConstraintUsa
9700: 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e 75 6c 6c  ges\[0\] == null
9710: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9720: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
9730: 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22 43 6f  entException("Co
9740: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 5c 5b  nstraintUsages\[
9750: 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29 3b 0d 0a  0\] is null");..
9760: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
9770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9780: 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e 73 74 72  Result = "Constr
9790: 61 69 6e 74 55 73 61 67 65 73 20 69 73 20 4f 4b  aintUsages is OK
97a0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ";..          }.
97b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
97c0: 75 72 6e 20 62 61 73 65 2e 42 65 73 74 49 6e 64  urn base.BestInd
97d0: 65 78 28 74 61 62 6c 65 2c 20 69 6e 64 65 78 29  ex(table, index)
97e0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
97f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f      }....      /
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9840: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9850: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
9860: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
9870: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
9880: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
9890: 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69  StringList GetLi
98a0: 73 74 28 70 61 72 61 6d 73 20 73 74 72 69 6e 67  st(params string
98b0: 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20  \[\] strings).. 
98c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
98d0: 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72      StringList r
98e0: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
98f0: 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
9900: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
9910: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
9920: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
9930: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9940: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9950: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
9960: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
9970: 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29  FlagsProperty]")
9980: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
9990: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
99a0: 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  ection.Open();..
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
99c0: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
99d0: 69 64 7d 20 6d 6f 64 75 6c 65 20 3d 20 6e 65 77  id} module = new
99e0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
99f0: 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20 20 20 20  t${id}(..       
9a00: 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69           "mod${i
9a10: 64 7d 22 2c 20 73 74 72 69 6e 67 73 29 3b 0d 0a  d}", strings);..
9a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
9a30: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d  nnection.CreateM
9a40: 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29 3b 0d 0a  odule(module);..
9a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
9a60: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
9a70: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
9a80: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
9a90: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
9aa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9ab0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
9ac0: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
9ad0: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
9ae0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9af0: 20 72 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d   result.Add(comm
9b00: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
9b10: 65 72 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29  ery().ToString()
9b20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9b30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9b40: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
9b50: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
9b60: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
9b70: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
9b80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9b90: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
9ba0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
9bb0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
9bc0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
9bd0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63      result.Add(c
9be0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
9bf0: 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e  nQuery().ToStrin
9c00: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
9c10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9c20: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
9c30: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
9c40: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
9c50: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
9c60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
9c80: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
9c90: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
9ca0: 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  (3)}]";....     
9cb0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9cc0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
9cd0: 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f   dataReader = co
9ce0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61  mmand.ExecuteRea
9cf0: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
9d00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9d10: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
9d20: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
9d30: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
9d40: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
9d50: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
9d60: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73  .            res
9da0: 75 6c 74 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 52  ult.Add(module.R
9db0: 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20  esult);..       
9dc0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
9dd0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
9de0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9df0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
9e00: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
9e10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9e60: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
9e70: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
9e80: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
9e90: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
9ea0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9eb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
9ec0: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
9ed0: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
9ee0: 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53  s errors [list S
9ef0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
9f00: 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d  e.dll Eagle.dll]
9f10: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
9f20: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
9f30: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
9f40: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
9f50: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
9f60: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
9f70: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
9f80: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
9f90: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
9fa0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
9fb0: 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74  est${id} GetList
9fc0: 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34   one two three 4
9fd0: 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65   5.0..      } re
9fe0: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
9ff0: 75 6c 74 20 22 22 5d 7d 5d 20 24 72 65 73 75 6c  ult ""]}] $resul
a000: 74 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  t..} -cleanup {.
a010: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
a020: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
a030: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
a040: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
a050: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
a060: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
a070: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
a080: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
a090: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
a0a0: 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20  g28 command.sql 
a0b0: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
a0c0: 69 74 65 5c 0d 0a 53 79 73 74 65 6d 2e 44 61 74  ite\..System.Dat
a0d0: 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e 65 43  a.SQLite defineC
a0e0: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
a0f0: 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
a100: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
a110: 5c 0d 0a 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  \..compileCSharp
a120: 7d 20 2d 6d 61 74 63 68 20 72 65 67 65 78 70 20  } -match regexp 
a130: 2d 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20  -result [string 
a140: 6d 61 70 20 5b 6c 69 73 74 20 5c 6e 20 5c 72 5c  map [list \n \r\
a150: 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  n] {^Ok\..System
a160: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
a170: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
a180: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 30  s#\d+ \{\} 0 \{0
a190: 20 35 20 74 77 6f 20 74 68 72 65 65 20 6f 6e 65   5 two three one
a1a0: 20 35 5c 2e 30 5c 0d 0a 34 20 5c 7b 43 6f 6e 73   5\.0\..4 \{Cons
a1b0: 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73 20  traintUsages is 
a1c0: 4f 4b 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  OK\}\}$}]}....##
a1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a210: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
a220: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
a230: 74 61 62 2d 31 2e 38 20 7b 76 69 72 74 75 61 6c  tab-1.8 {virtual
a240: 20 74 61 62 6c 65 20 78 42 65 73 74 49 6e 64 65   table xBestInde
a250: 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67 20 28 32  x marshalling (2
a260: 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  )} -setup {..  s
a270: 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62  et fileName vtab
a280: 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.8.db..} -body
a290: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
a2a0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
a2b0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
a2c0: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
a2d0: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
a2e0: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
a2f0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
a300: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
a310: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
a320: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
a330: 24 7b 69 64 7d 28 79 20 43 48 41 52 28 31 30 29  ${id}(y CHAR(10)
a340: 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52   NOT NULL PRIMAR
a350: 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20 20 20 43  Y KEY); \..    C
a360: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
a370: 42 4c 45 20 75 24 7b 69 64 7d 20 55 53 49 4e 47  BLE u${id} USING
a380: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
a390: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
a3a0: 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52  ) { \..    INSER
a3b0: 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d 20 53 45  T INTO t${id} SE
a3c0: 4c 45 43 54 20 78 20 46 52 4f 4d 20 75 24 7b 69  LECT x FROM u${i
a3d0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
a3e0: 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a  set sql(3) { \..
a3f0: 20 20 20 20 53 45 4c 45 43 54 20 76 24 7b 69 64      SELECT v${id
a400: 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69 64 7d 20  }.y FROM t${id} 
a410: 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f 55 54 45  v${id} LEFT OUTE
a420: 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20 20 75 24  R JOIN \..    u$
a430: 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64 7d 2e 78  {id} ON u${id}.x
a440: 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57 48 45 52   = v${id}.y WHER
a450: 45 20 75 24 7b 69 64 7d 2e 78 20 49 53 20 4e 4f  E u${id}.x IS NO
a460: 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20 20 41 4e  T NULL \..    AN
a470: 44 20 75 24 7b 69 64 7d 2e 78 20 42 45 54 57 45  D u${id}.x BETWE
a480: 45 4e 20 27 6f 6e 65 27 20 61 6e 64 20 27 74 68  EN 'one' and 'th
a490: 72 65 65 27 20 4f 52 44 45 52 20 42 59 20 75 24  ree' ORDER BY u$
a4a0: 7b 69 64 7d 2e 78 20 41 53 43 2c 20 5c 0d 0a 20  {id}.x ASC, \.. 
a4b0: 20 20 20 75 24 7b 69 64 7d 2e 78 20 44 45 53 43     u${id}.x DESC
a4c0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
a4d0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
a4e0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
a4f0: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
a500: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
a510: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
a520: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
a530: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f   using System.Co
a540: 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20 20 20 20  llections;..    
a550: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
a560: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
a570: 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74  sing Eagle._Cont
a580: 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a  ainers.Public;..
a590: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
a5a0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
a5b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
a5c0: 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  ic sealed class 
a5d0: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74  SQLiteModuleTest
a5e0: 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f  ${id} : SQLiteMo
a5f0: 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 0d 0a  duleEnumerable..
a600: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a610: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 52   public string R
a620: 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  esult;....      
a630: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a680: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
a690: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
a6a0: 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  }(..          st
a6b0: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
a6c0: 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 62 6c        IEnumerabl
a6d0: 65 20 65 6e 75 6d 65 72 61 62 6c 65 0d 0a 20 20  e enumerable..  
a6e0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a6f0: 20 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65       : base(name
a700: 2c 20 65 6e 75 6d 65 72 61 62 6c 65 29 0d 0a 20  , enumerable).. 
a710: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a720: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
a730: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
a740: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a790: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  ....        //..
a7a0: 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46 49          // BUGFI
a7b0: 58 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20 68  X: This method h
a7c0: 65 6c 70 73 20 76 65 72 69 66 79 20 74 69 63 6b  elps verify tick
a7d0: 65 74 20 5c 5b 35 36 66 35 31 31 64 32 36 38 5c  et \[56f511d268\
a7e0: 5d 20 69 73 20 66 69 78 65 64 2e 0d 0a 20 20 20  ] is fixed...   
a7f0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
a800: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
a810: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
a820: 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20   BestIndex(..   
a830: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
a840: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
a850: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
a860: 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20  teIndex index.. 
a870: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a880: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a890: 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74 70 75   if (index.Outpu
a8a0: 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  ts.ConstraintUsa
a8b0: 67 65 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ges.Length > 0).
a8c0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
a8d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
a8e0: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
a8f0: 74 72 61 69 6e 74 55 73 61 67 65 73 5c 5b 30 5c  traintUsages\[0\
a900: 5d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  ] == null)..    
a910: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
a920: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
a930: 70 74 69 6f 6e 28 22 43 6f 6e 73 74 72 61 69 6e  ption("Constrain
a940: 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20 69 73 20  tUsages\[0\] is 
a950: 6e 75 6c 6c 22 29 3b 0d 0a 20 20 20 20 20 20 20  null");..       
a960: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
a970: 20 20 20 20 20 20 20 20 20 52 65 73 75 6c 74 20           Result 
a980: 3d 20 22 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  = "ConstraintUsa
a990: 67 65 73 20 69 73 20 4f 4b 22 3b 0d 0a 20 20 20  ges is OK";..   
a9a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a9b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61 73        return bas
a9c0: 65 2e 42 65 73 74 49 6e 64 65 78 28 74 61 62 6c  e.BestIndex(tabl
a9d0: 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  e, index);..    
a9e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
a9f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  /....      publi
aa50: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
aa60: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
aa70: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
aa80: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  c static StringL
aa90: 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72 61  ist GetList(para
aaa0: 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74  ms string\[\] st
aab0: 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20 20  rings)..        
aac0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72  {..          Str
aad0: 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d  ingList result =
aae0: 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
aaf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ab00: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
ab10: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
ab20: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
ab30: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
ab40: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
ab50: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
ab60: 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72  rce};[getFlagsPr
ab70: 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20  operty]"))..    
ab80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ab90: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
aba0: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
abb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
abc0: 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 6d 6f 64  uleTest${id} mod
abd0: 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ule = new SQLite
abe0: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28  ModuleTest${id}(
abf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac00: 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73 74    "mod${id}", st
ac10: 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  rings);....     
ac20: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
ac30: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6d  n.CreateModule(m
ac40: 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  odule);....     
ac50: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
ac60: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
ac70: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
ac80: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
ac90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
aca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
acb0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
acc0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
acd0: 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(1)}]";..    
ace0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
acf0: 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65  .Add(command.Exe
ad00: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54  cuteNonQuery().T
ad10: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
ad20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ad30: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
ad40: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
ad50: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
ad60: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
ad70: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
ad80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ad90: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
ada0: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
adb0: 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20   ${sql(2)}]";.. 
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
add0: 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e  ult.Add(command.
ade0: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
adf0: 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ).ToString());..
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ae10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
ae20: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
ae30: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
ae40: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
ae50: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
ae60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ae70: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
ae80: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
ae90: 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b  bst ${sql(3)}]";
aea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
aeb0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44    using (SQLiteD
aec0: 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65  ataReader dataRe
aed0: 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45  ader = command.E
aee0: 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d  xecuteReader()).
aef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
af00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af10: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
af20: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
af40: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
af50: 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69  ader\[0\].ToStri
af60: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
af70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
af80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
af90: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
afa0: 28 6d 6f 64 75 6c 65 2e 52 65 73 75 6c 74 29 3b  (module.Result);
afb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
afc0: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
afd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
afe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
aff0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
b000: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b010: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b060: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b070: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
b080: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b090: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
b0a0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
b0b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
b0c0: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
b0d0: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
b0e0: 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44  s [list System.D
b0f0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45  ata.SQLite.dll E
b100: 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  agle.dll]]....  
b110: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
b120: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
b130: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
b140: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
b150: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
b160: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
b170: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
b180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
b190: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
b1a0: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
b1b0: 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77  } GetList one tw
b1c0: 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20  o three 4 5.0.. 
b1d0: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
b1e0: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
b1f0: 7d 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63  }] $result..} -c
b200: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
b210: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
b220: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
b230: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
b240: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
b250: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
b260: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
b270: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
b280: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
b290: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d  ct monoBug28 com
b2a0: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
b2b0: 2e 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53  .DATA SQLite\..S
b2c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
b2d0: 65 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  e defineConstant
b2e0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
b2f0: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
b300: 55 41 4c 5f 54 41 42 4c 45 5c 0d 0a 63 6f 6d 70  UAL_TABLE\..comp
b310: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
b320: 68 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  h regexp -result
b330: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69   [string map [li
b340: 73 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b  st \n \r\n] {^Ok
b350: 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  \..System#CodeDo
b360: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
b370: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c  lerResults#\d+ \
b380: 7b 5c 7d 20 30 20 5c 7b 30 20 35 20 6f 6e 65 20  {\} 0 \{0 5 one 
b390: 74 68 72 65 65 5c 0d 0a 5c 7b 43 6f 6e 73 74 72  three\..\{Constr
b3a0: 61 69 6e 74 55 73 61 67 65 73 20 69 73 20 4f 4b  aintUsages is OK
b3b0: 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23  \}\}$}]}....####
b3c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b3d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b3e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b3f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b400: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
b410: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61  unTest {test vta
b420: 62 2d 31 2e 39 20 7b 49 45 6e 75 6d 65 72 61 62  b-1.9 {IEnumerab
b430: 6c 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  le virtual table
b440: 20 77 2f 6c 61 72 67 65 20 62 79 74 65 20 61 72   w/large byte ar
b450: 72 61 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ray} -setup {.. 
b460: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
b470: 61 62 2d 31 2e 39 2e 64 62 0d 0a 7d 20 2d 62 6f  ab-1.9.db..} -bo
b480: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
b490: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
b4a0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
b4b0: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
b4c0: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
b4d0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
b4e0: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
b4f0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
b500: 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a  set sql(1) { \..
b510: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
b520: 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20  AL TABLE t${id} 
b530: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
b540: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
b550: 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(2) { \..    
b560: 53 45 4c 45 43 54 20 53 55 4d 28 78 29 20 46 52  SELECT SUM(x) FR
b570: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
b580: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
b590: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
b5a0: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
b5b0: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
b5c0: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
b5d0: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
b5e0: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
b5f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b600: 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73  te;....    names
b610: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
b620: 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d}..    {..     
b630: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
b640: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
b650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b660: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f   public static o
b670: 62 6a 65 63 74 20 47 65 74 53 75 6d 28 29 0d 0a  bject GetSum()..
b680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b690: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
b6a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
b6b0: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
b6c0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
b6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
b6e0: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
b6f0: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c  taSource};[getFl
b700: 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d  agsProperty]")).
b710: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
b720: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
b730: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
b740: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
b750: 5c 5b 5c 5d 20 62 79 74 65 73 20 3d 20 6e 65 77  \[\] bytes = new
b760: 20 62 79 74 65 5c 5b 31 30 34 38 35 37 36 5c 5d   byte\[1048576\]
b770: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ;..            n
b780: 65 77 20 52 61 6e 64 6f 6d 28 29 2e 4e 65 78 74  ew Random().Next
b790: 42 79 74 65 73 28 62 79 74 65 73 29 3b 0d 0a 0d  Bytes(bytes);...
b7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
b7b0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
b7c0: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
b7d0: 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28  oduleEnumerable(
b7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b7f0: 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 62 79 74 65  "mod${id}", byte
b800: 73 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s));....        
b810: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
b820: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
b830: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
b840: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
b850: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
b870: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
b880: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
b890: 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (1)}]";..       
b8a0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45         command.E
b8b0: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
b8c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b8d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b8e0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
b8f0: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
b900: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
b910: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
b920: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b930: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
b940: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
b950: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d  [subst ${sql(2)}
b960: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
b970: 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61 6e     return comman
b980: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
b990: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b9a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
b9b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b9c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ba10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ba20: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
ba30: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
ba40: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
ba50: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
ba60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
ba70: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
ba80: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
ba90: 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61 74  rrors System.Dat
baa0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d  a.SQLite.dll]...
bab0: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
bac0: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
bad0: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
bae0: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
baf0: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
bb00: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
bb10: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
bb20: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
bb30: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
bb40: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
bb50: 7b 69 64 7d 20 47 65 74 53 75 6d 0d 0a 20 20 20  {id} GetSum..   
bb60: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
bb70: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
bb80: 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65   $result..} -cle
bb90: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
bba0: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
bbb0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
bbc0: 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65  lain result code
bbd0: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
bbe0: 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69  sql dataSource i
bbf0: 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 74  d fileName..} -t
bc00: 69 6d 65 20 74 72 75 65 20 2d 63 6f 6e 73 74 72  ime true -constr
bc10: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
bc20: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
bc30: 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64 2e 73 71  Bug28 command.sq
bc40: 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41  l\..compile.DATA
bc50: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
bc60: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
bc70: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
bc80: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
bc90: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
bca0: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
bcb0: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
bcc0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74  gexp -result [st
bcd0: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
bce0: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53  n \r\n] {^Ok\..S
bcf0: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
bd00: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
bd10: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
bd20: 30 20 28 3f 3a 2d 29 3f 5c 64 2b 24 7d 5d 7d 0d  0 (?:-)?\d+$}]}.
bd30: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
bd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bd80: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
bd90: 65 73 74 20 76 74 61 62 2d 31 2e 31 30 20 7b 76  est vtab-1.10 {v
bda0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 52 6f  irtual table xRo
bdb0: 77 49 64 20 75 6e 69 71 75 65 6e 65 73 73 7d 20  wId uniqueness} 
bdc0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20  -setup {..  set 
bdd0: 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e  fileName vtab-1.
bde0: 31 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b  10.db..} -body {
bdf0: 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65  ..  set id [obje
be00: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
be10: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
be20: 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64  NextId]..  set d
be30: 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20  ataSource [file 
be40: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
be50: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c  eDirectory] $fil
be60: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20  eName]....  set 
be70: 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(1) { \..    
be80: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
be90: 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e  ABLE t${id} USIN
bea0: 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20  G mod${id}; \.. 
beb0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
bec0: 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  2) { \..    SELE
bed0: 43 54 20 43 41 53 45 20 57 48 45 4e 20 30 20 54  CT CASE WHEN 0 T
bee0: 48 45 4e 20 72 6f 77 49 64 20 45 4c 53 45 20 72  HEN rowId ELSE r
bef0: 6f 77 49 64 20 45 4e 44 2c 20 5c 0d 0a 20 20 20  owId END, \..   
bf00: 20 20 20 20 20 20 20 20 43 41 53 45 20 57 48 45          CASE WHE
bf10: 4e 20 31 20 54 48 45 4e 20 72 6f 77 49 64 20 45  N 1 THEN rowId E
bf20: 4c 53 45 20 72 6f 77 49 64 20 45 4e 44 20 46 52  LSE rowId END FR
bf30: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
bf40: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
bf50: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
bf60: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
bf70: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
bf80: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
bf90: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
bfa0: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
bfb0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
bfc0: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
bfd0: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
bfe0: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
bff0: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
c000: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
c010: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c020: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
c030: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
c040: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c050: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
c060: 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74  etList(params st
c070: 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73  ring\[\] strings
c080: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
c090: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
c0a0: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
c0b0: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
c0c0: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
c0d0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
c0e0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
c0f0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
c100: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
c110: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
c120: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
c130: 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74  [getFlagsPropert
c140: 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  y]"))..         
c150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c160: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
c170: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c180: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
c190: 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51  ateModule(new SQ
c1a0: 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72  LiteModuleEnumer
c1b0: 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
c1c0: 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c       "mod${id}",
c1d0: 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20   strings));.... 
c1e0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
c1f0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
c200: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
c210: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
c220: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
c230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c240: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
c250: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
c260: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c280: 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64  sult.Add(command
c290: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
c2a0: 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  ().ToString());.
c2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
c2d0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
c2e0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
c2f0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
c300: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
c310: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c320: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
c330: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
c340: 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22  ubst ${sql(2)}]"
c350: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c360: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
c370: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
c380: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
c390: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
c3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c3b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c3c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c3d0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
c3e0: 4d 61 73 6b 20 6f 66 66 20 74 68 65 20 68 61 73  Mask off the has
c3f0: 68 20 63 6f 64 65 20 70 6f 72 74 69 6f 6e 20 62  h code portion b
c400: 65 63 61 75 73 65 20 69 74 20 64 69 66 66 65 72  ecause it differ
c410: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
c420: 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 74 77     //       betw
c430: 65 65 6e 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  een framework ve
c440: 72 73 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  rsions...       
c450: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e               lon
c470: 67 20 6d 61 73 6b 20 3d 20 75 6e 63 68 65 63 6b  g mask = uncheck
c480: 65 64 28 28 6c 6f 6e 67 29 30 78 46 46 46 46 46  ed((long)0xFFFFF
c490: 46 46 46 30 30 30 30 30 30 30 30 29 3b 0d 0a 0d  FFF00000000);...
c4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c4b0: 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64   while (dataRead
c4c0: 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20  er.Read())..    
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4f0: 20 72 65 73 75 6c 74 2e 41 64 64 28 28 64 61 74   result.Add((dat
c500: 61 52 65 61 64 65 72 2e 47 65 74 49 6e 74 36 34  aReader.GetInt64
c510: 28 30 29 20 26 20 6d 61 73 6b 29 2e 54 6f 53 74  (0) & mask).ToSt
c520: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
c530: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
c540: 6c 74 2e 41 64 64 28 28 64 61 74 61 52 65 61 64  lt.Add((dataRead
c550: 65 72 2e 47 65 74 49 6e 74 36 34 28 31 29 20 26  er.GetInt64(1) &
c560: 20 6d 61 73 6b 29 2e 54 6f 53 74 72 69 6e 67 28   mask).ToString(
c570: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
c580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c590: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c5a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c5b0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
c5c0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
c5d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c5e0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
c5f0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  t;..        }...
c600: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
c610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
c660: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
c670: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
c680: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
c690: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
c6a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
c6b0: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
c6c0: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
c6d0: 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20  ts errors [list 
c6e0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c6f0: 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c  te.dll Eagle.dll
c700: 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  ]]....  list $co
c710: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
c720: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
c730: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
c740: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
c750: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
c760: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
c770: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
c780: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
c790: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
c7a0: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73  Test${id} GetLis
c7b0: 74 20 6f 6e 65 20 6f 6e 65 20 74 77 6f 20 6f 6e  t one one two on
c7c0: 65 20 74 77 6f 20 74 77 6f 0d 0a 20 20 20 20 20  e two two..     
c7d0: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
c7e0: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 24  t result ""]}] $
c7f0: 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c 65 61 6e  result..} -clean
c800: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
c810: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
c820: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
c830: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
c840: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
c850: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
c860: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
c870: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
c880: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
c890: 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d 61 6e 64  onoBug28 command
c8a0: 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54  .sql compile.DAT
c8b0: 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79 73 74 65  A SQLite\..Syste
c8c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65  m.Data.SQLite de
c8d0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
c8e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
c8f0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
c900: 54 41 42 4c 45 5c 0d 0a 63 6f 6d 70 69 6c 65 43  TABLE\..compileC
c910: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 72 65  Sharp} -match re
c920: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 73 74  gexp -result [st
c930: 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c  ring map [list \
c940: 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c 0d 0a 53  n \r\n] {^Ok\..S
c950: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
c960: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
c970: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
c980: 30 20 5c 7b 30 20 34 32 39 34 39 36 37 32 39 36  0 \{0 4294967296
c990: 20 34 32 39 34 39 36 37 32 39 36 5c 0d 0a 38 35   4294967296\..85
c9a0: 38 39 39 33 34 35 39 32 20 38 35 38 39 39 33 34  89934592 8589934
c9b0: 35 39 32 20 31 32 38 38 34 39 30 31 38 38 38 20  592 12884901888 
c9c0: 31 32 38 38 34 39 30 31 38 38 38 20 31 37 31 37  12884901888 1717
c9d0: 39 38 36 39 31 38 34 20 31 37 31 37 39 38 36 39  9869184 17179869
c9e0: 31 38 34 5c 0d 0a 32 31 34 37 34 38 33 36 34 38  184\..2147483648
c9f0: 30 20 32 31 34 37 34 38 33 36 34 38 30 20 32 35  0 21474836480 25
ca00: 37 36 39 38 30 33 37 37 36 20 32 35 37 36 39 38  769803776 257698
ca10: 30 33 37 37 36 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  03776\}$}]}....#
ca20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ca60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
ca70: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
ca80: 76 74 61 62 2d 31 2e 31 31 20 7b 49 45 6e 75 6d  vtab-1.11 {IEnum
ca90: 65 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74  erable virtual t
caa0: 61 62 6c 65 20 77 2f 6f 62 6a 65 63 74 20 69 64  able w/object id
cab0: 65 6e 74 69 74 79 7d 20 2d 73 65 74 75 70 20 7b  entity} -setup {
cac0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
cad0: 20 76 74 61 62 2d 31 2e 31 31 2e 64 62 0d 0a 7d   vtab-1.11.db..}
cae0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
caf0: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
cb00: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
cb10: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
cb20: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
cb30: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
cb40: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
cb50: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
cb60: 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b  ..  set sql(1) {
cb70: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56   \..    CREATE V
cb80: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b  IRTUAL TABLE t${
cb90: 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69  id} USING mod${i
cba0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
cbb0: 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a  set sql(2) { \..
cbc0: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 49 64      SELECT rowId
cbd0: 2c 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  , * FROM t${id};
cbe0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
cbf0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
cc00: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
cc10: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
cc20: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
cc30: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
cc40: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
cc50: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
cc60: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
cc70: 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74  sing Eagle._Cont
cc80: 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a  ainers.Public;..
cc90: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
cca0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
ccb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
ccc0: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
ccd0: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
cce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
ccf0: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
cd00: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
cd10: 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73  ams string\[\] s
cd20: 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20  trings)..       
cd30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
cd40: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
cd50: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
cd60: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
cd70: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
cd80: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
cd90: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
cda0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
cdb0: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
cdc0: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
cdd0: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
cde0: 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20  roperty]"))..   
cdf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ce00: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
ce10: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
ce20: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
ce30: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
ce40: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
ce50: 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20  Enumerable(..   
ce60: 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24             "mod$
ce70: 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 2c 20  {id}", strings, 
ce80: 74 72 75 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  true));....     
ce90: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
cea0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
ceb0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
cec0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
ced0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
cee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cef0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
cf00: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
cf10: 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(1)}]";..    
cf20: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
cf30: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
cf40: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
cf50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
cf60: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
cf70: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
cf80: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
cf90: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
cfa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
cfc0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
cfd0: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
cfe0: 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  2)}]";....      
cff0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
d000: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
d010: 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d  dataReader = com
d020: 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64  mand.ExecuteRead
d030: 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er())..         
d040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d050: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64          while (d
d060: 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29  ataReader.Read()
d070: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d080: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d090: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
d0a0: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
d0b0: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
d0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0d0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61     result.Add(da
d0e0: 74 61 52 65 61 64 65 72 5c 5b 31 5c 5d 2e 54 6f  taReader\[1\].To
d0f0: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
d100: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
d120: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
d140: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
d150: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
d160: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
d170: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
d180: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d1e0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d1f0: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
d200: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d210: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
d220: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
d230: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
d240: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
d250: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
d260: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
d270: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
d280: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
d290: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
d2a0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
d2b0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
d2c0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
d2d0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
d2e0: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
d2f0: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
d300: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
d310: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
d320: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
d330: 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f   GetList one two
d340: 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20 20   three 4 5.0..  
d350: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
d360: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
d370: 5d 20 24 72 65 73 75 6c 74 0d 0a 7d 20 2d 63 6c  ] $result..} -cl
d380: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
d390: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
d3a0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
d3b0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
d3c0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
d3d0: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
d3e0: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
d3f0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
d400: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
d410: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 63 6f 6d 6d  t monoBug28 comm
d420: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
d430: 44 41 54 41 20 53 51 4c 69 74 65 5c 0d 0a 53 79  DATA SQLite\..Sy
d440: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
d450: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e   defineConstant.
d460: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
d470: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
d480: 41 4c 5f 54 41 42 4c 45 5c 0d 0a 63 6f 6d 70 69  AL_TABLE\..compi
d490: 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68  leCSharp} -match
d4a0: 20 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20   regexp -result 
d4b0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
d4c0: 74 20 5c 6e 20 5c 72 5c 6e 5d 20 7b 5e 4f 6b 5c  t \n \r\n] {^Ok\
d4d0: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
d4e0: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
d4f0: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
d500: 5c 7d 20 30 20 5c 7b 2d 3f 5c 64 2b 20 6f 6e 65  \} 0 \{-?\d+ one
d510: 20 2d 3f 5c 64 2b 20 74 77 6f 20 2d 3f 5c 64 2b   -?\d+ two -?\d+
d520: 5c 0d 0a 74 68 72 65 65 20 2d 3f 5c 64 2b 20 34  \..three -?\d+ 4
d530: 20 2d 3f 5c 64 2b 20 35 5c 2e 30 5c 7d 24 7d 5d   -?\d+ 5\.0\}$}]
d540: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
d550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d590: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
d5a0: 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 31 32 20  {test vtab-1.12 
d5b0: 7b 53 51 4c 69 74 65 49 6e 64 65 78 20 6d 61 6e  {SQLiteIndex man
d5c0: 61 67 65 64 2d 74 6f 2d 6e 61 74 69 76 65 2d 74  aged-to-native-t
d5d0: 6f 2d 6d 61 6e 61 67 65 64 7d 20 2d 73 65 74 75  o-managed} -setu
d5e0: 70 20 7b 0d 0a 20 20 73 65 74 20 6e 43 6f 6e 73  p {..  set nCons
d5f0: 74 72 61 69 6e 74 20 33 3b 20 73 65 74 20 6e 4f  traint 3; set nO
d600: 72 64 65 72 42 79 20 33 0d 0a 7d 20 2d 62 6f 64  rderBy 3..} -bod
d610: 79 20 7b 0d 0a 20 20 73 65 74 20 69 6e 64 65 78  y {..  set index
d620: 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61  (1) [object crea
d630: 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73  te -alias -flags
d640: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \.. 
d650: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
d660: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e  .SQLite.SQLiteIn
d670: 64 65 78 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74  dex $nConstraint
d680: 20 24 6e 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20   $nOrderBy].... 
d690: 20 66 6f 72 20 7b 73 65 74 20 69 43 6f 6e 73 74   for {set iConst
d6a0: 72 61 69 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73  raint 0} {$iCons
d6b0: 74 72 61 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74  traint < $nConst
d6c0: 72 61 69 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f  raint} {incr iCo
d6d0: 6e 73 74 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20  nstraint} {..   
d6e0: 20 73 65 74 20 63 6f 6e 73 74 72 61 69 6e 74 28   set constraint(
d6f0: 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74  1) [object creat
d700: 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20  e -alias -flags 
d710: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
d720: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
d730: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49  a.SQLite.SQLiteI
d740: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 20 30  ndexConstraint 0
d750: 20 30 20 30 20 30 5d 0d 0a 0d 0a 20 20 20 20 24   0 0 0]....    $
d760: 69 6e 64 65 78 28 31 29 20 49 6e 70 75 74 73 2e  index(1) Inputs.
d770: 43 6f 6e 73 74 72 61 69 6e 74 73 2e 53 65 74 56  Constraints.SetV
d780: 61 6c 75 65 20 24 63 6f 6e 73 74 72 61 69 6e 74  alue $constraint
d790: 28 31 29 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  (1) $iConstraint
d7a0: 0d 0a 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61  ....    $constra
d7b0: 69 6e 74 28 31 29 20 69 43 6f 6c 75 6d 6e 20 5b  int(1) iColumn [
d7c0: 65 78 70 72 20 7b 69 6e 74 28 30 78 30 31 32 33  expr {int(0x0123
d7d0: 34 35 36 37 20 2b 20 24 69 43 6f 6e 73 74 72 61  4567 + $iConstra
d7e0: 69 6e 74 29 7d 5d 0d 0a 20 20 20 20 24 63 6f 6e  int)}]..    $con
d7f0: 73 74 72 61 69 6e 74 28 31 29 20 6f 70 20 5b 65  straint(1) op [e
d800: 78 70 72 20 7b 30 78 46 46 20 2d 20 24 69 43 6f  xpr {0xFF - $iCo
d810: 6e 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20 20 20  nstraint}]..    
d820: 24 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 75  $constraint(1) u
d830: 73 61 62 6c 65 20 5b 65 78 70 72 20 7b 30 78 43  sable [expr {0xC
d840: 43 20 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  C + $iConstraint
d850: 7d 5d 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61  }]..    $constra
d860: 69 6e 74 28 31 29 20 69 54 65 72 6d 4f 66 66 73  int(1) iTermOffs
d870: 65 74 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78  et [expr {int(0x
d880: 38 39 41 42 43 44 45 46 20 2b 20 24 69 43 6f 6e  89ABCDEF + $iCon
d890: 73 74 72 61 69 6e 74 29 7d 5d 0d 0a 20 20 7d 0d  straint)}]..  }.
d8a0: 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 4f  ...  for {set iO
d8b0: 72 64 65 72 42 79 20 30 7d 20 7b 24 69 4f 72 64  rderBy 0} {$iOrd
d8c0: 65 72 42 79 20 3c 20 24 6e 4f 72 64 65 72 42 79  erBy < $nOrderBy
d8d0: 7d 20 7b 69 6e 63 72 20 69 4f 72 64 65 72 42 79  } {incr iOrderBy
d8e0: 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 6f 72 64  } {..    set ord
d8f0: 65 72 42 79 28 31 29 20 5b 6f 62 6a 65 63 74 20  erBy(1) [object 
d900: 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66  create -alias -f
d910: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
d920: 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65  \..        Syste
d930: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
d940: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
d950: 20 30 20 30 5d 0d 0a 0d 0a 20 20 20 20 24 69 6e   0 0]....    $in
d960: 64 65 78 28 31 29 20 49 6e 70 75 74 73 2e 4f 72  dex(1) Inputs.Or
d970: 64 65 72 42 79 73 2e 53 65 74 56 61 6c 75 65 20  derBys.SetValue 
d980: 24 6f 72 64 65 72 42 79 28 31 29 20 24 69 4f 72  $orderBy(1) $iOr
d990: 64 65 72 42 79 0d 0a 0d 0a 20 20 20 20 24 6f 72  derBy....    $or
d9a0: 64 65 72 42 79 28 31 29 20 69 43 6f 6c 75 6d 6e  derBy(1) iColumn
d9b0: 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 32 33   [expr {int(0x23
d9c0: 30 31 36 37 34 35 20 2b 20 24 69 4f 72 64 65 72  016745 + $iOrder
d9d0: 42 79 29 7d 5d 0d 0a 20 20 20 20 24 6f 72 64 65  By)}]..    $orde
d9e0: 72 42 79 28 31 29 20 64 65 73 63 20 5b 65 78 70  rBy(1) desc [exp
d9f0: 72 20 7b 30 78 46 46 20 2d 20 24 69 4f 72 64 65  r {0xFF - $iOrde
da00: 72 42 79 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  rBy}]..  }....  
da10: 66 6f 72 20 7b 73 65 74 20 69 43 6f 6e 73 74 72  for {set iConstr
da20: 61 69 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73 74  aint 0} {$iConst
da30: 72 61 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74 72  raint < $nConstr
da40: 61 69 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f 6e  aint} {incr iCon
da50: 73 74 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20 20  straint} {..    
da60: 73 65 74 20 63 6f 6e 73 74 72 61 69 6e 74 55 73  set constraintUs
da70: 61 67 65 28 31 29 20 5b 6f 62 6a 65 63 74 20 63  age(1) [object c
da80: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c  reate -alias -fl
da90: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
daa0: 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d  ..        System
dab0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
dac0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
dad0: 6e 74 55 73 61 67 65 20 30 20 30 5d 0d 0a 0d 0a  ntUsage 0 0]....
dae0: 20 20 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75      $index(1) Ou
daf0: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
db00: 55 73 61 67 65 73 2e 53 65 74 56 61 6c 75 65 20  Usages.SetValue 
db10: 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  $constraintUsage
db20: 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 24  (1) \..        $
db30: 69 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 0d 0a 20  iConstraint.... 
db40: 20 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 55 73     $constraintUs
db50: 61 67 65 28 31 29 20 61 72 67 76 49 6e 64 65 78  age(1) argvIndex
db60: 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 41 42   [expr {int(0xAB
db70: 38 39 45 46 43 44 20 2b 20 24 69 43 6f 6e 73 74  89EFCD + $iConst
db80: 72 61 69 6e 74 29 7d 5d 0d 0a 20 20 20 20 24 63  raint)}]..    $c
db90: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31  onstraintUsage(1
dba0: 29 20 6f 6d 69 74 20 5b 65 78 70 72 20 7b 30 78  ) omit [expr {0x
dbb0: 43 43 20 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e  CC + $iConstrain
dbc0: 74 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 24 69  t}]..  }....  $i
dbd0: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
dbe0: 49 6e 64 65 78 4e 75 6d 62 65 72 20 5b 65 78 70  IndexNumber [exp
dbf0: 72 20 7b 69 6e 74 28 30 78 41 41 41 41 41 41 41  r {int(0xAAAAAAA
dc00: 41 29 7d 5d 0d 0a 20 20 24 69 6e 64 65 78 28 31  A)}]..  $index(1
dc10: 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 53  ) Outputs.IndexS
dc20: 74 72 69 6e 67 20 22 5c 78 30 31 74 65 73 74 20  tring "\x01test 
dc30: 69 6e 64 65 78 20 73 74 72 69 6e 67 2e 5c 78 46  index string.\xF
dc40: 46 22 0d 0a 20 20 24 69 6e 64 65 78 28 31 29 20  F"..  $index(1) 
dc50: 4f 75 74 70 75 74 73 2e 4e 65 65 64 54 6f 46 72  Outputs.NeedToFr
dc60: 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20 5b 65  eeIndexString [e
dc70: 78 70 72 20 7b 69 6e 74 28 30 78 35 35 35 35 35  xpr {int(0x55555
dc80: 35 35 35 29 7d 5d 0d 0a 20 20 24 69 6e 64 65 78  555)}]..  $index
dc90: 28 31 29 20 4f 75 74 70 75 74 73 2e 4f 72 64 65  (1) Outputs.Orde
dca0: 72 42 79 43 6f 6e 73 75 6d 65 64 20 5b 65 78 70  rByConsumed [exp
dcb0: 72 20 7b 69 6e 74 28 30 78 33 33 33 33 33 33 33  r {int(0x3333333
dcc0: 33 29 7d 5d 0d 0a 20 20 24 69 6e 64 65 78 28 31  3)}]..  $index(1
dcd0: 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61  ) Outputs.Estima
dce0: 74 65 64 43 6f 73 74 20 31 2e 30 0d 0a 0d 0a 20  tedCost 1.0.... 
dcf0: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
dd00: 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 45 73  Outputs.CanUseEs
dd10: 74 69 6d 61 74 65 64 52 6f 77 73 5d 7d 20 74 68  timatedRows]} th
dd20: 65 6e 20 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78  en {..    $index
dd30: 28 31 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69  (1) Outputs.Esti
dd40: 6d 61 74 65 64 52 6f 77 73 20 5b 65 78 70 72 20  matedRows [expr 
dd50: 7b 69 6e 74 28 30 78 43 43 43 43 43 43 43 43 29  {int(0xCCCCCCCC)
dd60: 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20  }]..  }....  if 
dd70: 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70  {[$index(1) Outp
dd80: 75 74 73 2e 43 61 6e 55 73 65 49 6e 64 65 78 46  uts.CanUseIndexF
dd90: 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lags]} then {.. 
dda0: 20 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74     $index(1) Out
ddb0: 70 75 74 73 2e 49 6e 64 65 78 46 6c 61 67 73 20  puts.IndexFlags 
ddc0: 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 45 45 45  [expr {int(0xEEE
ddd0: 45 45 45 45 45 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d  EEEEE)}]..  }...
dde0: 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31  .  if {[$index(1
ddf0: 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65  ) Outputs.CanUse
de00: 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 7d 20 74 68  ColumnsUsed]} th
de10: 65 6e 20 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78  en {..    $index
de20: 28 31 29 20 4f 75 74 70 75 74 73 2e 43 6f 6c 75  (1) Outputs.Colu
de30: 6d 6e 73 55 73 65 64 20 5b 65 78 70 72 20 7b 77  mnsUsed [expr {w
de40: 69 64 65 28 30 78 42 41 44 43 30 46 46 45 45 38  ide(0xBADC0FFEE8
de50: 37 35 36 32 31 41 29 7d 5d 0d 0a 20 20 7d 0d 0a  75621A)}]..  }..
de60: 0d 0a 20 20 73 65 74 20 70 49 6e 64 65 78 28 31  ..  set pIndex(1
de70: 29 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  ) [object invoke
de80: 20 2d 63 72 65 61 74 65 20 2d 66 6c 61 67 73 20   -create -flags 
de90: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
dea0: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
deb0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64  SQLite.SQLiteInd
dec0: 65 78 20 41 6c 6c 6f 63 4d 65 6d 6f 72 79 42 6c  ex AllocMemoryBl
ded0: 6f 63 6b 20 5c 0d 0a 20 20 20 20 20 20 24 6e 43  ock \..      $nC
dee0: 6f 6e 73 74 72 61 69 6e 74 20 24 6e 4f 72 64 65  onstraint $nOrde
def0: 72 42 79 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74  rBy]....  object
df00: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
df10: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
df20: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
df30: 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65  QLite.SQLiteInde
df40: 78 20 54 6f 49 6e 74 50 74 72 20 24 69 6e 64 65  x ToIntPtr $inde
df50: 78 28 31 29 20 24 70 49 6e 64 65 78 28 31 29 20  x(1) $pIndex(1) 
df60: 74 72 75 65 0d 0a 0d 0a 20 20 73 65 74 20 69 6e  true....  set in
df70: 64 65 78 28 32 29 20 5b 6f 62 6a 65 63 74 20 63  dex(2) [object c
df80: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c  reate -alias -fl
df90: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
dfa0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
dfb0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
dfc0: 65 49 6e 64 65 78 20 24 6e 43 6f 6e 73 74 72 61  eIndex $nConstra
dfd0: 69 6e 74 20 24 6e 4f 72 64 65 72 42 79 5d 0d 0a  int $nOrderBy]..
dfe0: 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ..  object invok
dff0: 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20  e -alias -flags 
e000: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
e010: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
e020: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64  SQLite.SQLiteInd
e030: 65 78 20 46 72 6f 6d 49 6e 74 50 74 72 20 24 70  ex FromIntPtr $p
e040: 49 6e 64 65 78 28 31 29 20 74 72 75 65 20 69 6e  Index(1) true in
e050: 64 65 78 28 32 29 0d 0a 0d 0a 20 20 66 6f 72 20  dex(2)....  for 
e060: 7b 73 65 74 20 69 43 6f 6e 73 74 72 61 69 6e 74  {set iConstraint
e070: 20 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e   0} {$iConstrain
e080: 74 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74  t < $nConstraint
e090: 7d 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74 72 61  } {incr iConstra
e0a0: 69 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20  int} {..    set 
e0b0: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 5b 24  constraint(1) [$
e0c0: 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20 20 20  index(1) \..    
e0d0: 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70 75 74      -alias Input
e0e0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e 47 65  s.Constraints.Ge
e0f0: 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74 72 61  tValue $iConstra
e100: 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20  int]....    set 
e110: 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 5b 24  constraint(2) [$
e120: 69 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20 20 20  index(2) \..    
e130: 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70 75 74      -alias Input
e140: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e 47 65  s.Constraints.Ge
e150: 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74 72 61  tValue $iConstra
e160: 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b  int]....    if {
e170: 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20  [$constraint(1) 
e180: 69 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24 63 6f  iColumn] != [$co
e190: 6e 73 74 72 61 69 6e 74 28 32 29 20 69 43 6f 6c  nstraint(2) iCol
e1a0: 75 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  umn]} then {..  
e1b0: 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e      error [appen
e1c0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
e1d0: 20 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74 20 69     "iColumn at i
e1e0: 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61  ndex " $iConstra
e1f0: 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d  int " does not m
e200: 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d  atch"]..    }...
e210: 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74  .    if {[$const
e220: 72 61 69 6e 74 28 31 29 20 6f 70 5d 20 21 3d 20  raint(1) op] != 
e230: 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20  [$constraint(2) 
e240: 6f 70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  op]} then {..   
e250: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
e260: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
e270: 20 20 22 6f 70 20 61 74 20 69 6e 64 65 78 20 22    "op at index "
e280: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20   $iConstraint " 
e290: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
e2a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e2b0: 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28  f {[$constraint(
e2c0: 31 29 20 75 73 61 62 6c 65 5d 20 21 3d 20 5b 24  1) usable] != [$
e2d0: 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 75 73  constraint(2) us
e2e0: 61 62 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  able]} then {.. 
e2f0: 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
e300: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
e310: 20 20 20 20 22 75 73 61 62 6c 65 20 61 74 20 69      "usable at i
e320: 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61  ndex " $iConstra
e330: 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d  int " does not m
e340: 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d  atch"]..    }...
e350: 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74  .    if {[$const
e360: 72 61 69 6e 74 28 31 29 20 69 54 65 72 6d 4f 66  raint(1) iTermOf
e370: 66 73 65 74 5d 20 21 3d 20 5b 24 63 6f 6e 73 74  fset] != [$const
e380: 72 61 69 6e 74 28 32 29 20 69 54 65 72 6d 4f 66  raint(2) iTermOf
e390: 66 73 65 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  fset]} then {.. 
e3a0: 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
e3b0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
e3c0: 20 20 20 20 22 69 54 65 72 6d 4f 66 66 73 65 74      "iTermOffset
e3d0: 20 61 74 20 69 6e 64 65 78 20 22 20 24 69 43 6f   at index " $iCo
e3e0: 6e 73 74 72 61 69 6e 74 20 22 20 64 6f 65 73 20  nstraint " does 
e3f0: 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20  not match"]..   
e400: 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72   }..  }....  for
e410: 20 7b 73 65 74 20 69 4f 72 64 65 72 42 79 20 30   {set iOrderBy 0
e420: 7d 20 7b 24 69 4f 72 64 65 72 42 79 20 3c 20 24  } {$iOrderBy < $
e430: 6e 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63 72 20  nOrderBy} {incr 
e440: 69 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20 20 20  iOrderBy} {..   
e450: 20 73 65 74 20 6f 72 64 65 72 42 79 28 31 29 20   set orderBy(1) 
e460: 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20  [$index(1) \..  
e470: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70        -alias Inp
e480: 75 74 73 2e 4f 72 64 65 72 42 79 73 2e 47 65 74  uts.OrderBys.Get
e490: 56 61 6c 75 65 20 24 69 4f 72 64 65 72 42 79 5d  Value $iOrderBy]
e4a0: 0d 0a 0d 0a 20 20 20 20 73 65 74 20 6f 72 64 65  ....    set orde
e4b0: 72 42 79 28 32 29 20 5b 24 69 6e 64 65 78 28 32  rBy(2) [$index(2
e4c0: 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61 6c  ) \..        -al
e4d0: 69 61 73 20 49 6e 70 75 74 73 2e 4f 72 64 65 72  ias Inputs.Order
e4e0: 42 79 73 2e 47 65 74 56 61 6c 75 65 20 24 69 4f  Bys.GetValue $iO
e4f0: 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 20 20 69  rderBy]....    i
e500: 66 20 7b 5b 24 6f 72 64 65 72 42 79 28 31 29 20  f {[$orderBy(1) 
e510: 69 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24 6f 72  iColumn] != [$or
e520: 64 65 72 42 79 28 32 29 20 69 43 6f 6c 75 6d 6e  derBy(2) iColumn
e530: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
e540: 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
e550: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
e560: 22 69 43 6f 6c 75 6d 6e 20 61 74 20 69 6e 64 65  "iColumn at inde
e570: 78 20 22 20 24 69 4f 72 64 65 72 42 79 20 22 20  x " $iOrderBy " 
e580: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
e590: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e5a0: 66 20 7b 5b 24 6f 72 64 65 72 42 79 28 31 29 20  f {[$orderBy(1) 
e5b0: 64 65 73 63 5d 20 21 3d 20 5b 24 6f 72 64 65 72  desc] != [$order
e5c0: 42 79 28 32 29 20 64 65 73 63 5d 7d 20 74 68 65  By(2) desc]} the
e5d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72  n {..      error
e5e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e5f0: 20 20 20 20 20 20 20 20 20 20 22 64 65 73 63 20            "desc 
e600: 61 74 20 69 6e 64 65 78 20 22 20 24 69 4f 72 64  at index " $iOrd
e610: 65 72 42 79 20 22 20 64 6f 65 73 20 6e 6f 74 20  erBy " does not 
e620: 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a  match"]..    }..
e630: 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65    }....  for {se
e640: 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d  t iConstraint 0}
e650: 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c   {$iConstraint <
e660: 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b   $nConstraint} {
e670: 69 6e 63 72 20 69 43 6f 6e 73 74 72 61 69 6e 74  incr iConstraint
e680: 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e  } {..    set con
e690: 73 74 72 61 69 6e 74 55 73 61 67 65 28 31 29 20  straintUsage(1) 
e6a0: 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20  [$index(1) \..  
e6b0: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 4f 75 74        -alias Out
e6c0: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
e6d0: 73 61 67 65 73 2e 47 65 74 56 61 6c 75 65 20 24  sages.GetValue $
e6e0: 69 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a  iConstraint]....
e6f0: 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72 61 69      set constrai
e700: 6e 74 55 73 61 67 65 28 32 29 20 5b 24 69 6e 64  ntUsage(2) [$ind
e710: 65 78 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20  ex(2) \..       
e720: 20 2d 61 6c 69 61 73 20 4f 75 74 70 75 74 73 2e   -alias Outputs.
e730: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
e740: 2e 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73  .GetValue $iCons
e750: 74 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 69  traint]....    i
e760: 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55  f {[$constraintU
e770: 73 61 67 65 28 31 29 20 61 72 67 76 49 6e 64 65  sage(1) argvInde
e780: 78 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 20  x] != \..       
e790: 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61   [$constraintUsa
e7a0: 67 65 28 32 29 20 61 72 67 76 49 6e 64 65 78 5d  ge(2) argvIndex]
e7b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
e7c0: 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67  error [appendArg
e7d0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
e7e0: 61 72 67 76 49 6e 64 65 78 20 61 74 20 69 6e 64  argvIndex at ind
e7f0: 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69 6e  ex " $iConstrain
e800: 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  t " does not mat
e810: 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ch"]..    }.... 
e820: 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61     if {[$constra
e830: 69 6e 74 55 73 61 67 65 28 31 29 20 6f 6d 69 74  intUsage(1) omit
e840: 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e  ] != [$constrain
e850: 74 55 73 61 67 65 28 32 29 20 6f 6d 69 74 5d 7d  tUsage(2) omit]}
e860: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65   then {..      e
e870: 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
e880: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 6f   \..          "o
e890: 6d 69 74 20 61 74 20 69 6e 64 65 78 20 22 20 24  mit at index " $
e8a0: 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20 64 6f  iConstraint " do
e8b0: 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a  es not match"]..
e8c0: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20      }..  }....  
e8d0: 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f  if {[$index(1) O
e8e0: 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62  utputs.IndexNumb
e8f0: 65 72 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20  er] != \..      
e900: 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75  [$index(2) Outpu
e910: 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 5d 7d  ts.IndexNumber]}
e920: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72   then {..    err
e930: 6f 72 20 22 49 6e 64 65 78 4e 75 6d 62 65 72 20  or "IndexNumber 
e940: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d  does not match".
e950: 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24  .  }....  if {[$
e960: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
e970: 2e 49 6e 64 65 78 53 74 72 69 6e 67 5d 20 6e 65  .IndexString] ne
e980: 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65   \..      [$inde
e990: 78 28 32 29 20 4f 75 74 70 75 74 73 2e 49 6e 64  x(2) Outputs.Ind
e9a0: 65 78 53 74 72 69 6e 67 5d 7d 20 74 68 65 6e 20  exString]} then 
e9b0: 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 49 6e  {..    error "In
e9c0: 64 65 78 53 74 72 69 6e 67 20 64 6f 65 73 20 6e  dexString does n
e9d0: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a  ot match"..  }..
e9e0: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
e9f0: 31 29 20 4f 75 74 70 75 74 73 2e 4e 65 65 64 54  1) Outputs.NeedT
ea00: 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67  oFreeIndexString
ea10: 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ] != \..      [$
ea20: 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73  index(2) Outputs
ea30: 2e 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78  .NeedToFreeIndex
ea40: 53 74 72 69 6e 67 5d 7d 20 74 68 65 6e 20 7b 0d  String]} then {.
ea50: 0a 20 20 20 20 65 72 72 6f 72 20 22 4e 65 65 64  .    error "Need
ea60: 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e  ToFreeIndexStrin
ea70: 67 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  g does not match
ea80: 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  "..  }....  if {
ea90: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
eaa0: 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d  ts.OrderByConsum
eab0: 65 64 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20  ed] != \..      
eac0: 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75  [$index(2) Outpu
ead0: 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d  ts.OrderByConsum
eae0: 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ed]} then {..   
eaf0: 20 65 72 72 6f 72 20 22 4f 72 64 65 72 42 79 43   error "OrderByC
eb00: 6f 6e 73 75 6d 65 64 20 64 6f 65 73 20 6e 6f 74  onsumed does not
eb10: 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a   match"..  }....
eb20: 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29    if {[$index(1)
eb30: 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74   Outputs.Estimat
eb40: 65 64 43 6f 73 74 5d 20 21 3d 20 5c 0d 0a 20 20  edCost] != \..  
eb50: 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f      [$index(2) O
eb60: 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64  utputs.Estimated
eb70: 43 6f 73 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Cost]} then {.. 
eb80: 20 20 20 65 72 72 6f 72 20 22 45 73 74 69 6d 61     error "Estima
eb90: 74 65 64 43 6f 73 74 20 64 6f 65 73 20 6e 6f 74  tedCost does not
eba0: 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a   match"..  }....
ebb0: 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29    if {[$index(1)
ebc0: 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 45   Outputs.CanUseE
ebd0: 73 74 69 6d 61 74 65 64 52 6f 77 73 5d 20 26 26  stimatedRows] &&
ebe0: 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65   \..      [$inde
ebf0: 78 28 32 29 20 4f 75 74 70 75 74 73 2e 43 61 6e  x(2) Outputs.Can
ec00: 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f 77 73  UseEstimatedRows
ec10: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 69  ]} then {..    i
ec20: 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75  f {[$index(1) Ou
ec30: 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 52  tputs.EstimatedR
ec40: 6f 77 73 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20  ows] != \..     
ec50: 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75     [$index(2) Ou
ec60: 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 52  tputs.EstimatedR
ec70: 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ows]} then {..  
ec80: 20 20 20 20 65 72 72 6f 72 20 22 45 73 74 69 6d      error "Estim
ec90: 61 74 65 64 52 6f 77 73 20 64 6f 65 73 20 6e 6f  atedRows does no
eca0: 74 20 6d 61 74 63 68 22 0d 0a 20 20 20 20 7d 0d  t match"..    }.
ecb0: 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24  .  }....  if {[$
ecc0: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
ecd0: 2e 43 61 6e 55 73 65 49 6e 64 65 78 46 6c 61 67  .CanUseIndexFlag
ece0: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b  s] && \..      [
ecf0: 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74  $index(2) Output
ed00: 73 2e 43 61 6e 55 73 65 49 6e 64 65 78 46 6c 61  s.CanUseIndexFla
ed10: 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  gs]} then {..   
ed20: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
ed30: 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 46 6c 61  Outputs.IndexFla
ed40: 67 73 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20  gs] != \..      
ed50: 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74    [$index(2) Out
ed60: 70 75 74 73 2e 49 6e 64 65 78 46 6c 61 67 73 5d  puts.IndexFlags]
ed70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
ed80: 65 72 72 6f 72 20 22 49 6e 64 65 78 46 6c 61 67  error "IndexFlag
ed90: 73 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  s does not match
eda0: 22 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  "..    }..  }...
edb0: 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31  .  if {[$index(1
edc0: 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65  ) Outputs.CanUse
edd0: 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 20 26 26 20  ColumnsUsed] && 
ede0: 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65 78  \..      [$index
edf0: 28 32 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55  (2) Outputs.CanU
ee00: 73 65 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 7d 20  seColumnsUsed]} 
ee10: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 69 66 20 7b  then {..    if {
ee20: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
ee30: 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 20  ts.ColumnsUsed] 
ee40: 21 3d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24  != \..        [$
ee50: 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73  index(2) Outputs
ee60: 2e 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 7d 20 74  .ColumnsUsed]} t
ee70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72  hen {..      err
ee80: 6f 72 20 22 43 6f 6c 75 6d 6e 73 55 73 65 64 20  or "ColumnsUsed 
ee90: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d  does not match".
eea0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 7d 20 2d  .    }..  }..} -
eeb0: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74  cleanup {..  cat
eec0: 63 68 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63 74  ch {..    object
eed0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
eee0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
eef0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
ef00: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e  .SQLite.SQLiteIn
ef10: 64 65 78 20 46 72 65 65 4d 65 6d 6f 72 79 42 6c  dex FreeMemoryBl
ef20: 6f 63 6b 20 24 70 49 6e 64 65 78 28 31 29 0d 0a  ock $pIndex(1)..
ef30: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
ef40: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 73 74  nocomplain const
ef50: 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 75 6e  raintUsage..  un
ef60: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
ef70: 6f 72 64 65 72 42 79 20 6e 4f 72 64 65 72 42 79  orderBy nOrderBy
ef80: 20 69 4f 72 64 65 72 42 79 0d 0a 20 20 75 6e 73   iOrderBy..  uns
ef90: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63  et -nocomplain c
efa0: 6f 6e 73 74 72 61 69 6e 74 20 6e 43 6f 6e 73 74  onstraint nConst
efb0: 72 61 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e  raint iConstrain
efc0: 74 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  t..  unset -noco
efd0: 6d 70 6c 61 69 6e 20 70 49 6e 64 65 78 20 69 6e  mplain pIndex in
efe0: 64 65 78 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  dex..} -constrai
eff0: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
f000: 6e 64 2e 6f 62 6a 65 63 74 20 53 79 73 74 65 6d  nd.object System
f010: 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64  .Data.SQLite\..d
f020: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
f030: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f040: 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c  .INTEROP_VIRTUAL
f050: 5f 54 41 42 4c 45 7d 20 2d 72 65 73 75 6c 74 20  _TABLE} -result 
f060: 7b 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  {}}....#########
f070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f0b0: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c  ######....runSQL
f0c0: 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d  iteTestEpilogue.
f0d0: 0a 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65  .runTestEpilogue
f0e0: 0d 0a                                            ..