System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f4f6f9409130daa64f181b74c22ec95a00f45f22:


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 70 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a  ...proc normaliz
0270: 65 56 74 61 62 52 65 73 75 6c 74 20 7b 20 76 61  eVtabResult { va
0280: 6c 75 65 20 7d 20 7b 0d 0a 20 20 73 65 74 20 72  lue } {..  set r
0290: 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 0d 0a  esult $value....
02a0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 66 69    if {[string fi
02b0: 72 73 74 20 5c 72 20 24 72 65 73 75 6c 74 5d 20  rst \r $result] 
02c0: 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {.. 
02d0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 73     set result [s
02e0: 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list 
02f0: 5c 72 5c 6e 20 5c 6e 5d 20 24 72 65 73 75 6c 74  \r\n \n] $result
0300: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75  ]..  }....  retu
0310: 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  rn [string map [
0320: 6c 69 73 74 20 5c 6e 20 22 20 2d 2d 20 22 5d 20  list \n " -- "] 
0330: 24 72 65 73 75 6c 74 5d 0d 0a 7d 0d 0a 0d 0a 23  $result]..}....#
0340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0390: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
03a0: 76 74 61 62 2d 31 2e 31 20 7b 62 61 73 69 63 20  vtab-1.1 {basic 
03b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
03c0: 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b 0d  pport} -setup {.
03d0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
03e0: 76 74 61 62 2d 31 2e 31 2e 64 62 0d 0a 7d 20 2d  vtab-1.1.db..} -
03f0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
0400: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
0410: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
0420: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
0430: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
0440: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
0450: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
0460: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
0470: 20 20 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a 20    set sql { \.. 
0480: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
0490: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
04a0: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
04b0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
04c0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
04d0: 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  ults errors.... 
04e0: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
04f0: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
0500: 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67  bst {..    using
0510: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73   System;..    us
0520: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
0530: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
0540: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
0550: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
0560: 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c       public seal
0570: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
0580: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a  oduleTest${id} :
0590: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f 6f   SQLiteModuleNoo
05a0: 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  p..      {..    
05b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
05c0: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
05d0: 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20  (string name).. 
05e0: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
05f0: 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  name)..        {
0600: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
0610: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
0620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
0630: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0680: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
0690: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
06a0: 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20 20  ode Create(..   
06b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
06c0: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
06d0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49  on,..          I
06e0: 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
06f0: 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  a,..          st
0700: 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65 6e  ring\[\] argumen
0710: 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ts,..          r
0720: 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
0730: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
0740: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
0750: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
0760: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
0770: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
0780: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
0790: 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d 0a   DeclareTable(..
07a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
07b0: 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45 20  ection, "CREATE 
07c0: 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78 29  TABLE ignored(x)
07d0: 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  ;", ref error);.
07e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
07f0: 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
0800: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
0810: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
0820: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  c;....          
0830: 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  table = new SQLi
0840: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61  teVirtualTable(a
0850: 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20  rguments);..    
0860: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0870: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
0880: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0890: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
08a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
08f0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
0900: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
0910: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0920: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
0930: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
0940: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0950: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
0960: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
0970: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
0980: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
0990: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
09a0: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
09b0: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
09c0: 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20  roperty]"))..   
09d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
09e0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
09f0: 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20  .Open();..      
0a00: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
0a10: 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65  .CreateModule(ne
0a20: 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65  w SQLiteModuleTe
0a30: 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64  st${id}("mod${id
0a40: 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  }"));....       
0a50: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
0a60: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
0a70: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
0a80: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
0a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
0ab0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
0ac0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
0ad0: 6c 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  l}]";..         
0ae0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
0af0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
0b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
0b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
0b20: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
0b30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
0b40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
0b50: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
0b60: 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72  true true true r
0b70: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79  esults errors Sy
0b80: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
0b90: 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  .dll]....  list 
0ba0: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
0bb0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
0bc0: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
0bd0: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
0be0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
0bf0: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
0c00: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
0c10: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
0c20: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
0c30: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61 69  d}.Test${id} Mai
0c40: 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  n..      } resul
0c50: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
0c60: 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a   ""]}] [normaliz
0c70: 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73  eVtabResult $res
0c80: 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ult]..} -cleanup
0c90: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
0ca0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
0cb0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
0cc0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73   result code res
0cd0: 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20  ults errors sql 
0ce0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
0cf0: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
0d00: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
0d10: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
0d20: 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68  oBug28 monoCrash
0d30: 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c  211 command.sql\
0d40: 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  ..compile.DATA S
0d50: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
0d60: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
0d70: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
0d80: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
0d90: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
0da0: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
0db0: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
0dc0: 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d  xp -result [norm
0dd0: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
0de0: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
0df0: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
0e00: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
0e10: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 24 7d  d+ \{\} 0 \{\}$}
0e20: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
0e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
0e80: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 32 2e   {test vtab-1.2.
0e90: 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76  1 {IEnumerable v
0ea0: 69 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73  irtual table} -s
0eb0: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
0ec0: 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 32 2e  leName vtab-1.2.
0ed0: 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  1.db..} -body {.
0ee0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
0ef0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
0f00: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
0f10: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
0f20: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
0f30: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
0f40: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
0f50: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
0f60: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
0f70: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0f80: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
0f90: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
0fa0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
0fb0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
0fc0: 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  T * FROM t${id};
0fd0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
0fe0: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
0ff0: 20 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53   UPDATE t${id} S
1000: 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d  ET x = 1; \..  }
1010: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
1020: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
1030: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
1040: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
1050: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
1060: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
1070: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
1080: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1090: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
10a0: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
10b0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
10c0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
10d0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
10e0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
10f0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
1100: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
1110: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1120: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
1130: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
1140: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
1150: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1160: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
1170: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
1180: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
1190: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
11a0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
11b0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
11c0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
11d0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
11e0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
11f0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
1200: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
1210: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
1220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
1230: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
1240: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1250: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
1260: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
1270: 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61  iteModuleEnumera
1280: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
1290: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
12a0: 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20  strings));....  
12b0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
12c0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
12d0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
12e0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
12f0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
1300: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1310: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
1320: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
1330: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
1350: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
1360: 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  uery();..       
1370: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1380: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
1390: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
13a0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
13b0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
13c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
13e0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
13f0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
1400: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(2)}]";....   
1410: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
1420: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
1430: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
1440: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
1450: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
1460: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1470: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
1480: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
1490: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
14a0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
14b0: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
14c0: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
14d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
14e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
1500: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
1510: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
1520: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
1530: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
1540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1550: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
1560: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
1570: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
1580: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1590: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15b0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
15c0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
15d0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
15e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15f0: 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69       catch (SQLi
1600: 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a  teException e)..
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1630: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65   result.Add(e.Re
1640: 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e  sultCode.ToStrin
1650: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1660: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
1670: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1690: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
16b0: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
16c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
16d0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
16e0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
16f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1750: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1760: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
1770: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1780: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1790: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
17a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
17b0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
17c0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
17d0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
17e0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
17f0: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
1800: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
1810: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
1820: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
1830: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
1840: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
1850: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
1860: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
1870: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
1880: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
1890: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
18a0: 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f   GetList one two
18b0: 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20 20   three 4 5.0..  
18c0: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
18d0: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
18e0: 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  ] [normalizeVtab
18f0: 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d  Result $result].
1900: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
1910: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1920: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
1930: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
1940: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
1950: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
1960: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
1970: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
1980: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
1990: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
19a0: 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63  8 monoCrash211 c
19b0: 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d  ommand.sql\..com
19c0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
19d0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
19e0: 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  ite\..defineCons
19f0: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
1a00: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
1a10: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f  VIRTUAL_TABLE co
1a20: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
1a30: 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72  tch \..regexp -r
1a40: 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65  esult [normalize
1a50: 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c  VtabResult {^Ok\
1a60: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
1a70: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
1a80: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
1a90: 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74 77 6f 20 74  \} 0 \{one two t
1aa0: 68 72 65 65 20 34 20 35 5c 2e 30 20 45 72 72 6f  hree 4 5\.0 Erro
1ab0: 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  r\..\{SQL logic 
1ac0: 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e  error( or missin
1ad0: 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20  g database)? -- 
1ae0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22 74  virtual table "t
1af0: 5c 64 2b 22 20 69 73 5c 0d 0a 72 65 61 64 2d 6f  \d+" is\..read-o
1b00: 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  nly\}\}$}]}....#
1b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1b60: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1b70: 76 74 61 62 2d 31 2e 32 2e 32 20 7b 49 45 6e 75  vtab-1.2.2 {IEnu
1b80: 6d 65 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20  merable virtual 
1b90: 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d  table} -setup {.
1ba0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
1bb0: 76 74 61 62 2d 31 2e 32 2e 32 2e 64 62 0d 0a 7d  vtab-1.2.2.db..}
1bc0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
1bd0: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
1be0: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
1bf0: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
1c00: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
1c10: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
1c20: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
1c30: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
1c40: 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b  ..  set sql(1) {
1c50: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56   \..    CREATE V
1c60: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b  IRTUAL TABLE t${
1c70: 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69  id} USING mod${i
1c80: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
1c90: 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a  set sql(2) { \..
1ca0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1cb0: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
1cc0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29  ....  set sql(3)
1cd0: 20 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45   { \..    UPDATE
1ce0: 20 74 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20   t${id} SET x = 
1cf0: 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75  1; \..  }....  u
1d00: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1d10: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
1d20: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
1d30: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
1d40: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
1d50: 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20  sing System;..  
1d60: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
1d70: 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20  ata.SQLite;..   
1d80: 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f   using Eagle._Co
1d90: 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b  ntainers.Public;
1da0: 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ....    namespac
1db0: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d  e _Dynamic${id}.
1dc0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
1dd0: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
1de0: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
1df0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
1e00: 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69  blic static Stri
1e10: 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70  ngList GetList(p
1e20: 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d  arams string\[\]
1e30: 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20   strings)..     
1e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e50: 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c  StringList resul
1e60: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  t = new StringLi
1e70: 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
1e80: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
1e90: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
1ea0: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
1eb0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
1ed0: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
1ee0: 53 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67  Source};[getFlag
1ef0: 73 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20  sProperty]")).. 
1f00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f10: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
1f20: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
1f30: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1f40: 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20  Module module = 
1f50: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
1f60: 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20  Enumerable(..   
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f               "mo
1f80: 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73  d${id}", strings
1f90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1fa0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
1fb0: 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65  ateModule(module
1fc0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1fd0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
1fe0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
1ff0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
2000: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
2010: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2020: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
2030: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
2040: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
2050: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
2060: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
2070: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
2080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
20a0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
20b0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
20c0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
20d0: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
20e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20f0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
2100: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
2110: 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22  ubst ${sql(2)}]"
2120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2130: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
2140: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
2150: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
2160: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
2170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2180: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2190: 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65     while (dataRe
21a0: 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20  ader.Read())..  
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c0: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
21d0: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
21e0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
21f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2200: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2210: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
2220: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
2230: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
2240: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
2250: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2270: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
2280: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
2290: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
22b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
22c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d0: 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74    command.Execut
22e0: 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
2310: 63 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74  ch (SQLiteExcept
2320: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
2330: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2340: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
2350: 41 64 64 28 65 2e 52 65 73 75 6c 74 43 6f 64 65  Add(e.ResultCode
2360: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
2370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2380: 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73  esult.Add(e.Mess
2390: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
23a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23c0: 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70       module.Disp
23d0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
23e0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
23f0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
2400: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2410: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
2420: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2430: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2480: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
2490: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
24a0: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
24b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
24c0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
24d0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
24e0: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
24f0: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
2500: 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79   errors [list Sy
2510: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2520: 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d  .dll Eagle.dll]]
2530: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
2540: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
2550: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
2560: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
2570: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
2580: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
2590: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
25a0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
25b0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
25c0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
25d0: 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20  st${id} GetList 
25e0: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20  one two three 4 
25f0: 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  5.0..      } res
2600: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
2610: 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c  lt ""]}] [normal
2620: 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72  izeVtabResult $r
2630: 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  esult]..} -clean
2640: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
2650: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
2660: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
2670: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
2680: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
2690: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
26a0: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
26b0: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
26c0: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
26d0: 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61  onoBug28 monoCra
26e0: 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71  sh211 command.sq
26f0: 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41  l\..compile.DATA
2700: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
2710: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
2720: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
2730: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
2740: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
2750: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
2760: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
2770: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
2780: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
2790: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
27a0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
27b0: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
27c0: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e  #\d+ \{\} 0 \{on
27d0: 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 5c  e two three 4 5\
27e0: 2e 30 20 45 72 72 6f 72 5c 0d 0a 5c 7b 53 51 4c  .0 Error\..\{SQL
27f0: 20 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72   logic error( or
2800: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
2810: 65 29 3f 20 2d 2d 20 76 69 72 74 75 61 6c 20 74  e)? -- virtual t
2820: 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73 5c 0d  able "t\d+" is\.
2830: 0a 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d  .read-only\}\}$}
2840: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
2850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2890: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
28a0: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 33 2e   {test vtab-1.3.
28b0: 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 3c 54  1 {IEnumerable<T
28c0: 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 7d  > virtual table}
28d0: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
28e0: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
28f0: 2e 33 2e 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  .3.1.db..} -body
2900: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
2910: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
2920: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
2930: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
2940: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
2950: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
2960: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
2970: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
2980: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
2990: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
29a0: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
29b0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
29c0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
29d0: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
29e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69  LECT * FROM t${i
29f0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
2a00: 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a  set sql(3) { \..
2a10: 20 20 20 20 55 50 44 41 54 45 20 74 24 7b 69 64      UPDATE t${id
2a20: 7d 20 53 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a  } SET x = 1; \..
2a30: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
2a40: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
2a50: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
2a60: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
2a70: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
2a80: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
2a90: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
2aa0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
2ab0: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
2ac0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2ad0: 69 74 65 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20  ite.Generic;..  
2ae0: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
2af0: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
2b00: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
2b10: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
2b20: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
2b30: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
2b40: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
2b50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
2b60: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
2b70: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
2b80: 70 61 72 61 6d 73 20 69 6e 74 5c 5b 5c 5d 20 69  params int\[\] i
2b90: 6e 74 65 67 65 72 73 29 0d 0a 20 20 20 20 20 20  ntegers)..      
2ba0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
2bb0: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
2bc0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
2bd0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
2be0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
2bf0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
2c00: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
2c10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
2c30: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
2c40: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
2c50: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
2c60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c70: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
2c80: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
2c90: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
2ca0: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
2cb0: 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c  (new SQLiteModul
2cc0: 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69 6e 74 3e  eEnumerable<int>
2cd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ce0: 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 69 6e 74   "mod${id}", int
2cf0: 65 67 65 72 73 29 29 3b 0d 0a 0d 0a 20 20 20 20  egers));....    
2d00: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
2d10: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
2d20: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
2d30: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
2d40: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2d50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d60: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
2d70: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
2d80: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
2d90: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
2da0: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
2db0: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
2dc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2dd0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2de0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
2df0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
2e00: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
2e30: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
2e40: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
2e50: 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  (2)}]";....     
2e60: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e70: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
2e80: 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f   dataReader = co
2e90: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61  mmand.ExecuteRea
2ea0: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
2eb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ec0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
2ed0: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
2ee0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ef0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
2f00: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
2f10: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
2f50: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
2f60: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
2f70: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
2f80: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
2f90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fa0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
2fb0: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
2fc0: 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b  bst ${sql(3)}]";
2fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fe0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
2ff0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3000: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
3010: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
3020: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3030: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3040: 20 20 20 63 61 74 63 68 20 28 53 51 4c 69 74 65     catch (SQLite
3050: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
3060: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3080: 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65 73 75  esult.Add(e.Resu
3090: 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28  ltCode.ToString(
30a0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
30b0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
30c0: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
30d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
30e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30f0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
3100: 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a  ction.Close();..
3110: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3120: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3130: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3140: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
3150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31a0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
31b0: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
31c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31d0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
31e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
31f0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
3200: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
3210: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b  results errors [
3220: 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61  list System.Data
3230: 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c  .SQLite.dll Eagl
3240: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73  e.dll]]....  lis
3250: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
3260: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
3270: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
3280: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
3290: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
32a0: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
32b0: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
32c0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
32d0: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
32e0: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
32f0: 65 74 4c 69 73 74 20 31 20 32 20 33 20 34 20 35  etList 1 2 3 4 5
3300: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
3310: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
3320: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
3330: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
3340: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
3350: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
3360: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
3370: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3380: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
3390: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
33a0: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
33b0: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
33c0: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
33d0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
33e0: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
33f0: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
3400: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
3410: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
3420: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
3430: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
3440: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
3450: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
3460: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
3470: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
3480: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
3490: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
34a0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
34b0: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
34c0: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
34d0: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 31 20 32 20 33  + \{\} 0 \{1 2 3
34e0: 20 34 20 35 20 45 72 72 6f 72 20 5c 7b 53 51 4c   4 5 Error \{SQL
34f0: 5c 0d 0a 6c 6f 67 69 63 20 65 72 72 6f 72 28 20  \..logic error( 
3500: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
3510: 61 73 65 29 3f 20 2d 2d 20 76 69 72 74 75 61 6c  ase)? -- virtual
3520: 20 74 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73   table "t\d+" is
3530: 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d   read-only\}\}$}
3540: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
3550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3590: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
35a0: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 33 2e   {test vtab-1.3.
35b0: 32 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 3c 54  2 {IEnumerable<T
35c0: 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 7d  > virtual table}
35d0: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
35e0: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
35f0: 2e 33 2e 32 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  .3.2.db..} -body
3600: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
3610: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
3620: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
3630: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
3640: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
3650: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
3660: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
3670: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
3680: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
3690: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
36a0: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
36b0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
36c0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
36d0: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
36e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69  LECT * FROM t${i
36f0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
3700: 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a  set sql(3) { \..
3710: 20 20 20 20 55 50 44 41 54 45 20 74 24 7b 69 64      UPDATE t${id
3720: 7d 20 53 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a  } SET x = 1; \..
3730: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
3740: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
3750: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
3760: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
3770: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
3780: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
3790: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
37a0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
37b0: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
37c0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
37d0: 69 74 65 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20  ite.Generic;..  
37e0: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
37f0: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
3800: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
3810: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
3820: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
3830: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
3840: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
3850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
3860: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
3870: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
3880: 70 61 72 61 6d 73 20 69 6e 74 5c 5b 5c 5d 20 69  params int\[\] i
3890: 6e 74 65 67 65 72 73 29 0d 0a 20 20 20 20 20 20  ntegers)..      
38a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
38b0: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
38c0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
38d0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
38e0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
38f0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
3900: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
3910: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
3920: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
3930: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
3940: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
3950: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
3960: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3970: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
3980: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
3990: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
39a0: 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 6e  odule module = n
39b0: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
39c0: 6e 75 6d 65 72 61 62 6c 65 3c 69 6e 74 3e 28 0d  numerable<int>(.
39d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
39e0: 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 69 6e 74   "mod${id}", int
39f0: 65 67 65 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  egers);....     
3a00: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
3a10: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6d  n.CreateModule(m
3a20: 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  odule);....     
3a30: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
3a40: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
3a50: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
3a60: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
3a70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a90: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
3aa0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
3ab0: 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(1)}]";..    
3ac0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
3ad0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
3ae0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
3af0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3b00: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
3b10: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
3b20: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
3b30: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
3b40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
3b60: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
3b70: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
3b80: 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  2)}]";....      
3b90: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
3ba0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20  QLiteDataReader 
3bb0: 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d  dataReader = com
3bc0: 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64  mand.ExecuteRead
3bd0: 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  er())..         
3be0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3bf0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64          while (d
3c00: 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29  ataReader.Read()
3c10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3c20: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
3c30: 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e  dataReader\[0\].
3c40: 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3c60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
3c80: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
3c90: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
3ca0: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
3cb0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
3cc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3cd0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
3ce0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
3cf0: 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d  st ${sql(3)}]";.
3d00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d10: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
3d20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3d30: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45         command.E
3d40: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
3d50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3d60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3d70: 20 20 63 61 74 63 68 20 28 53 51 4c 69 74 65 45    catch (SQLiteE
3d80: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
3d90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3db0: 73 75 6c 74 2e 41 64 64 28 65 2e 52 65 73 75 6c  sult.Add(e.Resul
3dc0: 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28 29  tCode.ToString()
3dd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3de0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
3df0: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
3e00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
3e10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3e20: 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
3e30: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
3e40: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
3e50: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
3e60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3e70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
3e80: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
3e90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ee0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
3ef0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3f00: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
3f10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
3f20: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
3f30: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3f40: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
3f50: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
3f60: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
3f70: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
3f80: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
3f90: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
3fa0: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
3fb0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
3fc0: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
3fd0: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
3fe0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
3ff0: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
4000: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
4010: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
4020: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
4030: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
4040: 4c 69 73 74 20 31 20 32 20 33 20 34 20 35 0d 0a  List 1 2 3 4 5..
4050: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
4060: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
4070: 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ]}] [normalizeVt
4080: 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74  abResult $result
4090: 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
40a0: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
40b0: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
40c0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
40d0: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
40e0: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
40f0: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
4100: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
4110: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
4120: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
4130: 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31  g28 monoCrash211
4140: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63   command.sql\..c
4150: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
4160: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
4170: 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f  QLite\..defineCo
4180: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
4190: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
41a0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE 
41b0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
41c0: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
41d0: 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69  -result [normali
41e0: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f  zeVtabResult {^O
41f0: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
4200: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
4210: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
4220: 5c 7b 5c 7d 20 30 20 5c 7b 31 20 32 20 33 20 34  \{\} 0 \{1 2 3 4
4230: 20 35 20 45 72 72 6f 72 20 5c 7b 53 51 4c 5c 0d   5 Error \{SQL\.
4240: 0a 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72  .logic error( or
4250: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
4260: 65 29 3f 20 2d 2d 20 76 69 72 74 75 61 6c 20 74  e)? -- virtual t
4270: 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73 20 72  able "t\d+" is r
4280: 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d  ead-only\}\}$}]}
4290: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
42a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42e0: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
42f0: 74 65 73 74 20 76 74 61 62 2d 31 2e 34 20 7b 76  test vtab-1.4 {v
4300: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e  irtual table fun
4310: 63 74 69 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d  ction support} -
4320: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
4330: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 34  ileName vtab-1.4
4340: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
4350: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
4360: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
4370: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
4380: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
4390: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
43a0: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
43b0: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
43c0: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
43d0: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
43e0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
43f0: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
4400: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
4410: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
4420: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
4430: 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54 28   Base64(x, CAST(
4440: 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20  'one' AS BLOB)) 
4450: 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a  FROM t${id}; \..
4460: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
4470: 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (3) { \..    SEL
4480: 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43 41  ECT Base64(x, CA
4490: 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42  ST('one' AS BLOB
44a0: 29 2c 20 27 74 77 6f 27 29 20 46 52 4f 4d 20 74  ), 'two') FROM t
44b0: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
44c0: 0a 20 20 73 65 74 20 73 71 6c 28 34 29 20 7b 20  .  set sql(4) { 
44d0: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
44e0: 73 65 36 35 28 78 2c 20 43 41 53 54 28 27 6f 6e  se65(x, CAST('on
44f0: 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f  e' AS BLOB)) FRO
4500: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
4510: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
4520: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
4530: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
4540: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
4550: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
4560: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
4570: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
4580: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
4590: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
45a0: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
45b0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
45c0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
45d0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
45e0: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73       public clas
45f0: 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  s SQLiteFunction
4600: 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75  ${id} : SQLiteFu
4610: 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d  nction..      {.
4620: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
4630: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
4640: 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 20  id}()..         
4650: 20 3a 20 62 61 73 65 28 53 51 4c 69 74 65 44 61   : base(SQLiteDa
4660: 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c  teFormats.Defaul
4670: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  t, DateTimeKind.
4680: 55 6e 73 70 65 63 69 66 69 65 64 2c 0d 0a 20 20  Unspecified,..  
4690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
46a0: 75 6c 6c 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20  ull, false)..   
46b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
46c0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
46d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
46e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
46f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4730: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4740: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
4750: 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20   Invoke(..      
4760: 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61      object\[\] a
4770: 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29  rgs..          )
4780: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4790: 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20         if (args 
47a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
47b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
47c0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
47d0: 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20  if (args.Length 
47e0: 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20  != 2)..         
47f0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72     return new Ar
4800: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
4810: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
4830: 65 65 64 20 65 78 61 63 74 6c 79 20 74 77 6f 20  eed exactly two 
4840: 61 72 67 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b  arguments, got {
4850: 30 7d 22 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68  0}", args.Length
4860: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
4870: 20 6f 62 6a 65 63 74 20 61 72 67 20 3d 20 61 72   object arg = ar
4880: 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20  gs\[1\];....    
4890: 20 20 20 20 20 20 69 66 20 28 61 72 67 20 3d 3d        if (arg ==
48a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
48b0: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
48c0: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
48d0: 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20        Type type 
48e0: 3d 20 61 72 67 2e 47 65 74 54 79 70 65 28 29 3b  = arg.GetType();
48f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
4900: 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
4910: 28 44 42 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  (DBNull))..     
4920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
4930: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
4940: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
4950: 65 20 21 3d 20 74 79 70 65 6f 66 28 62 79 74 65  e != typeof(byte
4960: 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20 20 20 20 20  \[\]))..        
4970: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41      return new A
4980: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
4990: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
49a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
49b0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
49c0: 20 62 79 74 65 20 61 72 72 61 79 2c 20 67 6f 74   byte array, got
49d0: 20 7b 30 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a   {0}", type));..
49e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
49f0: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73  rn Convert.ToBas
4a00: 65 36 34 53 74 72 69 6e 67 28 28 62 79 74 65 5c  e64String((byte\
4a10: 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a 20 20 20 20  [\]) arg);..    
4a20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
4a30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
4a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  /....      publi
4a90: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
4aa0: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
4ab0: 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64  {id} : SQLiteMod
4ac0: 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b  uleNoop..      {
4ad0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4ae0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
4af0: 74 24 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61  t${id}(string na
4b00: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a  me)..          :
4b10: 20 62 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20   base(name)..   
4b20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4b30: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
4b40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4b50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4ba0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4bb0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
4bc0: 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
4bd0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  (..          SQL
4be0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
4bf0: 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  nnection,..     
4c00: 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69       IntPtr pCli
4c10: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
4c20: 20 20 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61      string\[\] a
4c30: 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20  rguments,..     
4c40: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
4c50: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
4c60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
4c70: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
4c80: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4ca0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4cb0: 65 20 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61  e rc = DeclareTa
4cc0: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
4cd0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43    connection, "C
4ce0: 52 45 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f  REATE TABLE igno
4cf0: 72 65 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72  red(x);", ref er
4d00: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
4d10: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
4d20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
4d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4d40: 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  turn rc;....    
4d50: 20 20 20 20 20 20 72 63 20 3d 20 44 65 63 6c 61        rc = Decla
4d60: 72 65 46 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65  reFunction(conne
4d70: 63 74 69 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65  ction, -1, "Base
4d80: 36 34 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  64", ref error);
4d90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
4da0: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
4db0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
4dc0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4dd0: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
4de0: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
4df0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
4e00: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
4e10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
4e20: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
4e30: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
4e40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4e90: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
4ea0: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
4eb0: 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
4ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
4ed0: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
4ee0: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
4ef0: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
4f00: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
4f10: 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
4f20: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4f30: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d          cursor =
4f40: 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74 75   new SQLiteVirtu
4f50: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61  alTableCursor(ta
4f60: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
4f70: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
4f80: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
4f90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4fa0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4ff0: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
5000: 72 69 64 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75  ride bool FindFu
5010: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
5020: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
5030: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
5040: 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
5050: 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
5060: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
5070: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
5080: 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  f SQLiteFunction
5090: 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20   function,..    
50a0: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
50b0: 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20   pClientData..  
50c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
50d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
50e0: 69 66 20 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e  if (argumentCoun
50f0: 74 20 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20  t != 2)..       
5100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5110: 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
5120: 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f  table, String.Fo
5130: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
5140: 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c       "no \\"{0}\
5150: 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 63  \" functions acc
5160: 65 70 74 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74  ept {1} argument
5170: 28 73 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  (s)",..         
5180: 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20       base.Name, 
5190: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b  argumentCount));
51a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
51b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
51c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
51d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
51e0: 69 6e 67 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c  ing.Equals(name,
51f0: 20 22 42 61 73 65 36 34 22 2c 0d 0a 20 20 20 20   "Base64",..    
5200: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
5210: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
5220: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
5230: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5240: 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
5250: 65 45 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74  eError(table, St
5260: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
5270: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
5280: 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69  \\"{0}\\" functi
5290: 6f 6e 73 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c  ons are named \\
52a0: 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20  "{1}\\"",..     
52b0: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
52c0: 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  me, name));.... 
52d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
52e0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
52f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5300: 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65     function = ne
5310: 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  w SQLiteFunction
5320: 24 7b 69 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20  ${id}();..      
5330: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
5340: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
5360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
53b0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
53c0: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
53d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
53e0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53   public static S
53f0: 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73  tringList GetLis
5400: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
5410: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
5420: 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65  List result = ne
5430: 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
5440: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  ...          usi
5450: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
5460: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
5470: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
5480: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
5490: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
54a0: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
54b0: 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65  };[getFlagsPrope
54c0: 72 74 79 20 4e 6f 42 69 6e 64 46 75 6e 63 74 69  rty NoBindFuncti
54d0: 6f 6e 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20  ons]"))..       
54e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
54f0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65    connection.Ope
5500: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
5510: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
5520: 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51  ateModule(new SQ
5530: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
5540: 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29  id}("mod${id}"))
5550: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5560: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
5570: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5580: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
5590: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
55a0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
55b0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55e0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
55f0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
5600: 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(1)}]";..    
5610: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5620: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
5630: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
5640: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
5650: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
5660: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5680: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
5690: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
56a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
56b0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
56c0: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
56d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
56e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
5710: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
5720: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
5730: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
5740: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
5750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5760: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
5770: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
5780: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
5790: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
57a0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
57b0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
57c0: 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78  {0}", command.Ex
57d0: 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b  ecuteScalar()));
57e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
57f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
5810: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
5820: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5840: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
5850: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
5860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5870: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5890: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
58a0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
58b0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
58c0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
58d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
58e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
58f0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
5900: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
5910: 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a  t ${sql(3)}]";..
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5930: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
5940: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
5950: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
5960: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
5970: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5980: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5990: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
59a0: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
59b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
59c0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
59d0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
59e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
59f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
5a00: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
5a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5a20: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
5a30: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
5a40: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
5a50: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
5a60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
5a80: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
5a90: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
5aa0: 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(4)}]";..      
5ab0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5ac0: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
5ad0: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
5ae0: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
5af0: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
5b00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5b10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5b20: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
5b30: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
5b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5b50: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
5b60: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
5b70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5b80: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
5b90: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
5ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5bb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
5bc0: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
5bd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
5c30: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
5c40: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
5c50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
5c60: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
5c70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5c80: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
5c90: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
5ca0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
5cb0: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
5cc0: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
5cd0: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
5ce0: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
5cf0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
5d00: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
5d10: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
5d20: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
5d30: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
5d40: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
5d50: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
5d60: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
5d70: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
5d80: 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20 72 65  List..      } re
5d90: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
5da0: 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61  ult ""]}] [norma
5db0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24  lizeVtabResult $
5dc0: 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61  result]..} -clea
5dd0: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
5de0: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
5df0: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
5e00: 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
5e10: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73  results errors s
5e20: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
5e30: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
5e40: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
5e50: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
5e60: 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72  monoBug28 monoCr
5e70: 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73  ash211 command.s
5e80: 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54  ql\..compile.DAT
5e90: 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
5ea0: 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65  Data.SQLite\..de
5eb0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
5ec0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
5ed0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
5ee0: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
5ef0: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
5f00: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e  egexp -result [n
5f10: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
5f20: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
5f30: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
5f40: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
5f50: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
5f60: 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c  {\} b25l \{SQL l
5f70: 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 28 20 6f 72  ogic\..error( or
5f80: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
5f90: 65 29 3f 20 2d 2d 20 75 6e 61 62 6c 65 20 74 6f  e)? -- unable to
5fa0: 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 42 61   use function Ba
5fb0: 73 65 36 34 20 69 6e 20 74 68 65 20 72 65 71 75  se64 in the requ
5fc0: 65 73 74 65 64 5c 0d 0a 63 6f 6e 74 65 78 74 5c  ested\..context\
5fd0: 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  } \{SQL logic er
5fe0: 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20  ror( or missing 
5ff0: 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f  database)? -- no
6000: 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 5c   such function:\
6010: 0d 0a 42 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d  ..Base65\}\}$}]}
6020: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
6030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6070: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
6080: 74 65 73 74 20 76 74 61 62 2d 31 2e 35 20 7b 76  test vtab-1.5 {v
6090: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e  irtual table fun
60a0: 63 74 69 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d  ction support} -
60b0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
60c0: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 35  ileName vtab-1.5
60d0: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
60e0: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
60f0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
6100: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
6110: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
6120: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
6130: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
6140: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
6150: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
6160: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
6170: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
6180: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
6190: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
61a0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
61b0: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
61c0: 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54 28   Base64(x, CAST(
61d0: 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20  'one' AS BLOB)) 
61e0: 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a  FROM t${id}; \..
61f0: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
6200: 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (3) { \..    SEL
6210: 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43 41  ECT Base64(x, CA
6220: 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42  ST('one' AS BLOB
6230: 29 2c 20 27 74 77 6f 27 29 20 46 52 4f 4d 20 74  ), 'two') FROM t
6240: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
6250: 0a 20 20 73 65 74 20 73 71 6c 28 34 29 20 7b 20  .  set sql(4) { 
6260: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
6270: 73 65 36 35 28 78 2c 20 43 41 53 54 28 27 6f 6e  se65(x, CAST('on
6280: 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f  e' AS BLOB)) FRO
6290: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
62a0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
62b0: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
62c0: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
62d0: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
62e0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
62f0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
6300: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
6310: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
6320: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
6330: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
6340: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
6350: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
6360: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
6370: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73       public clas
6380: 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  s SQLiteFunction
6390: 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75  ${id} : SQLiteFu
63a0: 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d  nction..      {.
63b0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
63c0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
63d0: 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 20  id}()..         
63e0: 20 3a 20 62 61 73 65 28 53 51 4c 69 74 65 44 61   : base(SQLiteDa
63f0: 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c  teFormats.Defaul
6400: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  t, DateTimeKind.
6410: 55 6e 73 70 65 63 69 66 69 65 64 2c 0d 0a 20 20  Unspecified,..  
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
6430: 75 6c 6c 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20  ull, false)..   
6440: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6450: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
6460: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
6470: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
64c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
64d0: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
64e0: 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20   Invoke(..      
64f0: 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61      object\[\] a
6500: 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29  rgs..          )
6510: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6520: 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20         if (args 
6530: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6540: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
6550: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
6560: 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20  if (args.Length 
6570: 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20  != 2)..         
6580: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72     return new Ar
6590: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
65a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
65c0: 65 65 64 20 65 78 61 63 74 6c 79 20 74 77 6f 20  eed exactly two 
65d0: 61 72 67 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b  arguments, got {
65e0: 30 7d 22 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68  0}", args.Length
65f0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
6600: 20 6f 62 6a 65 63 74 20 61 72 67 20 3d 20 61 72   object arg = ar
6610: 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20  gs\[1\];....    
6620: 20 20 20 20 20 20 69 66 20 28 61 72 67 20 3d 3d        if (arg ==
6630: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
6640: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
6650: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
6660: 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20        Type type 
6670: 3d 20 61 72 67 2e 47 65 74 54 79 70 65 28 29 3b  = arg.GetType();
6680: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
6690: 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
66a0: 28 44 42 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  (DBNull))..     
66b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
66c0: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
66d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
66e0: 65 20 21 3d 20 74 79 70 65 6f 66 28 62 79 74 65  e != typeof(byte
66f0: 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20 20 20 20 20  \[\]))..        
6700: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41      return new A
6710: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
6720: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
6740: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
6750: 20 62 79 74 65 20 61 72 72 61 79 2c 20 67 6f 74   byte array, got
6760: 20 7b 30 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a   {0}", type));..
6770: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
6780: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73  rn Convert.ToBas
6790: 65 36 34 53 74 72 69 6e 67 28 28 62 79 74 65 5c  e64String((byte\
67a0: 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a 20 20 20 20  [\]) arg);..    
67b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
67c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  /....      publi
6820: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
6830: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
6840: 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64  {id} : SQLiteMod
6850: 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b  uleNoop..      {
6860: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6870: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
6880: 74 24 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61  t${id}(string na
6890: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a  me)..          :
68a0: 20 62 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20   base(name)..   
68b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
68c0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
68d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
68e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
68f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6930: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6940: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
6950: 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
6960: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  (..          SQL
6970: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
6980: 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  nnection,..     
6990: 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69       IntPtr pCli
69a0: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
69b0: 20 20 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61      string\[\] a
69c0: 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20  rguments,..     
69d0: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
69e0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
69f0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
6a00: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
6a10: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
6a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6a30: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6a40: 65 20 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61  e rc = DeclareTa
6a50: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
6a60: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43    connection, "C
6a70: 52 45 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f  REATE TABLE igno
6a80: 72 65 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72  red(x);", ref er
6a90: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
6aa0: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
6ab0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6ad0: 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  turn rc;....    
6ae0: 20 20 20 20 20 20 72 63 20 3d 20 44 65 63 6c 61        rc = Decla
6af0: 72 65 46 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65  reFunction(conne
6b00: 63 74 69 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65  ction, -1, "Base
6b10: 36 34 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  64", ref error);
6b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
6b30: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
6b40: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
6b50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6b60: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
6b70: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
6b80: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
6b90: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
6ba0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
6bb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6bc0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
6bd0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6c20: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
6c30: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
6c40: 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
6c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
6c60: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
6c70: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
6c80: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
6c90: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
6ca0: 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
6cb0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6cc0: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d          cursor =
6cd0: 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74 75   new SQLiteVirtu
6ce0: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61  alTableCursor(ta
6cf0: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
6d00: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
6d10: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
6d20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6d30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6d80: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
6d90: 72 69 64 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75  ride bool FindFu
6da0: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
6db0: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
6dc0: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
6dd0: 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
6de0: 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
6df0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
6e00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
6e10: 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  f SQLiteFunction
6e20: 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20   function,..    
6e30: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
6e40: 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20   pClientData..  
6e50: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6e60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6e70: 69 66 20 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e  if (argumentCoun
6e80: 74 20 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20  t != 2)..       
6e90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6ea0: 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
6eb0: 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f  table, String.Fo
6ec0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
6ed0: 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c       "no \\"{0}\
6ee0: 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 63  \" functions acc
6ef0: 65 70 74 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74  ept {1} argument
6f00: 28 73 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  (s)",..         
6f10: 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20       base.Name, 
6f20: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b  argumentCount));
6f30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6f40: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
6f50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6f60: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
6f70: 69 6e 67 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c  ing.Equals(name,
6f80: 20 22 42 61 73 65 36 34 22 2c 0d 0a 20 20 20 20   "Base64",..    
6f90: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
6fa0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
6fb0: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
6fc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6fd0: 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
6fe0: 65 45 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74  eError(table, St
6ff0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
7000: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
7010: 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69  \\"{0}\\" functi
7020: 6f 6e 73 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c  ons are named \\
7030: 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20  "{1}\\"",..     
7040: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
7050: 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  me, name));.... 
7060: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7070: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
7080: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7090: 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65     function = ne
70a0: 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  w SQLiteFunction
70b0: 24 7b 69 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20  ${id}();..      
70c0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
70d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
70e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7140: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
7150: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
7160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7170: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53   public static S
7180: 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73  tringList GetLis
7190: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
71a0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
71b0: 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65  List result = ne
71c0: 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
71d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  ...          usi
71e0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
71f0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
7200: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
7210: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
7220: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
7230: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
7240: 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65  };[getFlagsPrope
7250: 72 74 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20  rty]"))..       
7260: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7270: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65    connection.Ope
7280: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
7290: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
72a0: 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51  ateModule(new SQ
72b0: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
72c0: 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29  id}("mod${id}"))
72d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
72e0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
72f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7300: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
7310: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
7320: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
7330: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7360: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
7370: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
7380: 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(1)}]";..    
7390: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
73a0: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
73b0: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
73c0: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
73d0: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
73e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
73f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7400: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
7410: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
7420: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7430: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
7440: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
7450: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7460: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
7470: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7480: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
7490: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
74a0: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
74b0: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
74c0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
74d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
74e0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
74f0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
7500: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
7510: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
7520: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
7530: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
7540: 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78  {0}", command.Ex
7550: 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b  ecuteScalar()));
7560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7570: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
7590: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
75a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
75b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
75c0: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
75d0: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
75e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
75f0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
7600: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7610: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
7620: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
7630: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
7640: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
7650: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7670: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
7680: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
7690: 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a  t ${sql(3)}]";..
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
76c0: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
76d0: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
76e0: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
76f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7700: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7710: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
7720: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
7730: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7740: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
7750: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
7760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7770: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
7780: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
7790: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
77a0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
77b0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
77c0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
77d0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
77e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
7800: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
7810: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
7820: 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(4)}]";..      
7830: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
7840: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
7850: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
7860: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
7870: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
7880: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7890: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
78a0: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
78b0: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
78c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
78d0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
78e0: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
78f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7900: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
7910: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
7920: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7930: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
7940: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
7950: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
79b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
79c0: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
79d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
79e0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
79f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7a00: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
7a10: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
7a20: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
7a30: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
7a40: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
7a50: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
7a60: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
7a70: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
7a80: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
7a90: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
7aa0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
7ab0: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
7ac0: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
7ad0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
7ae0: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
7af0: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
7b00: 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20 72 65  List..      } re
7b10: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
7b20: 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61  ult ""]}] [norma
7b30: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24  lizeVtabResult $
7b40: 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61  result]..} -clea
7b50: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
7b60: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
7b70: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
7b80: 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
7b90: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73  results errors s
7ba0: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
7bb0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
7bc0: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
7bd0: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
7be0: 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72  monoBug28 monoCr
7bf0: 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73  ash211 command.s
7c00: 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54  ql\..compile.DAT
7c10: 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
7c20: 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65  Data.SQLite\..de
7c30: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
7c40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
7c50: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
7c60: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
7c70: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
7c80: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e  egexp -result [n
7c90: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
7ca0: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
7cb0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
7cc0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
7cd0: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
7ce0: 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c  {\} b25l \{SQL l
7cf0: 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 28 20 6f 72  ogic\..error( or
7d00: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
7d10: 65 29 3f 20 2d 2d 20 28 3f 3a 75 6e 61 62 6c 65  e)? -- (?:unable
7d20: 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f 6e   to use function
7d30: 20 42 61 73 65 36 34 20 69 6e 20 74 68 65 5c 0d   Base64 in the\.
7d40: 0a 72 65 71 75 65 73 74 65 64 20 63 6f 6e 74 65  .requested conte
7d50: 78 74 7c 6e 65 65 64 20 65 78 61 63 74 6c 79 20  xt|need exactly 
7d60: 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2c 20 67 6f  one argument, go
7d70: 74 20 33 29 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67  t 3)\} \{SQL log
7d80: 69 63 20 65 72 72 6f 72 28 20 6f 72 5c 0d 0a 6d  ic error( or\..m
7d90: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 29  issing database)
7da0: 3f 20 2d 2d 20 6e 6f 20 73 75 63 68 20 66 75 6e  ? -- no such fun
7db0: 63 74 69 6f 6e 3a 20 42 61 73 65 36 35 5c 7d 5c  ction: Base65\}\
7dc0: 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }$}]}....#######
7dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e10: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
7e20: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
7e30: 2e 36 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c  .6 {virtual tabl
7e40: 65 20 72 65 6e 61 6d 65 20 73 75 70 70 6f 72 74  e rename support
7e50: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
7e60: 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d  t fileName vtab-
7e70: 31 2e 36 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20  1.6.db..} -body 
7e80: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
7e90: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
7ea0: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
7eb0: 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20   NextId]..  set 
7ec0: 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65  dataSource [file
7ed0: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
7ee0: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69  seDirectory] $fi
7ef0: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74  leName]....  set
7f00: 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20   sql(1) { \..   
7f10: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
7f20: 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49  TABLE t${id} USI
7f30: 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a  NG mod${id}; \..
7f40: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
7f50: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 41 4c 54  (2) { \..    ALT
7f60: 45 52 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20  ER TABLE t${id} 
7f70: 52 45 4e 41 4d 45 20 54 4f 20 78 24 7b 69 64 7d  RENAME TO x${id}
7f80: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
7f90: 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20  t sql(3) { \..  
7fa0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
7fb0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
7fc0: 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74   WHERE type = 't
7fd0: 61 62 6c 65 27 20 4f 52 44 45 52 20 42 59 20 6e  able' ORDER BY n
7fe0: 61 6d 65 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  ame; \..  }.... 
7ff0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
8000: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
8010: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
8020: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
8030: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
8040: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
8050: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
8060: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
8070: 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f     using Eagle._
8080: 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69  Containers.Publi
8090: 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  c;....    namesp
80a0: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
80b0: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
80c0: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
80d0: 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ass SQLiteModule
80e0: 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
80f0: 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20  teModuleNoop..  
8100: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
8110: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
8120: 6c 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69  leTest${id}(stri
8130: 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
8140: 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29      : base(name)
8150: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8160: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8170: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
8180: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
81e0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
81f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
8200: 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
8210: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
8220: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a  on connection,..
8230: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
8240: 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20   pClientData,.. 
8250: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c           string\
8260: 5b 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a  [\] arguments,..
8270: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
8280: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
8290: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
82a0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
82b0: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ror..          )
82c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
82d0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
82e0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c  orCode rc = Decl
82f0: 61 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  areTable(..     
8300: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
8310: 6e 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  n, "CREATE TABLE
8320: 20 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72   ignored(x);", r
8330: 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ef error);....  
8340: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
8350: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
8360: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
8370: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d     return rc;...
8380: 0a 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65  .          table
8390: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72   = new SQLiteVir
83a0: 74 75 61 6c 54 61 62 6c 65 28 61 72 67 75 6d 65  tualTable(argume
83b0: 6e 74 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  nts);..         
83c0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
83d0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
83e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
83f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8440: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
8450: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
8460: 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20 20 20  Code Open(..    
8470: 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
8480: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
8490: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53  .          ref S
84a0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
84b0: 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a  eCursor cursor..
84c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
84d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
84e0: 20 20 63 75 72 73 6f 72 20 3d 20 6e 65 77 20 53    cursor = new S
84f0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
8500: 65 43 75 72 73 6f 72 28 74 61 62 6c 65 29 3b 0d  eCursor(table);.
8510: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
8520: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
8530: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  e.Ok;..        }
8540: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
8550: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
85a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
85b0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
85c0: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
85d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
85e0: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
85f0: 65 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  etList()..      
8600: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
8610: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
8620: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
8630: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
8640: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
8650: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
8660: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
8670: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
8680: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
8690: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
86a0: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
86b0: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
86c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
86d0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
86e0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20  n.Open();..     
86f0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
8700: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
8710: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ew SQLiteModuleT
8720: 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69  est${id}("mod${i
8730: 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d}"));....      
8740: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
8750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8760: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
8770: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
8780: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
8790: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
87a0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
87b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
87c0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
87d0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
87e0: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
87f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8800: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
8810: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
8820: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
8830: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
8840: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8850: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8860: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
8870: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
8880: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8890: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
88a0: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
88b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
88c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
88d0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
88e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
88f0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
8900: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
8910: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
8920: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
8930: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8950: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
8960: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
8970: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(3)}]";....   
8980: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
8990: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
89a0: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
89b0: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
89c0: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89f0: 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64   while (dataRead
8a00: 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20  er.Read())..    
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a20: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
8a30: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
8a40: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
8a50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8a60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8a70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8a80: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
8a90: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
8aa0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8ab0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
8ac0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
8ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8ae0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
8af0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
8b00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8b10: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
8b20: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
8b30: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
8b40: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
8b50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
8b70: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
8b80: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
8b90: 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(2)}]";..      
8ba0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
8bb0: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
8bc0: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
8bd0: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
8be0: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
8bf0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8c00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8c10: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
8c20: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
8c30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8c40: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
8c50: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
8c60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8c70: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
8c80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8c90: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
8ca0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
8cb0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
8cc0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
8cd0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
8ce0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8cf0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
8d00: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
8d10: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
8d20: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
8d30: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
8d40: 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61  iteDataReader da
8d50: 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61  taReader = comma
8d60: 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  nd.ExecuteReader
8d70: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8d80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8d90: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
8da0: 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64  (dataReader.Read
8db0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8dc0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
8dd0: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
8de0: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8e10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8e20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8e30: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
8e40: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
8e50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8e60: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
8e70: 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20  Message);..     
8e80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8e90: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
8ea0: 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  on.Close();..   
8eb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8ec0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
8ed0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
8ee0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
8f40: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
8f50: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
8f60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
8f70: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
8f80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
8f90: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72  ..    }..  }] tr
8fa0: 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73  ue true true res
8fb0: 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73  ults errors [lis
8fc0: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
8fd0: 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64  Lite.dll Eagle.d
8fe0: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  ll]]....  list $
8ff0: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
9000: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  .      [expr {[i
9010: 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72  nfo exists error
9020: 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22  s] ? $errors : "
9030: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  "}] \..      [ex
9040: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
9050: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
9060: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
9070: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
9080: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c  }.Test${id} GetL
9090: 69 73 74 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  ist..      } res
90a0: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
90b0: 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c  lt ""]}] [normal
90c0: 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72  izeVtabResult $r
90d0: 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  esult]..} -clean
90e0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
90f0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
9100: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
9110: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
9120: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
9130: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
9140: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
9150: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
9160: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
9170: 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61  onoBug28 monoCra
9180: 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71  sh211 command.sq
9190: 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41  l\..compile.DATA
91a0: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
91b0: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
91c0: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
91d0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
91e0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
91f0: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
9200: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
9210: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
9220: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
9230: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
9240: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
9250: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
9260: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b  #\d+ \{\} 0 \{\{
9270: 5c 7d 20 74 5c 64 2b 20 5c 7b 5c 7d 20 78 5c 64  \} t\d+ \{\} x\d
9280: 2b 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23  +\}$}]}....#####
9290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92d0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
92e0: 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62  nTest {test vtab
92f0: 2d 31 2e 37 20 7b 76 69 72 74 75 61 6c 20 74 61  -1.7 {virtual ta
9300: 62 6c 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d  ble xBestIndex m
9310: 61 72 73 68 61 6c 6c 69 6e 67 20 28 31 29 7d 20  arshalling (1)} 
9320: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20  -setup {..  set 
9330: 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e  fileName vtab-1.
9340: 37 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  7.db..} -body {.
9350: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
9360: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
9370: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
9380: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
9390: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
93a0: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
93b0: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
93c0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
93d0: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
93e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 24 7b 69  REATE TABLE t${i
93f0: 64 7d 28 79 20 43 48 41 52 28 31 30 29 20 4e 4f  d}(y CHAR(10) NO
9400: 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b  T NULL PRIMARY K
9410: 45 59 29 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41  EY); \..    CREA
9420: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
9430: 20 75 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f   u${id} USING mo
9440: 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  d${id}; \..  }..
9450: 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b  ..  set sql(2) {
9460: 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49   \..    INSERT I
9470: 4e 54 4f 20 74 24 7b 69 64 7d 20 53 45 4c 45 43  NTO t${id} SELEC
9480: 54 20 78 20 46 52 4f 4d 20 75 24 7b 69 64 7d 3b  T x FROM u${id};
9490: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
94a0: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
94b0: 20 53 45 4c 45 43 54 20 76 24 7b 69 64 7d 2e 79   SELECT v${id}.y
94c0: 20 46 52 4f 4d 20 74 24 7b 69 64 7d 20 76 24 7b   FROM t${id} v${
94d0: 69 64 7d 20 4c 45 46 54 20 4f 55 54 45 52 20 4a  id} LEFT OUTER J
94e0: 4f 49 4e 20 5c 0d 0a 20 20 20 20 75 24 7b 69 64  OIN \..    u${id
94f0: 7d 20 4f 4e 20 75 24 7b 69 64 7d 2e 78 20 3d 20  } ON u${id}.x = 
9500: 76 24 7b 69 64 7d 2e 79 20 57 48 45 52 45 20 75  v${id}.y WHERE u
9510: 24 7b 69 64 7d 2e 78 20 49 53 20 4e 4f 54 20 4e  ${id}.x IS NOT N
9520: 55 4c 4c 20 5c 0d 0a 20 20 20 20 4f 52 44 45 52  ULL \..    ORDER
9530: 20 42 59 20 76 24 7b 69 64 7d 2e 79 20 44 45 53   BY v${id}.y DES
9540: 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75  C; \..  }....  u
9550: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
9560: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
9570: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
9580: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
9590: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
95a0: 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20  sing System;..  
95b0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43    using System.C
95c0: 6f 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20 20 20  ollections;..   
95d0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
95e0: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
95f0: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
9600: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
9610: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
9620: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
9630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
9640: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
9650: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
9660: 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d  t${id} : SQLiteM
9670: 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 0d  oduleEnumerable.
9680: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
9690: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
96a0: 52 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  Result;....     
96b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9700: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
9710: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
9720: 64 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73  d}(..          s
9730: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
9740: 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 62         IEnumerab
9750: 6c 65 20 65 6e 75 6d 65 72 61 62 6c 65 0d 0a 20  le enumerable.. 
9760: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9770: 20 20 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d        : base(nam
9780: 65 2c 20 65 6e 75 6d 65 72 61 62 6c 65 29 0d 0a  e, enumerable)..
9790: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
97a0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
97b0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
97c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9810: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
9820: 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46  .        // BUGF
9830: 49 58 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  IX: This method 
9840: 68 65 6c 70 73 20 76 65 72 69 66 79 20 74 69 63  helps verify tic
9850: 6b 65 74 20 5c 5b 35 36 66 35 31 31 64 32 36 38  ket \[56f511d268
9860: 5c 5d 20 69 73 20 66 69 78 65 64 2e 0d 0a 20 20  \] is fixed...  
9870: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9880: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
9890: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
98a0: 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  e BestIndex(..  
98b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
98c0: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
98d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  ,..          SQL
98e0: 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a  iteIndex index..
98f0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
9900: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9910: 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74 70    if (index.Outp
9920: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73  uts.ConstraintUs
9930: 61 67 65 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29  ages.Length > 0)
9940: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
9950: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
9960: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
9970: 73 74 72 61 69 6e 74 55 73 61 67 65 73 5c 5b 30  straintUsages\[0
9980: 5c 5d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  \] == null)..   
9990: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
99a0: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
99b0: 65 70 74 69 6f 6e 28 22 43 6f 6e 73 74 72 61 69  eption("Constrai
99c0: 6e 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20 69 73  ntUsages\[0\] is
99d0: 20 6e 75 6c 6c 22 29 3b 0d 0a 20 20 20 20 20 20   null");..      
99e0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
99f0: 20 20 20 20 20 20 20 20 20 20 52 65 73 75 6c 74            Result
9a00: 20 3d 20 22 43 6f 6e 73 74 72 61 69 6e 74 55 73   = "ConstraintUs
9a10: 61 67 65 73 20 69 73 20 4f 4b 22 3b 0d 0a 20 20  ages is OK";..  
9a20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9a30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61         return ba
9a40: 73 65 2e 42 65 73 74 49 6e 64 65 78 28 74 61 62  se.BestIndex(tab
9a50: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
9a60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
9a70: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ac0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c  //....      publ
9ad0: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
9ae0: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
9af0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
9b00: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
9b10: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
9b20: 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73  ams string\[\] s
9b30: 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20  trings)..       
9b40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
9b50: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
9b60: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
9b70: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9b80: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
9b90: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
9ba0: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
9bb0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
9bc0: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
9bd0: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
9be0: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
9bf0: 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20  roperty]"))..   
9c00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9c10: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
9c20: 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  .Open();....    
9c30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f          SQLiteMo
9c40: 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 6d 6f  duleTest${id} mo
9c50: 64 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  dule = new SQLit
9c60: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
9c70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9c80: 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73     "mod${id}", s
9c90: 74 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20 20  trings);....    
9ca0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
9cb0: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
9cc0: 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  module);....    
9cd0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
9ce0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
9cf0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
9d00: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
9d10: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
9d20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9d30: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
9d40: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
9d50: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
9d60: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
9d70: 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78  t.Add(command.Ex
9d80: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e  ecuteNonQuery().
9d90: 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
9da0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9db0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
9dc0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
9dd0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
9de0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
9df0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
9e00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9e10: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
9e20: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
9e30: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9e50: 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64  sult.Add(command
9e60: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
9e70: 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  ().ToString());.
9e80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
9ea0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
9eb0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
9ec0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
9ed0: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
9ee0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9ef0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
9f00: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
9f10: 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22  ubst ${sql(3)}]"
9f20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9f30: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
9f40: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
9f50: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
9f60: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
9f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9f90: 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65     while (dataRe
9fa0: 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20  ader.Read())..  
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
9fd0: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
9fe0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
9ff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a000: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a010: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
a020: 64 28 6d 6f 64 75 6c 65 2e 52 65 73 75 6c 74 29  d(module.Result)
a030: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
a040: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
a050: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
a060: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
a070: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
a080: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a090: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a0e0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a0f0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
a100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a110: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
a120: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
a130: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
a140: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
a150: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
a160: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
a170: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
a180: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
a190: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
a1a0: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
a1b0: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
a1c0: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
a1d0: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
a1e0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
a1f0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
a200: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
a210: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
a220: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
a230: 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74  d} GetList one t
a240: 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a  wo three 4 5.0..
a250: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
a260: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
a270: 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ]}] [normalizeVt
a280: 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74  abResult $result
a290: 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
a2a0: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
a2b0: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
a2c0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
a2d0: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
a2e0: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
a2f0: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
a300: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
a310: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
a320: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
a330: 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31  g28 monoCrash211
a340: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63   command.sql\..c
a350: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
a360: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
a370: 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f  QLite\..defineCo
a380: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
a390: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
a3a0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE 
a3b0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
a3c0: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
a3d0: 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69  -result [normali
a3e0: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f  zeVtabResult {^O
a3f0: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
a400: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
a410: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
a420: 5c 7b 5c 7d 20 30 20 5c 7b 30 20 35 20 74 77 6f  \{\} 0 \{0 5 two
a430: 20 74 68 72 65 65 20 6f 6e 65 20 35 5c 2e 30 5c   three one 5\.0\
a440: 0d 0a 34 20 5c 7b 43 6f 6e 73 74 72 61 69 6e 74  ..4 \{Constraint
a450: 55 73 61 67 65 73 20 69 73 20 4f 4b 5c 7d 5c 7d  Usages is OK\}\}
a460: 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  $}]}....########
a470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4b0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
a4c0: 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e  st {test vtab-1.
a4d0: 38 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  8 {virtual table
a4e0: 20 78 42 65 73 74 49 6e 64 65 78 20 6d 61 72 73   xBestIndex mars
a4f0: 68 61 6c 6c 69 6e 67 20 28 32 29 7d 20 2d 73 65  halling (2)} -se
a500: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
a510: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 38 2e 64  eName vtab-1.8.d
a520: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
a530: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
a540: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
a550: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
a560: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
a570: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
a580: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
a590: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
a5a0: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
a5b0: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
a5c0: 54 45 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 28  TE TABLE t${id}(
a5d0: 79 20 43 48 41 52 28 31 30 29 20 4e 4f 54 20 4e  y CHAR(10) NOT N
a5e0: 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 29  ULL PRIMARY KEY)
a5f0: 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  ; \..    CREATE 
a600: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 75 24  VIRTUAL TABLE u$
a610: 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b  {id} USING mod${
a620: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
a630: 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
a640: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
a650: 20 74 24 7b 69 64 7d 20 53 45 4c 45 43 54 20 78   t${id} SELECT x
a660: 20 46 52 4f 4d 20 75 24 7b 69 64 7d 3b 20 5c 0d   FROM u${id}; \.
a670: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
a680: 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(3) { \..    SE
a690: 4c 45 43 54 20 76 24 7b 69 64 7d 2e 79 20 46 52  LECT v${id}.y FR
a6a0: 4f 4d 20 74 24 7b 69 64 7d 20 76 24 7b 69 64 7d  OM t${id} v${id}
a6b0: 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e   LEFT OUTER JOIN
a6c0: 20 5c 0d 0a 20 20 20 20 75 24 7b 69 64 7d 20 4f   \..    u${id} O
a6d0: 4e 20 75 24 7b 69 64 7d 2e 78 20 3d 20 76 24 7b  N u${id}.x = v${
a6e0: 69 64 7d 2e 79 20 57 48 45 52 45 20 75 24 7b 69  id}.y WHERE u${i
a6f0: 64 7d 2e 78 20 49 53 20 4e 4f 54 20 4e 55 4c 4c  d}.x IS NOT NULL
a700: 20 5c 0d 0a 20 20 20 20 41 4e 44 20 75 24 7b 69   \..    AND u${i
a710: 64 7d 2e 78 20 42 45 54 57 45 45 4e 20 27 6f 6e  d}.x BETWEEN 'on
a720: 65 27 20 61 6e 64 20 27 74 68 72 65 65 27 20 4f  e' and 'three' O
a730: 52 44 45 52 20 42 59 20 75 24 7b 69 64 7d 2e 78  RDER BY u${id}.x
a740: 20 41 53 43 2c 20 5c 0d 0a 20 20 20 20 75 24 7b   ASC, \..    u${
a750: 69 64 7d 2e 78 20 44 45 53 43 3b 20 5c 0d 0a 20  id}.x DESC; \.. 
a760: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
a770: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
a780: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
a790: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
a7a0: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
a7b0: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
a7c0: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
a7d0: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
a7e0: 6f 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ons;..    using 
a7f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
a800: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
a810: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
a820: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
a830: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
a840: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
a850: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
a860: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
a870: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
a880: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e  : SQLiteModuleEn
a890: 75 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20  umerable..      
a8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
a8b0: 63 20 73 74 72 69 6e 67 20 52 65 73 75 6c 74 3b  c string Result;
a8c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
a920: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
a930: 6c 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20  leTest${id}(..  
a940: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
a950: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
a960: 49 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d  IEnumerable enum
a970: 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  erable..        
a980: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a    )..          :
a990: 20 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d   base(name, enum
a9a0: 65 72 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20  erable)..       
a9b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
a9c0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
a9d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a9e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
aa30: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
aa40: 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 54 68 69    // BUGFIX: Thi
aa50: 73 20 6d 65 74 68 6f 64 20 68 65 6c 70 73 20 76  s method helps v
aa60: 65 72 69 66 79 20 74 69 63 6b 65 74 20 5c 5b 35  erify ticket \[5
aa70: 36 66 35 31 31 64 32 36 38 5c 5d 20 69 73 20 66  6f511d268\] is f
aa80: 69 78 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ixed...        /
aa90: 2f 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  /..        publi
aaa0: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
aab0: 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49  eErrorCode BestI
aac0: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
aad0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
aae0: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
aaf0: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65        SQLiteInde
ab00: 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  x index..       
ab10: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
ab20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
ab30: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
ab40: 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65  straintUsages.Le
ab50: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
ab60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ab70: 20 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75      if (index.Ou
ab80: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
ab90: 55 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e  Usages\[0\] == n
aba0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
abb0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
abc0: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
abd0: 22 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  "ConstraintUsage
abe0: 73 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29  s\[0\] is null")
abf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ;..            e
ac00: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
ac10: 20 20 20 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e     Result = "Con
ac20: 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73  straintUsages is
ac30: 20 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20   OK";..         
ac40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ac50: 72 65 74 75 72 6e 20 62 61 73 65 2e 42 65 73 74  return base.Best
ac60: 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e 64  Index(table, ind
ac70: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex);..        }.
ac80: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
ac90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ace0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
acf0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
ad00: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
ad10: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
ad20: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
ad30: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
ad40: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
ad50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ad60: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
ad70: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
ad80: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
ad90: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
ada0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
adb0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
adc0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
add0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ade0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
adf0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
ae00: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
ae10: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
ae20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
ae30: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
ae40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ae50: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
ae60: 74 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20 3d 20  t${id} module = 
ae70: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
ae80: 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20  Test${id}(..    
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
aea0: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
aeb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
aec0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
aed0: 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29  teModule(module)
aee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
aef0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
af00: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
af10: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
af20: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
af30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
af40: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
af50: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
af60: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
af70: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
af80: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63      result.Add(c
af90: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
afa0: 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e  nQuery().ToStrin
afb0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
afc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
afd0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
afe0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
aff0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
b000: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
b010: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
b030: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
b040: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
b050: 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (2)}]";..       
b060: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
b070: 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  d(command.Execut
b080: 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74  eNonQuery().ToSt
b090: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
b0a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b0b0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
b0c0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
b0d0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
b0e0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
b0f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b110: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
b120: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
b130: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
b140: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
b150: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
b160: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
b170: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
b180: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
b190: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b1a0: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
b1b0: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
b1c0: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
b1d0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
b1e0: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
b1f0: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
b200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b210: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
b220: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b230: 72 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64 75 6c  result.Add(modul
b240: 65 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20  e.Result);..    
b250: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
b260: 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  on.Close();..   
b270: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b280: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
b290: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
b2a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
b300: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
b310: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
b320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
b330: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
b340: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
b350: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72  ..    }..  }] tr
b360: 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73  ue true true res
b370: 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73  ults errors [lis
b380: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
b390: 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64  Lite.dll Eagle.d
b3a0: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  ll]]....  list $
b3b0: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
b3c0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  .      [expr {[i
b3d0: 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72  nfo exists error
b3e0: 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22  s] ? $errors : "
b3f0: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  "}] \..      [ex
b400: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
b410: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
b420: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
b430: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
b440: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c  }.Test${id} GetL
b450: 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  ist one two thre
b460: 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d  e 4 5.0..      }
b470: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
b480: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f  result ""]}] [no
b490: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
b4a0: 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63  t $result]..} -c
b4b0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
b4c0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
b4d0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
b4e0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
b4f0: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
b500: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
b510: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
b520: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
b530: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
b540: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e  ct monoBug28 mon
b550: 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e  oCrash211 comman
b560: 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e  d.sql\..compile.
b570: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
b580: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d  em.Data.SQLite\.
b590: 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
b5a0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b5b0: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
b5c0: 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65  AL_TABLE compile
b5d0: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c  CSharp} -match \
b5e0: 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  ..regexp -result
b5f0: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
b600: 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  esult {^Ok\..Sys
b610: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
b620: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
b630: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20  ults#\d+ \{\} 0 
b640: 5c 7b 30 20 35 20 6f 6e 65 20 74 68 72 65 65 5c  \{0 5 one three\
b650: 0d 0a 5c 7b 43 6f 6e 73 74 72 61 69 6e 74 55 73  ..\{ConstraintUs
b660: 61 67 65 73 20 69 73 20 4f 4b 5c 7d 5c 7d 24 7d  ages is OK\}\}$}
b670: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
b680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6c0: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
b6d0: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 39 20   {test vtab-1.9 
b6e0: 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69 72  {IEnumerable vir
b6f0: 74 75 61 6c 20 74 61 62 6c 65 20 77 2f 6c 61 72  tual table w/lar
b700: 67 65 20 62 79 74 65 20 61 72 72 61 79 7d 20 2d  ge byte array} -
b710: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
b720: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 39  ileName vtab-1.9
b730: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
b740: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
b750: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
b760: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
b770: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
b780: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
b790: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
b7a0: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
b7b0: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
b7c0: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
b7d0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
b7e0: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
b7f0: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
b800: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
b810: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
b820: 20 53 55 4d 28 78 29 20 46 52 4f 4d 20 74 24 7b   SUM(x) FROM t${
b830: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
b840: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
b850: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
b860: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
b870: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
b880: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
b890: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
b8a0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
b8b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d  .Data.SQLite;...
b8c0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
b8d0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
b8e0: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
b8f0: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
b900: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
b910: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
b920: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
b930: 47 65 74 53 75 6d 28 29 0d 0a 20 20 20 20 20 20  GetSum()..      
b940: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75    {..          u
b950: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
b960: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
b970: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
b980: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
b990: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
b9a0: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
b9b0: 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f  ce};[getFlagsPro
b9c0: 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20 20  perty]"))..     
b9d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b9e0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f      connection.O
b9f0: 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pen();....      
ba00: 20 20 20 20 20 20 62 79 74 65 5c 5b 5c 5d 20 62        byte\[\] b
ba10: 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5c  ytes = new byte\
ba20: 5b 31 30 34 38 35 37 36 5c 5d 3b 0d 0a 20 20 20  [1048576\];..   
ba30: 20 20 20 20 20 20 20 20 20 6e 65 77 20 52 61 6e           new Ran
ba40: 64 6f 6d 28 29 2e 4e 65 78 74 42 79 74 65 73 28  dom().NextBytes(
ba50: 62 79 74 65 73 29 3b 0d 0a 0d 0a 20 20 20 20 20  bytes);....     
ba60: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
ba70: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
ba80: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
ba90: 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20  numerable(..    
baa0: 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b            "mod${
bab0: 69 64 7d 22 2c 20 62 79 74 65 73 29 29 3b 0d 0a  id}", bytes));..
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
bad0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
bae0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
baf0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
bb00: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
bb10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bb20: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
bb30: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
bb40: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
bb50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
bb60: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
bb70: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20  NonQuery();..   
bb80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
bb90: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
bba0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
bbb0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
bbc0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
bbd0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
bbe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bbf0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
bc00: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
bc10: 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20   ${sql(2)}]";.. 
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bc30: 75 72 6e 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  urn command.Exec
bc40: 75 74 65 53 63 61 6c 61 72 28 29 3b 0d 0a 20 20  uteScalar();..  
bc50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
bc60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
bc70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
bc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
bcd0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bce0: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
bcf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
bd00: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
bd10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
bd20: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
bd30: 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65  ] true true true
bd40: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
bd50: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
bd60: 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73  te.dll]....  lis
bd70: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
bd80: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
bd90: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
bda0: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
bdb0: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
bdc0: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
bdd0: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
bde0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
bdf0: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
be00: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
be10: 65 74 53 75 6d 0d 0a 20 20 20 20 20 20 7d 20 72  etSum..      } r
be20: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
be30: 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d  sult ""]}] [norm
be40: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
be50: 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65  $result]..} -cle
be60: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
be70: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
be80: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
be90: 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65  lain result code
bea0: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
beb0: 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69  sql dataSource i
bec0: 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 74  d fileName..} -t
bed0: 69 6d 65 20 74 72 75 65 20 2d 63 6f 6e 73 74 72  ime true -constr
bee0: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
bef0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
bf00: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
bf10: 31 31 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e 73 71 6c  11\..command.sql
bf20: 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51   compile.DATA SQ
bf30: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
bf40: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
bf50: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
bf60: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
bf70: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
bf80: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
bf90: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
bfa0: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
bfb0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
bfc0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
bfd0: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
bfe0: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
bff0: 2b 20 5c 7b 5c 7d 20 30 20 28 3f 3a 2d 29 3f 5c  + \{\} 0 (?:-)?\
c000: 64 2b 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  d+$}]}....######
c010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c050: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
c060: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
c070: 31 2e 31 30 20 7b 76 69 72 74 75 61 6c 20 74 61  1.10 {virtual ta
c080: 62 6c 65 20 78 52 6f 77 49 64 20 75 6e 69 71 75  ble xRowId uniqu
c090: 65 6e 65 73 73 7d 20 2d 73 65 74 75 70 20 7b 0d  eness} -setup {.
c0a0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
c0b0: 76 74 61 62 2d 31 2e 31 30 2e 64 62 0d 0a 7d 20  vtab-1.10.db..} 
c0c0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
c0d0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
c0e0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
c0f0: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
c100: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
c110: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
c120: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
c130: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
c140: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
c150: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
c160: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
c170: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
c180: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
c190: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
c1a0: 20 20 20 53 45 4c 45 43 54 20 43 41 53 45 20 57     SELECT CASE W
c1b0: 48 45 4e 20 30 20 54 48 45 4e 20 72 6f 77 49 64  HEN 0 THEN rowId
c1c0: 20 45 4c 53 45 20 72 6f 77 49 64 20 45 4e 44 2c   ELSE rowId END,
c1d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 43   \..           C
c1e0: 41 53 45 20 57 48 45 4e 20 31 20 54 48 45 4e 20  ASE WHEN 1 THEN 
c1f0: 72 6f 77 49 64 20 45 4c 53 45 20 72 6f 77 49 64  rowId ELSE rowId
c200: 20 45 4e 44 20 46 52 4f 4d 20 74 24 7b 69 64 7d   END FROM t${id}
c210: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
c220: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
c230: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
c240: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
c250: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
c260: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
c270: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
c280: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
c290: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
c2a0: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
c2b0: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
c2c0: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
c2d0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
c2e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
c2f0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
c300: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
c310: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
c320: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
c330: 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61  gList GetList(pa
c340: 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20  rams string\[\] 
c350: 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20  strings)..      
c360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
c370: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
c380: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
c390: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
c3a0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
c3b0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
c3c0: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
c3d0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
c3f0: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
c400: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
c410: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
c420: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c430: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
c440: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
c450: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
c460: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
c470: 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c  (new SQLiteModul
c480: 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20  eEnumerable(..  
c490: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
c4a0: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
c4b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c4c0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
c4d0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
c4e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
c4f0: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
c500: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c510: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
c520: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
c530: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
c540: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
c550: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
c560: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
c570: 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69  onQuery().ToStri
c580: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
c590: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c5a0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
c5b0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
c5c0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
c5d0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
c5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
c600: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
c610: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
c620: 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(2)}]";....    
c630: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
c640: 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  (SQLiteDataReade
c650: 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63  r dataReader = c
c660: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65  ommand.ExecuteRe
c670: 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20  ader())..       
c680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c690: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c6b0: 20 4e 4f 54 45 3a 20 4d 61 73 6b 20 6f 66 66 20   NOTE: Mask off 
c6c0: 74 68 65 20 68 61 73 68 20 63 6f 64 65 20 70 6f  the hash code po
c6d0: 72 74 69 6f 6e 20 62 65 63 61 75 73 65 20 69 74  rtion because it
c6e0: 20 64 69 66 66 65 72 73 0d 0a 20 20 20 20 20 20   differs..      
c6f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
c700: 20 20 20 62 65 74 77 65 65 6e 20 66 72 61 6d 65     between frame
c710: 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 2e 0d 0a  work versions...
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c730: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c740: 20 20 20 20 6c 6f 6e 67 20 6d 61 73 6b 20 3d 20      long mask = 
c750: 75 6e 63 68 65 63 6b 65 64 28 28 6c 6f 6e 67 29  unchecked((long)
c760: 30 78 46 46 46 46 46 46 46 46 30 30 30 30 30 30  0xFFFFFFFF000000
c770: 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  00);....        
c780: 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64          while (d
c790: 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29  ataReader.Read()
c7a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c7b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c7c0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
c7d0: 64 64 28 28 64 61 74 61 52 65 61 64 65 72 2e 47  dd((dataReader.G
c7e0: 65 74 49 6e 74 36 34 28 30 29 20 26 20 6d 61 73  etInt64(0) & mas
c7f0: 6b 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  k).ToString());.
c800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c810: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 28 64     result.Add((d
c820: 61 74 61 52 65 61 64 65 72 2e 47 65 74 49 6e 74  ataReader.GetInt
c830: 36 34 28 31 29 20 26 20 6d 61 73 6b 29 2e 54 6f  64(1) & mask).To
c840: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
c850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c870: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
c890: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
c8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
c8b0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
c8c0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
c8d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c920: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c930: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c940: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
c950: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c960: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
c970: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
c980: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
c990: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
c9a0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
c9b0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
c9c0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
c9d0: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
c9e0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
c9f0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
ca00: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
ca10: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
ca20: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
ca30: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
ca40: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
ca50: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
ca60: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
ca70: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
ca80: 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 6f 6e 65   GetList one one
ca90: 20 74 77 6f 20 6f 6e 65 20 74 77 6f 20 74 77 6f   two one two two
caa0: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
cab0: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
cac0: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
cad0: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
cae0: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
caf0: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
cb00: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
cb10: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
cb20: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
cb30: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
cb40: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
cb50: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
cb60: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
cb70: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
cb80: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
cb90: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
cba0: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
cbb0: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
cbc0: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
cbd0: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
cbe0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
cbf0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
cc00: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
cc10: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
cc20: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
cc30: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
cc40: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
cc50: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
cc60: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
cc70: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 30 20 34 32 39  + \{\} 0 \{0 429
cc80: 34 39 36 37 32 39 36 20 34 32 39 34 39 36 37 32  4967296 42949672
cc90: 39 36 5c 0d 0a 38 35 38 39 39 33 34 35 39 32 20  96\..8589934592 
cca0: 38 35 38 39 39 33 34 35 39 32 20 31 32 38 38 34  8589934592 12884
ccb0: 39 30 31 38 38 38 20 31 32 38 38 34 39 30 31 38  901888 128849018
ccc0: 38 38 20 31 37 31 37 39 38 36 39 31 38 34 20 31  88 17179869184 1
ccd0: 37 31 37 39 38 36 39 31 38 34 5c 0d 0a 32 31 34  7179869184\..214
cce0: 37 34 38 33 36 34 38 30 20 32 31 34 37 34 38 33  74836480 2147483
ccf0: 36 34 38 30 20 32 35 37 36 39 38 30 33 37 37 36  6480 25769803776
cd00: 20 32 35 37 36 39 38 30 33 37 37 36 5c 7d 24 7d   25769803776\}$}
cd10: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
cd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd60: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
cd70: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 31 31   {test vtab-1.11
cd80: 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69   {IEnumerable vi
cd90: 72 74 75 61 6c 20 74 61 62 6c 65 20 77 2f 6f 62  rtual table w/ob
cda0: 6a 65 63 74 20 69 64 65 6e 74 69 74 79 7d 20 2d  ject identity} -
cdb0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
cdc0: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 31  ileName vtab-1.1
cdd0: 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  1.db..} -body {.
cde0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
cdf0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
ce00: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
ce10: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
ce20: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
ce30: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
ce40: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
ce50: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
ce60: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
ce70: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
ce80: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
ce90: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
cea0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
ceb0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
cec0: 54 20 72 6f 77 49 64 2c 20 2a 20 46 52 4f 4d 20  T rowId, * FROM 
ced0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
cee0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
cef0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
cf00: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
cf10: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
cf20: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
cf30: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
cf40: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
cf50: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
cf60: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
cf70: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
cf80: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
cf90: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
cfa0: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
cfb0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
cfc0: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
cfd0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
cfe0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
cff0: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
d000: 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69 6e  ist(params strin
d010: 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a  g\[\] strings)..
d020: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d030: 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20       StringList 
d040: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
d050: 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
d060: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
d070: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
d080: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
d090: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d0a0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
d0b0: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
d0c0: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
d0d0: 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22  tFlagsProperty]"
d0e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
d0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
d100: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
d110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
d120: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
d130: 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74  Module(new SQLit
d140: 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c  eModuleEnumerabl
d150: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d160: 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73 74    "mod${id}", st
d170: 72 69 6e 67 73 2c 20 74 72 75 65 29 29 3b 0d 0a  rings, true));..
d180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
d190: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
d1a0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
d1b0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
d1c0: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
d1d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d1e0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
d1f0: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
d200: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
d210: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d220: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
d230: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20  NonQuery();..   
d240: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d250: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
d260: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
d270: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
d280: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
d290: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
d2a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d2b0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
d2c0: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
d2d0: 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d   ${sql(2)}]";...
d2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
d2f0: 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61  sing (SQLiteData
d300: 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65  Reader dataReade
d310: 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  r = command.Exec
d320: 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20  uteReader())..  
d330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
d350: 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72  hile (dataReader
d360: 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
d370: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d390: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
d3a0: 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69  ader\[0\].ToStri
d3b0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
d3c0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
d3d0: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
d3e0: 5b 31 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [1\].ToString())
d3f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d400: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d410: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d420: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d430: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
d440: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
d450: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d460: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
d470: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
d480: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d4d0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
d4e0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
d4f0: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
d500: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
d510: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
d520: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
d530: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
d540: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
d550: 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79   errors [list Sy
d560: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
d570: 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d  .dll Eagle.dll]]
d580: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
d590: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
d5a0: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
d5b0: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
d5c0: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
d5d0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
d5e0: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
d5f0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
d600: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
d610: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
d620: 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20  st${id} GetList 
d630: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20  one two three 4 
d640: 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  5.0..      } res
d650: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
d660: 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c  lt ""]}] [normal
d670: 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72  izeVtabResult $r
d680: 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  esult]..} -clean
d690: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
d6a0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
d6b0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
d6c0: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
d6d0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
d6e0: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
d6f0: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
d700: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
d710: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
d720: 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61  onoBug28 monoCra
d730: 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71  sh211 command.sq
d740: 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41  l\..compile.DATA
d750: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
d760: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
d770: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
d780: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
d790: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
d7a0: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
d7b0: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
d7c0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
d7d0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
d7e0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
d7f0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
d800: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
d810: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 2d 3f  #\d+ \{\} 0 \{-?
d820: 5c 64 2b 20 6f 6e 65 20 2d 3f 5c 64 2b 20 74 77  \d+ one -?\d+ tw
d830: 6f 20 2d 3f 5c 64 2b 5c 0d 0a 74 68 72 65 65 20  o -?\d+\..three 
d840: 2d 3f 5c 64 2b 20 34 20 2d 3f 5c 64 2b 20 35 5c  -?\d+ 4 -?\d+ 5\
d850: 2e 30 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23  .0\}$}]}....####
d860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8a0: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
d8b0: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61  unTest {test vta
d8c0: 62 2d 31 2e 31 32 20 7b 53 51 4c 69 74 65 49 6e  b-1.12 {SQLiteIn
d8d0: 64 65 78 20 6d 61 6e 61 67 65 64 2d 74 6f 2d 6e  dex managed-to-n
d8e0: 61 74 69 76 65 2d 74 6f 2d 6d 61 6e 61 67 65 64  ative-to-managed
d8f0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
d900: 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 33 3b  t nConstraint 3;
d910: 20 73 65 74 20 6e 4f 72 64 65 72 42 79 20 33 0d   set nOrderBy 3.
d920: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
d930: 74 20 69 6e 64 65 78 28 31 29 20 5b 6f 62 6a 65  t index(1) [obje
d940: 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
d950: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
d960: 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  ic \..      Syst
d970: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
d980: 51 4c 69 74 65 49 6e 64 65 78 20 24 6e 43 6f 6e  QLiteIndex $nCon
d990: 73 74 72 61 69 6e 74 20 24 6e 4f 72 64 65 72 42  straint $nOrderB
d9a0: 79 5d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74  y]....  for {set
d9b0: 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20   iConstraint 0} 
d9c0: 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20  {$iConstraint < 
d9d0: 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69  $nConstraint} {i
d9e0: 6e 63 72 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d  ncr iConstraint}
d9f0: 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73   {..    set cons
da00: 74 72 61 69 6e 74 28 31 29 20 5b 6f 62 6a 65 63  traint(1) [objec
da10: 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20  t create -alias 
da20: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
da30: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73  c \..        Sys
da40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
da50: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
da60: 72 61 69 6e 74 20 30 20 30 20 30 20 30 5d 0d 0a  raint 0 0 0 0]..
da70: 0d 0a 20 20 20 20 24 69 6e 64 65 78 28 31 29 20  ..    $index(1) 
da80: 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
da90: 74 73 2e 53 65 74 56 61 6c 75 65 20 24 63 6f 6e  ts.SetValue $con
daa0: 73 74 72 61 69 6e 74 28 31 29 20 24 69 43 6f 6e  straint(1) $iCon
dab0: 73 74 72 61 69 6e 74 0d 0a 0d 0a 20 20 20 20 24  straint....    $
dac0: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 69 43  constraint(1) iC
dad0: 6f 6c 75 6d 6e 20 5b 65 78 70 72 20 7b 69 6e 74  olumn [expr {int
dae0: 28 30 78 30 31 32 33 34 35 36 37 20 2b 20 24 69  (0x01234567 + $i
daf0: 43 6f 6e 73 74 72 61 69 6e 74 29 7d 5d 0d 0a 20  Constraint)}].. 
db00: 20 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 28 31     $constraint(1
db10: 29 20 6f 70 20 5b 65 78 70 72 20 7b 30 78 46 46  ) op [expr {0xFF
db20: 20 2d 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 7d   - $iConstraint}
db30: 5d 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69  ]..    $constrai
db40: 6e 74 28 31 29 20 75 73 61 62 6c 65 20 5b 65 78  nt(1) usable [ex
db50: 70 72 20 7b 30 78 43 43 20 2b 20 24 69 43 6f 6e  pr {0xCC + $iCon
db60: 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20 20 20 24  straint}]..    $
db70: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 69 54  constraint(1) iT
db80: 65 72 6d 4f 66 66 73 65 74 20 5b 65 78 70 72 20  ermOffset [expr 
db90: 7b 69 6e 74 28 30 78 38 39 41 42 43 44 45 46 20  {int(0x89ABCDEF 
dba0: 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 29 7d  + $iConstraint)}
dbb0: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20  ]..  }....  for 
dbc0: 7b 73 65 74 20 69 4f 72 64 65 72 42 79 20 30 7d  {set iOrderBy 0}
dbd0: 20 7b 24 69 4f 72 64 65 72 42 79 20 3c 20 24 6e   {$iOrderBy < $n
dbe0: 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63 72 20 69  OrderBy} {incr i
dbf0: 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20 20 20 20  OrderBy} {..    
dc00: 73 65 74 20 6f 72 64 65 72 42 79 28 31 29 20 5b  set orderBy(1) [
dc10: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
dc20: 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  lias -flags +Non
dc30: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..      
dc40: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
dc50: 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78  Lite.SQLiteIndex
dc60: 4f 72 64 65 72 42 79 20 30 20 30 5d 0d 0a 0d 0a  OrderBy 0 0]....
dc70: 20 20 20 20 24 69 6e 64 65 78 28 31 29 20 49 6e      $index(1) In
dc80: 70 75 74 73 2e 4f 72 64 65 72 42 79 73 2e 53 65  puts.OrderBys.Se
dc90: 74 56 61 6c 75 65 20 24 6f 72 64 65 72 42 79 28  tValue $orderBy(
dca0: 31 29 20 24 69 4f 72 64 65 72 42 79 0d 0a 0d 0a  1) $iOrderBy....
dcb0: 20 20 20 20 24 6f 72 64 65 72 42 79 28 31 29 20      $orderBy(1) 
dcc0: 69 43 6f 6c 75 6d 6e 20 5b 65 78 70 72 20 7b 69  iColumn [expr {i
dcd0: 6e 74 28 30 78 32 33 30 31 36 37 34 35 20 2b 20  nt(0x23016745 + 
dce0: 24 69 4f 72 64 65 72 42 79 29 7d 5d 0d 0a 20 20  $iOrderBy)}]..  
dcf0: 20 20 24 6f 72 64 65 72 42 79 28 31 29 20 64 65    $orderBy(1) de
dd00: 73 63 20 5b 65 78 70 72 20 7b 30 78 46 46 20 2d  sc [expr {0xFF -
dd10: 20 24 69 4f 72 64 65 72 42 79 7d 5d 0d 0a 20 20   $iOrderBy}]..  
dd20: 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20  }....  for {set 
dd30: 69 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20 7b  iConstraint 0} {
dd40: 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 24  $iConstraint < $
dd50: 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69 6e  nConstraint} {in
dd60: 63 72 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d 20  cr iConstraint} 
dd70: 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74  {..    set const
dd80: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 5b 6f  raintUsage(1) [o
dd90: 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c  bject create -al
dda0: 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  ias -flags +NonP
ddb0: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..       
ddc0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
ddd0: 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78 43  ite.SQLiteIndexC
dde0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 30  onstraintUsage 0
ddf0: 20 30 5d 0d 0a 0d 0a 20 20 20 20 24 69 6e 64 65   0]....    $inde
de00: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43 6f 6e  x(1) Outputs.Con
de10: 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e 53 65  straintUsages.Se
de20: 74 56 61 6c 75 65 20 24 63 6f 6e 73 74 72 61 69  tValue $constrai
de30: 6e 74 55 73 61 67 65 28 31 29 20 5c 0d 0a 20 20  ntUsage(1) \..  
de40: 20 20 20 20 20 20 24 69 43 6f 6e 73 74 72 61 69        $iConstrai
de50: 6e 74 0d 0a 0d 0a 20 20 20 20 24 63 6f 6e 73 74  nt....    $const
de60: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 61 72  raintUsage(1) ar
de70: 67 76 49 6e 64 65 78 20 5b 65 78 70 72 20 7b 69  gvIndex [expr {i
de80: 6e 74 28 30 78 41 42 38 39 45 46 43 44 20 2b 20  nt(0xAB89EFCD + 
de90: 24 69 43 6f 6e 73 74 72 61 69 6e 74 29 7d 5d 0d  $iConstraint)}].
dea0: 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69 6e 74  .    $constraint
deb0: 55 73 61 67 65 28 31 29 20 6f 6d 69 74 20 5b 65  Usage(1) omit [e
dec0: 78 70 72 20 7b 30 78 43 43 20 2b 20 24 69 43 6f  xpr {0xCC + $iCo
ded0: 6e 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20 7d 0d  nstraint}]..  }.
dee0: 0a 0d 0a 20 20 24 69 6e 64 65 78 28 31 29 20 4f  ...  $index(1) O
def0: 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62  utputs.IndexNumb
df00: 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78  er [expr {int(0x
df10: 41 41 41 41 41 41 41 41 29 7d 5d 0d 0a 20 20 24  AAAAAAAA)}]..  $
df20: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
df30: 2e 49 6e 64 65 78 53 74 72 69 6e 67 20 22 5c 78  .IndexString "\x
df40: 30 31 74 65 73 74 20 69 6e 64 65 78 20 73 74 72  01test index str
df50: 69 6e 67 2e 5c 78 46 46 22 0d 0a 20 20 24 69 6e  ing.\xFF"..  $in
df60: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 4e  dex(1) Outputs.N
df70: 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74  eedToFreeIndexSt
df80: 72 69 6e 67 20 5b 65 78 70 72 20 7b 69 6e 74 28  ring [expr {int(
df90: 30 78 35 35 35 35 35 35 35 35 29 7d 5d 0d 0a 20  0x55555555)}].. 
dfa0: 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75   $index(1) Outpu
dfb0: 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d  ts.OrderByConsum
dfc0: 65 64 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78  ed [expr {int(0x
dfd0: 33 33 33 33 33 33 33 33 29 7d 5d 0d 0a 20 20 24  33333333)}]..  $
dfe0: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
dff0: 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74 20 31  .EstimatedCost 1
e000: 2e 30 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e  .0....  if {[$in
e010: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43  dex(1) Outputs.C
e020: 61 6e 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f  anUseEstimatedRo
e030: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..   
e040: 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75   $index(1) Outpu
e050: 74 73 2e 45 73 74 69 6d 61 74 65 64 52 6f 77 73  ts.EstimatedRows
e060: 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 43 43   [expr {int(0xCC
e070: 43 43 43 43 43 43 29 7d 5d 0d 0a 20 20 7d 0d 0a  CCCCCC)}]..  }..
e080: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
e090: 31 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73  1) Outputs.CanUs
e0a0: 65 49 6e 64 65 78 46 6c 61 67 73 5d 7d 20 74 68  eIndexFlags]} th
e0b0: 65 6e 20 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78  en {..    $index
e0c0: 28 31 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65  (1) Outputs.Inde
e0d0: 78 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 69 6e  xFlags [expr {in
e0e0: 74 28 30 78 45 45 45 45 45 45 45 45 29 7d 5d 0d  t(0xEEEEEEEE)}].
e0f0: 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24  .  }....  if {[$
e100: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
e110: 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73  .CanUseColumnsUs
e120: 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ed]} then {..   
e130: 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75   $index(1) Outpu
e140: 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65 64 20 5b  ts.ColumnsUsed [
e150: 65 78 70 72 20 7b 77 69 64 65 28 30 78 42 41 44  expr {wide(0xBAD
e160: 43 30 46 46 45 45 38 37 35 36 32 31 41 29 7d 5d  C0FFEE875621A)}]
e170: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 70  ..  }....  set p
e180: 49 6e 64 65 78 28 31 29 20 5b 6f 62 6a 65 63 74  Index(1) [object
e190: 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20   invoke -create 
e1a0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
e1b0: 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  c \..      Syste
e1c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
e1d0: 4c 69 74 65 49 6e 64 65 78 20 41 6c 6c 6f 63 61  LiteIndex Alloca
e1e0: 74 65 41 6e 64 49 6e 69 74 69 61 6c 69 7a 65 4e  teAndInitializeN
e1f0: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 24  ative \..      $
e200: 6e 43 6f 6e 73 74 72 61 69 6e 74 20 24 6e 4f 72  nConstraint $nOr
e210: 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 6f 62 6a 65  derBy]....  obje
e220: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
e230: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \.. 
e240: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
e250: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e  .SQLite.SQLiteIn
e260: 64 65 78 20 54 6f 49 6e 74 50 74 72 20 24 69 6e  dex ToIntPtr $in
e270: 64 65 78 28 31 29 20 24 70 49 6e 64 65 78 28 31  dex(1) $pIndex(1
e280: 29 20 74 72 75 65 0d 0a 0d 0a 20 20 73 65 74 20  ) true....  set 
e290: 69 6e 64 65 78 28 32 29 20 5b 6f 62 6a 65 63 74  index(2) [object
e2a0: 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d   create -alias -
e2b0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
e2c0: 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
e2d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
e2e0: 69 74 65 49 6e 64 65 78 20 24 6e 43 6f 6e 73 74  iteIndex $nConst
e2f0: 72 61 69 6e 74 20 24 6e 4f 72 64 65 72 42 79 5d  raint $nOrderBy]
e300: 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76  ....  object inv
e310: 6f 6b 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67  oke -alias -flag
e320: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
e330: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
e340: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49  a.SQLite.SQLiteI
e350: 6e 64 65 78 20 46 72 6f 6d 49 6e 74 50 74 72 20  ndex FromIntPtr 
e360: 24 70 49 6e 64 65 78 28 31 29 20 74 72 75 65 20  $pIndex(1) true 
e370: 69 6e 64 65 78 28 32 29 0d 0a 0d 0a 20 20 66 6f  index(2)....  fo
e380: 72 20 7b 73 65 74 20 69 43 6f 6e 73 74 72 61 69  r {set iConstrai
e390: 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61  nt 0} {$iConstra
e3a0: 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69  int < $nConstrai
e3b0: 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74  nt} {incr iConst
e3c0: 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65  raint} {..    se
e3d0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20  t constraint(1) 
e3e0: 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20  [$index(1) \..  
e3f0: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70        -alias Inp
e400: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
e410: 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74  GetValue $iConst
e420: 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 73 65  raint]....    se
e430: 74 20 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20  t constraint(2) 
e440: 5b 24 69 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20  [$index(2) \..  
e450: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70        -alias Inp
e460: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
e470: 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74  GetValue $iConst
e480: 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 69 66  raint]....    if
e490: 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 31   {[$constraint(1
e4a0: 29 20 69 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24  ) iColumn] != [$
e4b0: 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 69 43  constraint(2) iC
e4c0: 6f 6c 75 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a  olumn]} then {..
e4d0: 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70        error [app
e4e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
e4f0: 20 20 20 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74       "iColumn at
e500: 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74   index " $iConst
e510: 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74  raint " does not
e520: 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d   match"]..    }.
e530: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e  ...    if {[$con
e540: 73 74 72 61 69 6e 74 28 31 29 20 6f 70 5d 20 21  straint(1) op] !
e550: 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 32  = [$constraint(2
e560: 29 20 6f 70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ) op]} then {.. 
e570: 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
e580: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
e590: 20 20 20 20 22 6f 70 20 61 74 20 69 6e 64 65 78      "op at index
e5a0: 20 22 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20   " $iConstraint 
e5b0: 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  " does not match
e5c0: 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  "]..    }....   
e5d0: 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e   if {[$constrain
e5e0: 74 28 31 29 20 75 73 61 62 6c 65 5d 20 21 3d 20  t(1) usable] != 
e5f0: 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20  [$constraint(2) 
e600: 75 73 61 62 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  usable]} then {.
e610: 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70  .      error [ap
e620: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
e630: 20 20 20 20 20 20 22 75 73 61 62 6c 65 20 61 74        "usable at
e640: 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74   index " $iConst
e650: 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74  raint " does not
e660: 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d   match"]..    }.
e670: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e  ...    if {[$con
e680: 73 74 72 61 69 6e 74 28 31 29 20 69 54 65 72 6d  straint(1) iTerm
e690: 4f 66 66 73 65 74 5d 20 21 3d 20 5b 24 63 6f 6e  Offset] != [$con
e6a0: 73 74 72 61 69 6e 74 28 32 29 20 69 54 65 72 6d  straint(2) iTerm
e6b0: 4f 66 66 73 65 74 5d 7d 20 74 68 65 6e 20 7b 0d  Offset]} then {.
e6c0: 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70  .      error [ap
e6d0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
e6e0: 20 20 20 20 20 20 22 69 54 65 72 6d 4f 66 66 73        "iTermOffs
e6f0: 65 74 20 61 74 20 69 6e 64 65 78 20 22 20 24 69  et at index " $i
e700: 43 6f 6e 73 74 72 61 69 6e 74 20 22 20 64 6f 65  Constraint " doe
e710: 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20  s not match"].. 
e720: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66     }..  }....  f
e730: 6f 72 20 7b 73 65 74 20 69 4f 72 64 65 72 42 79  or {set iOrderBy
e740: 20 30 7d 20 7b 24 69 4f 72 64 65 72 42 79 20 3c   0} {$iOrderBy <
e750: 20 24 6e 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63   $nOrderBy} {inc
e760: 72 20 69 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20  r iOrderBy} {.. 
e770: 20 20 20 73 65 74 20 6f 72 64 65 72 42 79 28 31     set orderBy(1
e780: 29 20 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a  ) [$index(1) \..
e790: 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49          -alias I
e7a0: 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 2e 47  nputs.OrderBys.G
e7b0: 65 74 56 61 6c 75 65 20 24 69 4f 72 64 65 72 42  etValue $iOrderB
e7c0: 79 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 6f 72  y]....    set or
e7d0: 64 65 72 42 79 28 32 29 20 5b 24 69 6e 64 65 78  derBy(2) [$index
e7e0: 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d  (2) \..        -
e7f0: 61 6c 69 61 73 20 49 6e 70 75 74 73 2e 4f 72 64  alias Inputs.Ord
e800: 65 72 42 79 73 2e 47 65 74 56 61 6c 75 65 20 24  erBys.GetValue $
e810: 69 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 20  iOrderBy]....   
e820: 20 69 66 20 7b 5b 24 6f 72 64 65 72 42 79 28 31   if {[$orderBy(1
e830: 29 20 69 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24  ) iColumn] != [$
e840: 6f 72 64 65 72 42 79 28 32 29 20 69 43 6f 6c 75  orderBy(2) iColu
e850: 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  mn]} then {..   
e860: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
e870: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
e880: 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74 20 69 6e    "iColumn at in
e890: 64 65 78 20 22 20 24 69 4f 72 64 65 72 42 79 20  dex " $iOrderBy 
e8a0: 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  " does not match
e8b0: 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  "]..    }....   
e8c0: 20 69 66 20 7b 5b 24 6f 72 64 65 72 42 79 28 31   if {[$orderBy(1
e8d0: 29 20 64 65 73 63 5d 20 21 3d 20 5b 24 6f 72 64  ) desc] != [$ord
e8e0: 65 72 42 79 28 32 29 20 64 65 73 63 5d 7d 20 74  erBy(2) desc]} t
e8f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72  hen {..      err
e900: 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  or [appendArgs \
e910: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 64 65 73  ..          "des
e920: 63 20 61 74 20 69 6e 64 65 78 20 22 20 24 69 4f  c at index " $iO
e930: 72 64 65 72 42 79 20 22 20 64 6f 65 73 20 6e 6f  rderBy " does no
e940: 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d  t match"]..    }
e950: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b  ..  }....  for {
e960: 73 65 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20  set iConstraint 
e970: 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74  0} {$iConstraint
e980: 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d   < $nConstraint}
e990: 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74 72 61 69   {incr iConstrai
e9a0: 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 63  nt} {..    set c
e9b0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31  onstraintUsage(1
e9c0: 29 20 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a  ) [$index(1) \..
e9d0: 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 4f          -alias O
e9e0: 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  utputs.Constrain
e9f0: 74 55 73 61 67 65 73 2e 47 65 74 56 61 6c 75 65  tUsages.GetValue
ea00: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a   $iConstraint]..
ea10: 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72  ..    set constr
ea20: 61 69 6e 74 55 73 61 67 65 28 32 29 20 5b 24 69  aintUsage(2) [$i
ea30: 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20 20 20 20  ndex(2) \..     
ea40: 20 20 20 2d 61 6c 69 61 73 20 4f 75 74 70 75 74     -alias Output
ea50: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s.ConstraintUsag
ea60: 65 73 2e 47 65 74 56 61 6c 75 65 20 24 69 43 6f  es.GetValue $iCo
ea70: 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20  nstraint]....   
ea80: 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e   if {[$constrain
ea90: 74 55 73 61 67 65 28 31 29 20 61 72 67 76 49 6e  tUsage(1) argvIn
eaa0: 64 65 78 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20  dex] != \..     
eab0: 20 20 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55     [$constraintU
eac0: 73 61 67 65 28 32 29 20 61 72 67 76 49 6e 64 65  sage(2) argvInde
ead0: 78 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  x]} then {..    
eae0: 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
eaf0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
eb00: 20 22 61 72 67 76 49 6e 64 65 78 20 61 74 20 69   "argvIndex at i
eb10: 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61  ndex " $iConstra
eb20: 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d  int " does not m
eb30: 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d  atch"]..    }...
eb40: 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74  .    if {[$const
eb50: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 6f 6d  raintUsage(1) om
eb60: 69 74 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72 61  it] != [$constra
eb70: 69 6e 74 55 73 61 67 65 28 32 29 20 6f 6d 69 74  intUsage(2) omit
eb80: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
eb90: 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
eba0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
ebb0: 22 6f 6d 69 74 20 61 74 20 69 6e 64 65 78 20 22  "omit at index "
ebc0: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20   $iConstraint " 
ebd0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
ebe0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
ebf0: 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29    if {[$index(1)
ec00: 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75   Outputs.IndexNu
ec10: 6d 62 65 72 5d 20 21 3d 20 5c 0d 0a 20 20 20 20  mber] != \..    
ec20: 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74    [$index(2) Out
ec30: 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72  puts.IndexNumber
ec40: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65  ]} then {..    e
ec50: 72 72 6f 72 20 22 49 6e 64 65 78 4e 75 6d 62 65  rror "IndexNumbe
ec60: 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  r does not match
ec70: 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  "..  }....  if {
ec80: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
ec90: 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 5d 20  ts.IndexString] 
eca0: 6e 65 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e  ne \..      [$in
ecb0: 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 49  dex(2) Outputs.I
ecc0: 6e 64 65 78 53 74 72 69 6e 67 5d 7d 20 74 68 65  ndexString]} the
ecd0: 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22  n {..    error "
ece0: 49 6e 64 65 78 53 74 72 69 6e 67 20 64 6f 65 73  IndexString does
ecf0: 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d   not match"..  }
ed00: 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65  ....  if {[$inde
ed10: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 4e 65 65  x(1) Outputs.Nee
ed20: 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69  dToFreeIndexStri
ed30: 6e 67 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20  ng] != \..      
ed40: 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75  [$index(2) Outpu
ed50: 74 73 2e 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  ts.NeedToFreeInd
ed60: 65 78 53 74 72 69 6e 67 5d 7d 20 74 68 65 6e 20  exString]} then 
ed70: 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 4e 65  {..    error "Ne
ed80: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
ed90: 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ing does not mat
eda0: 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66  ch"..  }....  if
edb0: 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74   {[$index(1) Out
edc0: 70 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73  puts.OrderByCons
edd0: 75 6d 65 64 5d 20 21 3d 20 5c 0d 0a 20 20 20 20  umed] != \..    
ede0: 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74    [$index(2) Out
edf0: 70 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73  puts.OrderByCons
ee00: 75 6d 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  umed]} then {.. 
ee10: 20 20 20 65 72 72 6f 72 20 22 4f 72 64 65 72 42     error "OrderB
ee20: 79 43 6f 6e 73 75 6d 65 64 20 64 6f 65 73 20 6e  yConsumed does n
ee30: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a  ot match"..  }..
ee40: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
ee50: 31 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d  1) Outputs.Estim
ee60: 61 74 65 64 43 6f 73 74 5d 20 21 3d 20 5c 0d 0a  atedCost] != \..
ee70: 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29        [$index(2)
ee80: 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74   Outputs.Estimat
ee90: 65 64 43 6f 73 74 5d 7d 20 74 68 65 6e 20 7b 0d  edCost]} then {.
eea0: 0a 20 20 20 20 65 72 72 6f 72 20 22 45 73 74 69  .    error "Esti
eeb0: 6d 61 74 65 64 43 6f 73 74 20 64 6f 65 73 20 6e  matedCost does n
eec0: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a  ot match"..  }..
eed0: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
eee0: 31 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73  1) Outputs.CanUs
eef0: 65 45 73 74 69 6d 61 74 65 64 52 6f 77 73 5d 20  eEstimatedRows] 
ef00: 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e  && \..      [$in
ef10: 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 43  dex(2) Outputs.C
ef20: 61 6e 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f  anUseEstimatedRo
ef30: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..   
ef40: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
ef50: 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
ef60: 64 52 6f 77 73 5d 20 21 3d 20 5c 0d 0a 20 20 20  dRows] != \..   
ef70: 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20       [$index(2) 
ef80: 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
ef90: 64 52 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  dRows]} then {..
efa0: 20 20 20 20 20 20 65 72 72 6f 72 20 22 45 73 74        error "Est
efb0: 69 6d 61 74 65 64 52 6f 77 73 20 64 6f 65 73 20  imatedRows does 
efc0: 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 20 20  not match"..    
efd0: 7d 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24  }....    tputs $
efe0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d  test_channel "--
eff0: 2d 2d 20 63 68 65 63 6b 65 64 20 45 73 74 69 6d  -- checked Estim
f000: 61 74 65 64 52 6f 77 73 20 70 72 6f 70 65 72 74  atedRows propert
f010: 79 5c 6e 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69  y\n"..  }....  i
f020: 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75  f {[$index(1) Ou
f030: 74 70 75 74 73 2e 43 61 6e 55 73 65 49 6e 64 65  tputs.CanUseInde
f040: 78 46 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20  xFlags] && \..  
f050: 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f      [$index(2) O
f060: 75 74 70 75 74 73 2e 43 61 6e 55 73 65 49 6e 64  utputs.CanUseInd
f070: 65 78 46 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b  exFlags]} then {
f080: 0d 0a 20 20 20 20 69 66 20 7b 5b 24 69 6e 64 65  ..    if {[$inde
f090: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 49 6e 64  x(1) Outputs.Ind
f0a0: 65 78 46 6c 61 67 73 5d 20 21 3d 20 5c 0d 0a 20  exFlags] != \.. 
f0b0: 20 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32         [$index(2
f0c0: 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 46  ) Outputs.IndexF
f0d0: 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lags]} then {.. 
f0e0: 20 20 20 20 20 65 72 72 6f 72 20 22 49 6e 64 65       error "Inde
f0f0: 78 46 6c 61 67 73 20 64 6f 65 73 20 6e 6f 74 20  xFlags does not 
f100: 6d 61 74 63 68 22 0d 0a 20 20 20 20 7d 0d 0a 0d  match"..    }...
f110: 0a 20 20 20 20 74 70 75 74 73 20 24 74 65 73 74  .    tputs $test
f120: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  _channel "---- c
f130: 68 65 63 6b 65 64 20 49 6e 64 65 78 46 6c 61 67  hecked IndexFlag
f140: 73 20 70 72 6f 70 65 72 74 79 5c 6e 22 0d 0a 20  s property\n".. 
f150: 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e   }....  if {[$in
f160: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43  dex(1) Outputs.C
f170: 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73 65 64  anUseColumnsUsed
f180: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ] && \..      [$
f190: 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73  index(2) Outputs
f1a0: 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73  .CanUseColumnsUs
f1b0: 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ed]} then {..   
f1c0: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
f1d0: 4f 75 74 70 75 74 73 2e 43 6f 6c 75 6d 6e 73 55  Outputs.ColumnsU
f1e0: 73 65 64 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20  sed] != \..     
f1f0: 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75     [$index(2) Ou
f200: 74 70 75 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65  tputs.ColumnsUse
f210: 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..    
f220: 20 20 65 72 72 6f 72 20 22 43 6f 6c 75 6d 6e 73    error "Columns
f230: 55 73 65 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  Used does not ma
f240: 74 63 68 22 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tch"..    }.... 
f250: 20 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63     tputs $test_c
f260: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65  hannel "---- che
f270: 63 6b 65 64 20 43 6f 6c 75 6d 6e 73 55 73 65 64  cked ColumnsUsed
f280: 20 70 72 6f 70 65 72 74 79 5c 6e 22 0d 0a 20 20   property\n"..  
f290: 7d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  }..} -cleanup {.
f2a0: 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  .  catch {..    
f2b0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
f2c0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
f2d0: 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65  \..        Syste
f2e0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
f2f0: 4c 69 74 65 49 6e 64 65 78 20 46 72 65 65 4e 61  LiteIndex FreeNa
f300: 74 69 76 65 20 24 70 49 6e 64 65 78 28 31 29 0d  tive $pIndex(1).
f310: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
f320: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 73  -nocomplain cons
f330: 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 75  traintUsage..  u
f340: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
f350: 20 6f 72 64 65 72 42 79 20 6e 4f 72 64 65 72 42   orderBy nOrderB
f360: 79 20 69 4f 72 64 65 72 42 79 0d 0a 20 20 75 6e  y iOrderBy..  un
f370: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
f380: 63 6f 6e 73 74 72 61 69 6e 74 20 6e 43 6f 6e 73  constraint nCons
f390: 74 72 61 69 6e 74 20 69 43 6f 6e 73 74 72 61 69  traint iConstrai
f3a0: 6e 74 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  nt..  unset -noc
f3b0: 6f 6d 70 6c 61 69 6e 20 70 49 6e 64 65 78 20 69  omplain pIndex i
f3c0: 6e 64 65 78 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  ndex..} -constra
f3d0: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
f3e0: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
f3f0: 75 67 32 31 31 20 53 51 4c 69 74 65 20 53 79 73  ug211 SQLite Sys
f400: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
f410: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
f420: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
f430: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
f440: 55 41 4c 5f 54 41 42 4c 45 7d 20 2d 72 65 73 75  UAL_TABLE} -resu
f450: 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23  lt {}}....######
f460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4a0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 65 6e  #########....ren
f4b0: 61 6d 65 20 6e 6f 72 6d 61 6c 69 7a 65 56 74 61  ame normalizeVta
f4c0: 62 52 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 23 23  bResult ""....##
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f510: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
f520: 0a 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70  .runSQLiteTestEp
f530: 69 6c 6f 67 75 65 0d 0a 72 75 6e 54 65 73 74 45  ilogue..runTestE
f540: 70 69 6c 6f 67 75 65 0d 0a                       pilogue..