System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 03ebcc969b2baa91b7aec162afba18c80e86ee6d:


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 54 65 73 74 50 72  urce};[getTestPr
09c0: 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20  operties]"))..  
09d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
09e0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
09f0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20  n.Open();..     
0a00: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
0a10: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
0a20: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ew SQLiteModuleT
0a30: 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69  est${id}("mod${i
0a40: 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  d}"));....      
0a50: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
0a60: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
0a70: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
0a80: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
0a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
0aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
0ab0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
0ac0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
0ad0: 71 6c 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  ql}]";..        
0ae0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78        command.Ex
0af0: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
0b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
0b10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
0b20: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
0b30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
0b40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
0b50: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d    }..    }..  }]
0b60: 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20   true true true 
0b70: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53  results errors S
0b80: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
0b90: 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74  e.dll]....  list
0ba0: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
0bb0: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
0bc0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
0bd0: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
0be0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
0bf0: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
0c00: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
0c10: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
0c20: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
0c30: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61  id}.Test${id} Ma
0c40: 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  in..      } resu
0c50: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
0c60: 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69  t ""]}] [normali
0c70: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65  zeVtabResult $re
0c80: 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  sult]..} -cleanu
0c90: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
0ca0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
0cb0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
0cc0: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
0cd0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
0ce0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
0cf0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
0d00: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
0d10: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
0d20: 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73  noBug28 monoCras
0d30: 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  h211 command.sql
0d40: 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  \..compile.DATA 
0d50: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
0d60: 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65  ta.SQLite SQLite
0d70: 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65  Interop\..define
0d80: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0d90: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
0da0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
0db0: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
0dc0: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
0dd0: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
0de0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
0df0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
0e00: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
0e10: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
0e20: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 24 7d 5d  + \{\} 0 \{\}$}]
0e30: 7d 0d 0a 0d 0a 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 23 23 23 23 23 23 23 23 23 23 23  ################
0e80: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
0e90: 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 32 2e 31  {test vtab-1.2.1
0ea0: 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69   {IEnumerable vi
0eb0: 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73 65  rtual table} -se
0ec0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
0ed0: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 32 2e 31  eName vtab-1.2.1
0ee0: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
0ef0: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
0f00: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
0f10: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
0f20: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
0f30: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
0f40: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
0f50: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
0f60: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
0f70: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
0f80: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
0f90: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
0fa0: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
0fb0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
0fc0: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
0fd0: 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20   * FROM t${id}; 
0fe0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
0ff0: 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(3) { \..    
1000: 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53 45  UPDATE t${id} SE
1010: 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d 0d  T x = 1; \..  }.
1020: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
1030: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
1040: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
1050: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
1060: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
1070: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
1080: 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
1090: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
10a0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67  ;..    using Eag
10b0: 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50  le._Containers.P
10c0: 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61  ublic;....    na
10d0: 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63  mespace _Dynamic
10e0: 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20  ${id}..    {..  
10f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1100: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
1110: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
1120: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1130: 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74  c StringList Get
1140: 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69  List(params stri
1150: 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d  ng\[\] strings).
1160: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1170: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
1180: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
1190: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
11a0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
11b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
11c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
11d0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
11e0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
11f0: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
1200: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
1210: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
1220: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
1230: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
1240: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
1250: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
1270: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
1280: 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61  iteModuleEnumera
1290: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
12a0: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
12b0: 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20  strings));....  
12c0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
12d0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
12e0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
12f0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
1300: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
1310: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1320: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
1330: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
1340: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
1360: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
1370: 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  uery();..       
1380: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1390: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
13a0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
13b0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
13c0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
13d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
13f0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
1400: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
1410: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(2)}]";....   
1420: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
1430: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
1440: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
1450: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
1460: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
1470: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1480: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
1490: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
14a0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
14b0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
14c0: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
14d0: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
14e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
14f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1500: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
1510: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
1520: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
1530: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
1540: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
1550: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1560: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
1570: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
1580: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
1590: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
15a0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15c0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
15d0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
15e0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
15f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1600: 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69       catch (SQLi
1610: 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a  teException e)..
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1640: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65   result.Add(e.Re
1650: 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e  sultCode.ToStrin
1660: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1670: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
1680: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
16c0: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
16d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
16e0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
16f0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
1700: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1760: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1770: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
1780: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1790: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
17a0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
17b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
17c0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
17d0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
17e0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
17f0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
1800: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
1810: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
1820: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
1830: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
1840: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
1850: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
1860: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
1870: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
1880: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
1890: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
18a0: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
18b0: 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f   GetList one two
18c0: 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20 20   three 4 5.0..  
18d0: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
18e0: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
18f0: 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  ] [normalizeVtab
1900: 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d  Result $result].
1910: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
1920: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1930: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
1940: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
1950: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
1960: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
1970: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
1980: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
1990: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
19a0: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
19b0: 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63  8 monoCrash211 c
19c0: 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d  ommand.sql\..com
19d0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
19e0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
19f0: 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72 6f  ite SQLiteIntero
1a00: 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61  p\..defineConsta
1a10: 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
1a20: 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49  QLite.INTEROP_VI
1a30: 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70  RTUAL_TABLE comp
1a40: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
1a50: 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73  h \..regexp -res
1a60: 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ult [normalizeVt
1a70: 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a  abResult {^Ok\..
1a80: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
1a90: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
1aa0: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
1ab0: 20 30 20 5c 7b 6f 6e 65 20 74 77 6f 20 74 68 72   0 \{one two thr
1ac0: 65 65 20 34 20 35 5c 2e 30 20 45 72 72 6f 72 5c  ee 4 5\.0 Error\
1ad0: 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  ..\{SQL logic er
1ae0: 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20  ror( or missing 
1af0: 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 76 69  database)? -- vi
1b00: 72 74 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64  rtual table "t\d
1b10: 2b 22 20 69 73 5c 0d 0a 72 65 61 64 2d 6f 6e 6c  +" is\..read-onl
1b20: 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23  y\}\}$}]}....###
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 23 23  ################
1b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b70: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
1b80: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74  runTest {test vt
1b90: 61 62 2d 31 2e 32 2e 32 20 7b 49 45 6e 75 6d 65  ab-1.2.2 {IEnume
1ba0: 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74 61  rable virtual ta
1bb0: 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ble} -setup {.. 
1bc0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
1bd0: 61 62 2d 31 2e 32 2e 32 2e 64 62 0d 0a 7d 20 2d  ab-1.2.2.db..} -
1be0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
1bf0: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
1c00: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
1c10: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
1c20: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
1c30: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
1c40: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
1c50: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
1c60: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
1c70: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ..    CREATE VIR
1c80: 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64  TUAL TABLE t${id
1c90: 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d  } USING mod${id}
1ca0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
1cb0: 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20  t sql(2) { \..  
1cc0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1cd0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
1ce0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
1cf0: 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74   \..    UPDATE t
1d00: 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b  ${id} SET x = 1;
1d10: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
1d20: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
1d30: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
1d40: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
1d50: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
1d60: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
1d70: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
1d80: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
1d90: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
1da0: 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74  sing Eagle._Cont
1db0: 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a  ainers.Public;..
1dc0: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
1dd0: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
1de0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
1df0: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
1e00: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
1e10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
1e20: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
1e30: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
1e40: 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73  ams string\[\] s
1e50: 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20  trings)..       
1e60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
1e70: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
1e80: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
1e90: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1ea0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
1eb0: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
1ec0: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
1ed0: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
1ee0: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
1ef0: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
1f00: 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72  urce};[getTestPr
1f10: 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20  operties]"))..  
1f20: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f30: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
1f40: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
1f50: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
1f60: 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 6e  odule module = n
1f70: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
1f80: 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20  numerable(..    
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
1fa0: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
1fb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
1fd0: 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29  teModule(module)
1fe0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ff0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
2000: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
2010: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
2020: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
2030: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2040: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
2050: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
2060: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
2070: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
2080: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
2090: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
20c0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
20d0: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
20e0: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
20f0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
2100: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2110: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
2120: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
2130: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
2140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2150: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44    using (SQLiteD
2160: 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65  ataReader dataRe
2170: 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45  ader = command.E
2180: 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d  xecuteReader()).
2190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
21a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21b0: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
21c0: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21e0: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
21f0: 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69  ader\[0\].ToStri
2200: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
2210: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2220: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2230: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2240: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
2250: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
2260: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2290: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
22a0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
22b0: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(3)}]";....   
22c0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22f0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
2300: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20  NonQuery();..   
2310: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2320: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2330: 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74 69  h (SQLiteExcepti
2340: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
2350: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2360: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
2370: 64 64 28 65 2e 52 65 73 75 6c 74 43 6f 64 65 2e  dd(e.ResultCode.
2380: 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23a0: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
23b0: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
23c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23e0: 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f      module.Dispo
23f0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
2400: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
2410: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
2420: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2430: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
2440: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2450: 20 20 20 20 20 20 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 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24a0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
24b0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
24c0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
24d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
24e0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
24f0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
2500: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
2510: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
2520: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
2530: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2540: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
2550: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
2560: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
2570: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
2580: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
2590: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
25a0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
25b0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
25c0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
25d0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
25e0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
25f0: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f  t${id} GetList o
2600: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35  ne two three 4 5
2610: 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  .0..      } resu
2620: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
2630: 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69  t ""]}] [normali
2640: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65  zeVtabResult $re
2650: 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  sult]..} -cleanu
2660: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
2670: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
2680: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
2690: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
26a0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
26b0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
26c0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
26d0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
26e0: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
26f0: 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73  noBug28 monoCras
2700: 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  h211 command.sql
2710: 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  \..compile.DATA 
2720: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
2730: 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65  ta.SQLite SQLite
2740: 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65  Interop\..define
2750: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
2760: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
2770: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
2780: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
2790: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
27a0: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
27b0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
27c0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
27d0: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
27e0: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
27f0: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74  + \{\} 0 \{one t
2800: 77 6f 20 74 68 72 65 65 20 34 20 35 5c 2e 30 20  wo three 4 5\.0 
2810: 45 72 72 6f 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f  Error\..\{SQL lo
2820: 67 69 63 20 65 72 72 6f 72 28 20 6f 72 20 6d 69  gic error( or mi
2830: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f  ssing database)?
2840: 20 2d 2d 20 76 69 72 74 75 61 6c 20 74 61 62 6c   -- virtual tabl
2850: 65 20 22 74 5c 64 2b 22 20 69 73 5c 0d 0a 72 65  e "t\d+" is\..re
2860: 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d  ad-only\}\}$}]}.
2870: 0a 0d 0a 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 23 23 23 23 23 23 23 23 23 23 23  ################
28a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28c0: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
28d0: 65 73 74 20 76 74 61 62 2d 31 2e 33 2e 31 20 7b  est vtab-1.3.1 {
28e0: 49 45 6e 75 6d 65 72 61 62 6c 65 3c 54 3e 20 76  IEnumerable<T> v
28f0: 69 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73  irtual table} -s
2900: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
2910: 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 33 2e  leName vtab-1.3.
2920: 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  1.db..} -body {.
2930: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
2940: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
2950: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
2960: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
2970: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
2980: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
2990: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
29a0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
29b0: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
29c0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
29d0: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
29e0: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
29f0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
2a00: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
2a10: 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  T * FROM t${id};
2a20: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
2a30: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
2a40: 20 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53   UPDATE t${id} S
2a50: 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d  ET x = 1; \..  }
2a60: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
2a70: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
2a80: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
2a90: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
2aa0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
2ab0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
2ac0: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
2ad0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2ae0: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  e;..    using Sy
2af0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2b00: 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 20 20 75  .Generic;..    u
2b10: 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74  sing Eagle._Cont
2b20: 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a  ainers.Public;..
2b30: 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
2b40: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20  _Dynamic${id}.. 
2b50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c     {..      publ
2b60: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
2b70: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
2b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
2b90: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
2ba0: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
2bb0: 61 6d 73 20 69 6e 74 5c 5b 5c 5d 20 69 6e 74 65  ams int\[\] inte
2bc0: 67 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  gers)..        {
2bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69  ..          Stri
2be0: 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20  ngList result = 
2bf0: 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
2c00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75  ;....          u
2c10: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
2c20: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
2c30: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
2c40: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
2c50: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
2c60: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
2c70: 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70  ce};[getTestProp
2c80: 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20 20 20  erties]"))..    
2c90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ca0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
2cb0: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
2cc0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
2cd0: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
2ce0: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
2cf0: 6e 75 6d 65 72 61 62 6c 65 3c 69 6e 74 3e 28 0d  numerable<int>(.
2d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
2d10: 6d 6f 64 24 7b 69 64 7d 22 2c 20 69 6e 74 65 67  mod${id}", integ
2d20: 65 72 73 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ers));....      
2d30: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2d40: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
2d50: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
2d60: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
2d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2d90: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
2da0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
2db0: 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(1)}]";..     
2dc0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
2dd0: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
2de0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2df0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2e00: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
2e10: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
2e20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
2e30: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
2e40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e50: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
2e60: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
2e70: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32   "[subst ${sql(2
2e80: 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  )}]";....       
2e90: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
2ea0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64  LiteDataReader d
2eb0: 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d  ataReader = comm
2ec0: 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65  and.ExecuteReade
2ed0: 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r())..          
2ee0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ef0: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 61         while (da
2f00: 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29 29  taReader.Read())
2f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f20: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64      result.Add(d
2f30: 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54  ataReader\[0\].T
2f40: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
2f50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2f60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f70: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2f80: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
2f90: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
2fa0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
2fb0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
2fc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2fd0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
2fe0: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
2ff0: 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a  t ${sql(3)}]";..
3000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3010: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
3020: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3030: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78        command.Ex
3040: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
3050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3060: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
3070: 20 63 61 74 63 68 20 28 53 51 4c 69 74 65 45 78   catch (SQLiteEx
3080: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
3090: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
30b0: 75 6c 74 2e 41 64 64 28 65 2e 52 65 73 75 6c 74  ult.Add(e.Result
30c0: 43 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28 29 29  Code.ToString())
30d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30e0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
30f0: 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20  Message);..     
3100: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3110: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3120: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
3130: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
3140: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3150: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
3160: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
3170: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
31d0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
31e0: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
31f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
3200: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
3210: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3220: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
3230: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
3240: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
3250: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
3260: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
3270: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
3280: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
3290: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
32a0: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
32b0: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
32c0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
32d0: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
32e0: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
32f0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
3300: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
3310: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
3320: 4c 69 73 74 20 31 20 32 20 33 20 34 20 35 0d 0a  List 1 2 3 4 5..
3330: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
3340: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
3350: 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ]}] [normalizeVt
3360: 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74  abResult $result
3370: 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
3380: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
3390: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
33a0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
33b0: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
33c0: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
33d0: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
33e0: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
33f0: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
3400: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
3410: 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31  g28 monoCrash211
3420: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63   command.sql\..c
3430: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
3440: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
3450: 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65  QLite SQLiteInte
3460: 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  rop\..defineCons
3470: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
3480: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
3490: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f  VIRTUAL_TABLE co
34a0: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
34b0: 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72  tch \..regexp -r
34c0: 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65  esult [normalize
34d0: 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c  VtabResult {^Ok\
34e0: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
34f0: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
3500: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
3510: 5c 7d 20 30 20 5c 7b 31 20 32 20 33 20 34 20 35  \} 0 \{1 2 3 4 5
3520: 20 45 72 72 6f 72 20 5c 7b 53 51 4c 5c 0d 0a 6c   Error \{SQL\..l
3530: 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72 20 6d  ogic error( or m
3540: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 29  issing database)
3550: 3f 20 2d 2d 20 76 69 72 74 75 61 6c 20 74 61 62  ? -- virtual tab
3560: 6c 65 20 22 74 5c 64 2b 22 20 69 73 20 72 65 61  le "t\d+" is rea
3570: 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a  d-only\}\}$}]}..
3580: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
3590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35d0: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
35e0: 73 74 20 76 74 61 62 2d 31 2e 33 2e 32 20 7b 49  st vtab-1.3.2 {I
35f0: 45 6e 75 6d 65 72 61 62 6c 65 3c 54 3e 20 76 69  Enumerable<T> vi
3600: 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73 65  rtual table} -se
3610: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
3620: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 33 2e 32  eName vtab-1.3.2
3630: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
3640: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
3650: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
3660: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
3670: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
3680: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
3690: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
36a0: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
36b0: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
36c0: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
36d0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
36e0: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
36f0: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
3700: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
3710: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
3720: 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20   * FROM t${id}; 
3730: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
3740: 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(3) { \..    
3750: 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53 45  UPDATE t${id} SE
3760: 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d 0d  T x = 1; \..  }.
3770: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
3780: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65  mplain results e
3790: 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63  rrors....  set c
37a0: 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61  ode [compileCSha
37b0: 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d  rpWith [subst {.
37c0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
37d0: 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79  m;..    using Sy
37e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
37f0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
3800: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
3810: 47 65 6e 65 72 69 63 3b 0d 0a 20 20 20 20 75 73  Generic;..    us
3820: 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61  ing Eagle._Conta
3830: 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d  iners.Public;...
3840: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
3850: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
3860: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
3870: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
3880: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
3890: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
38a0: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  c static StringL
38b0: 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72 61  ist GetList(para
38c0: 6d 73 20 69 6e 74 5c 5b 5c 5d 20 69 6e 74 65 67  ms int\[\] integ
38d0: 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ers)..        {.
38e0: 0a 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e  .          Strin
38f0: 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e  gList result = n
3900: 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
3910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73  ....          us
3920: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65  ing (SQLiteConne
3930: 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e  ction connection
3940: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
3950: 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  nection(..      
3960: 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f          "Data So
3970: 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63  urce=${dataSourc
3980: 65 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65  e};[getTestPrope
3990: 72 74 69 65 73 5d 22 29 29 0d 0a 20 20 20 20 20  rties]"))..     
39a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
39b0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f      connection.O
39c0: 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pen();....      
39d0: 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75        SQLiteModu
39e0: 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 6e 65 77 20  le module = new 
39f0: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d  SQLiteModuleEnum
3a00: 65 72 61 62 6c 65 3c 69 6e 74 3e 28 0d 0a 20 20  erable<int>(..  
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
3a20: 6f 64 24 7b 69 64 7d 22 2c 20 69 6e 74 65 67 65  od${id}", intege
3a30: 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rs);....        
3a40: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
3a50: 72 65 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75  reateModule(modu
3a60: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
3a70: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
3a80: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
3a90: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
3aa0: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
3ad0: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
3ae0: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
3af0: 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (1)}]";..       
3b00: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45         command.E
3b10: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
3b20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3b30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3b40: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
3b50: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
3b60: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
3b70: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
3b80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3b90: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
3ba0: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
3bb0: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d  [subst ${sql(2)}
3bc0: 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]";....         
3bd0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
3be0: 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74  teDataReader dat
3bf0: 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e  aReader = comman
3c00: 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  d.ExecuteReader(
3c10: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
3c20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3c30: 20 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61       while (data
3c40: 52 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a  Reader.Read())..
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c60: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74    result.Add(dat
3c70: 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53  aReader\[0\].ToS
3c80: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
3c90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
3ca0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3cb0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
3cc0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
3cd0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
3ce0: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
3cf0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
3d00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d10: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
3d20: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
3d30: 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a  ${sql(3)}]";....
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
3d50: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
3d60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d70: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63      command.Exec
3d80: 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a  uteNonQuery();..
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
3da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
3db0: 61 74 63 68 20 28 53 51 4c 69 74 65 45 78 63 65  atch (SQLiteExce
3dc0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
3dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3de0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
3df0: 74 2e 41 64 64 28 65 2e 52 65 73 75 6c 74 43 6f  t.Add(e.ResultCo
3e00: 64 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  de.ToString());.
3e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e20: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
3e30: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
3e40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3e50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3e60: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
3e70: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
3e80: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
3e90: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
3ea0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3eb0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3ec0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  t;..        }...
3ed0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
3ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
3f30: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d  ic static void M
3f40: 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ain()..        {
3f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
3f60: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
3f70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
3f80: 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65      }..  }] true
3f90: 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c   true true resul
3fa0: 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20  ts errors [list 
3fb0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
3fc0: 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c  te.dll Eagle.dll
3fd0: 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  ]]....  list $co
3fe0: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
3ff0: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
4000: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
4010: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
4020: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
4030: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
4040: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
4050: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
4060: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
4070: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73  Test${id} GetLis
4080: 74 20 31 20 32 20 33 20 34 20 35 0d 0a 20 20 20  t 1 2 3 4 5..   
4090: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
40a0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
40b0: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
40c0: 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a  esult $result]..
40d0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
40e0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
40f0: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
4100: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
4110: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
4120: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
4130: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
4140: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
4150: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
4160: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
4170: 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f   monoCrash211 co
4180: 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70  mmand.sql\..comp
4190: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
41a0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
41b0: 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  te SQLiteInterop
41c0: 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  \..defineConstan
41d0: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
41e0: 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52  Lite.INTEROP_VIR
41f0: 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69  TUAL_TABLE compi
4200: 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68  leCSharp} -match
4210: 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75   \..regexp -resu
4220: 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61  lt [normalizeVta
4230: 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53  bResult {^Ok\..S
4240: 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f  ystem#CodeDom#Co
4250: 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52  mpiler#CompilerR
4260: 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20  esults#\d+ \{\} 
4270: 30 20 5c 7b 31 20 32 20 33 20 34 20 35 20 45 72  0 \{1 2 3 4 5 Er
4280: 72 6f 72 20 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67 69  ror \{SQL\..logi
4290: 63 20 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73  c error( or miss
42a0: 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d  ing database)? -
42b0: 2d 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  - virtual table 
42c0: 22 74 5c 64 2b 22 20 69 73 20 72 65 61 64 2d 6f  "t\d+" is read-o
42d0: 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  nly\}\}$}]}....#
42e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
4330: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
4340: 76 74 61 62 2d 31 2e 34 20 7b 76 69 72 74 75 61  vtab-1.4 {virtua
4350: 6c 20 74 61 62 6c 65 20 66 75 6e 63 74 69 6f 6e  l table function
4360: 20 73 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70   support} -setup
4370: 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61   {..  set fileNa
4380: 6d 65 20 76 74 61 62 2d 31 2e 34 2e 64 62 0d 0a  me vtab-1.4.db..
4390: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
43a0: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
43b0: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
43c0: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
43d0: 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
43e0: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
43f0: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
4400: 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ory] $fileName].
4410: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20  ...  set sql(1) 
4420: 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  { \..    CREATE 
4430: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24  VIRTUAL TABLE t$
4440: 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b  {id} USING mod${
4450: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
4460: 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
4470: 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61 73 65  .    SELECT Base
4480: 36 34 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27  64(x, CAST('one'
4490: 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20   AS BLOB)) FROM 
44a0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
44b0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
44c0: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42   \..    SELECT B
44d0: 61 73 65 36 34 28 78 2c 20 43 41 53 54 28 27 6f  ase64(x, CAST('o
44e0: 6e 65 27 20 41 53 20 42 4c 4f 42 29 2c 20 27 74  ne' AS BLOB), 't
44f0: 77 6f 27 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d  wo') FROM t${id}
4500: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
4510: 74 20 73 71 6c 28 34 29 20 7b 20 5c 0d 0a 20 20  t sql(4) { \..  
4520: 20 20 53 45 4c 45 43 54 20 42 61 73 65 36 35 28    SELECT Base65(
4530: 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53  x, CAST('one' AS
4540: 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20 74 24 7b   BLOB)) FROM t${
4550: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
4560: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
4570: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
4580: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
4590: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
45a0: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
45b0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
45c0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
45d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
45e0: 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f     using Eagle._
45f0: 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69  Containers.Publi
4600: 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  c;....    namesp
4610: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
4620: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
4630: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c  public class SQL
4640: 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d  iteFunction${id}
4650: 20 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f   : SQLiteFunctio
4660: 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  n..      {..    
4670: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
4680: 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d 28 29  eFunction${id}()
4690: 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61  ..          : ba
46a0: 73 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se(SQLiteDateFor
46b0: 6d 61 74 73 2e 44 65 66 61 75 6c 74 2c 20 44 61  mats.Default, Da
46c0: 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65  teTimeKind.Unspe
46d0: 63 69 66 69 65 64 2c 0d 0a 20 20 20 20 20 20 20  cified,..       
46e0: 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20            null, 
46f0: 66 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20  false)..        
4700: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
4710: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
4720: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4730: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4780: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
4790: 72 69 64 65 20 6f 62 6a 65 63 74 20 49 6e 76 6f  ride object Invo
47a0: 6b 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  ke(..          o
47b0: 62 6a 65 63 74 5c 5b 5c 5d 20 61 72 67 73 0d 0a  bject\[\] args..
47c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
47d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
47e0: 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75    if (args == nu
47f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4800: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
4810: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
4820: 72 67 73 2e 4c 65 6e 67 74 68 20 21 3d 20 32 29  rgs.Length != 2)
4830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4840: 74 75 72 6e 20 6e 65 77 20 41 72 67 75 6d 65 6e  turn new Argumen
4850: 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72 69 6e  tException(Strin
4860: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4870: 20 20 20 20 20 20 20 20 20 22 6e 65 65 64 20 65           "need e
4880: 78 61 63 74 6c 79 20 74 77 6f 20 61 72 67 75 6d  xactly two argum
4890: 65 6e 74 73 2c 20 67 6f 74 20 7b 30 7d 22 2c 20  ents, got {0}", 
48a0: 61 72 67 73 2e 4c 65 6e 67 74 68 29 29 3b 0d 0a  args.Length));..
48b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
48c0: 63 74 20 61 72 67 20 3d 20 61 72 67 73 5c 5b 31  ct arg = args\[1
48d0: 5c 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \];....         
48e0: 20 69 66 20 28 61 72 67 20 3d 3d 20 6e 75 6c 6c   if (arg == null
48f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
4900: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70  eturn String.Emp
4910: 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ty;....         
4920: 20 54 79 70 65 20 74 79 70 65 20 3d 20 61 72 67   Type type = arg
4930: 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20  .GetType();.... 
4940: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
4950: 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 42 4e 75  e == typeof(DBNu
4960: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
4970: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
4980: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
4990: 20 20 20 20 69 66 20 28 74 79 70 65 20 21 3d 20      if (type != 
49a0: 74 79 70 65 6f 66 28 62 79 74 65 5c 5b 5c 5d 29  typeof(byte\[\])
49b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
49c0: 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75 6d 65  eturn new Argume
49d0: 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72 69  ntException(Stri
49e0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
49f0: 20 20 20 20 20 20 20 20 20 20 22 61 72 67 75 6d            "argum
4a00: 65 6e 74 20 6d 75 73 74 20 62 65 20 62 79 74 65  ent must be byte
4a10: 20 61 72 72 61 79 2c 20 67 6f 74 20 7b 30 7d 22   array, got {0}"
4a20: 2c 20 74 79 70 65 29 29 3b 0d 0a 0d 0a 20 20 20  , type));....   
4a30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
4a40: 6e 76 65 72 74 2e 54 6f 42 61 73 65 36 34 53 74  nvert.ToBase64St
4a50: 72 69 6e 67 28 28 62 79 74 65 5c 5b 5c 5d 29 20  ring((byte\[\]) 
4a60: 61 72 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  arg);..        }
4a70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
4a80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4ad0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
4ae0: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
4af0: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
4b00: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f  : SQLiteModuleNo
4b10: 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  op..      {..   
4b20: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
4b30: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
4b40: 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a  }(string name)..
4b50: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
4b60: 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  (name)..        
4b70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
4b80: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
4b90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4ba0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4bf0: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
4c00: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
4c10: 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20  Code Create(..  
4c20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
4c30: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
4c40: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
4c50: 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
4c60: 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ta,..          s
4c70: 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65  tring\[\] argume
4c80: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nts,..          
4c90: 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61  ref SQLiteVirtua
4ca0: 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
4cb0: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
4cc0: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
4cd0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4ce0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  {..          SQL
4cf0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
4d00: 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d  = DeclareTable(.
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
4d20: 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45  nection, "CREATE
4d30: 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78   TABLE ignored(x
4d40: 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  );", ref error);
4d50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
4d60: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
4d70: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
4d80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4d90: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
4da0: 20 72 63 20 3d 20 44 65 63 6c 61 72 65 46 75 6e   rc = DeclareFun
4db0: 63 74 69 6f 6e 28 63 6f 6e 6e 65 63 74 69 6f 6e  ction(connection
4dc0: 2c 20 2d 31 2c 20 22 42 61 73 65 36 34 22 2c 20  , -1, "Base64", 
4dd0: 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20  ref error);.... 
4de0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
4df0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
4e00: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
4e10: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
4e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 61 62 6c  ..          tabl
4e30: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69  e = new SQLiteVi
4e40: 72 74 75 61 6c 54 61 62 6c 65 28 61 72 67 75 6d  rtualTable(argum
4e50: 65 6e 74 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ents);..        
4e60: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
4e70: 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20  rrorCode.Ok;..  
4e80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4e90: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4ee0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65        public ove
4ef0: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
4f00: 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20 20  rCode Open(..   
4f10: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
4f20: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
4f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
4f40: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
4f50: 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d  leCursor cursor.
4f60: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
4f70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4f80: 20 20 20 63 75 72 73 6f 72 20 3d 20 6e 65 77 20     cursor = new 
4f90: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
4fa0: 6c 65 43 75 72 73 6f 72 28 74 61 62 6c 65 29 3b  leCursor(table);
4fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
4fc0: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
4fd0: 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20  de.Ok;..        
4fe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
4ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5030: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5040: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
5050: 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74 69 6f  bool FindFunctio
5060: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  n(..          SQ
5070: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
5080: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
5090: 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43     int argumentC
50a0: 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
50b0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
50c0: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
50d0: 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
50e0: 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
50f0: 20 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69   ref IntPtr pCli
5100: 65 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20  entData..       
5110: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
5120: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
5130: 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20 21 3d 20  rgumentCount != 
5140: 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  2)..          {.
5150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
5160: 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65  TableError(table
5170: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
5180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5190: 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75  "no \\"{0}\\" fu
51a0: 6e 63 74 69 6f 6e 73 20 61 63 63 65 70 74 20 7b  nctions accept {
51b0: 31 7d 20 61 72 67 75 6d 65 6e 74 28 73 29 22 2c  1} argument(s)",
51c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51d0: 62 61 73 65 2e 4e 61 6d 65 2c 20 61 72 67 75 6d  base.Name, argum
51e0: 65 6e 74 43 6f 75 6e 74 29 29 3b 0d 0a 0d 0a 20  entCount));.... 
51f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5200: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
5210: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5220: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
5230: 71 75 61 6c 73 28 6e 61 6d 65 2c 20 22 42 61 73  quals(name, "Bas
5240: 65 36 34 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  e64",..         
5250: 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
5260: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
5270: 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20  oreCase))..     
5280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5290: 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
52a0: 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e  r(table, String.
52b0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
52c0: 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30         "no \\"{0
52d0: 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61  }\\" functions a
52e0: 72 65 20 6e 61 6d 65 64 20 5c 5c 22 7b 31 7d 5c  re named \\"{1}\
52f0: 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  \"",..          
5300: 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20 6e      base.Name, n
5310: 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame));....      
5320: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
5330: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  se;..          }
5340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 75  ....          fu
5350: 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  nction = new SQL
5360: 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d  iteFunction${id}
5370: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ();..          r
5380: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
5390: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
53a0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
53b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c  //....      publ
5400: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
5410: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
5420: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
5430: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
5440: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29 0d 0a  List GetList()..
5450: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5460: 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20       StringList 
5470: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
5480: 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
5490: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
54a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
54b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
54c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
54d0: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
54e0: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
54f0: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
5500: 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 20  tTestProperties 
5510: 4e 6f 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 5d  NoBindFunctions]
5520: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
5530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
5540: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
5550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
5560: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d  nnection.CreateM
5570: 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65  odule(new SQLite
5580: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28  ModuleTest${id}(
5590: 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d  "mod${id}"));...
55a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
55b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
55c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
55d0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
55e0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
55f0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
5600: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
5610: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5620: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
5630: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
5640: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
5650: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
5660: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
5670: 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  dd(String.Format
5680: 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e  ("{0}", command.
5690: 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29  ExecuteScalar())
56a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
56b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
56c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
56d0: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
56e0: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
56f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5700: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
5710: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
5720: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5730: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
5740: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5750: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
5760: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
5770: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
5780: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
5790: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
57a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
57b0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
57c0: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
57d0: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
57e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
57f0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72    result.Add(Str
5800: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22  ing.Format("{0}"
5810: 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  , command.Execut
5820: 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20  eScalar()));..  
5830: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5840: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5850: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
5860: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
5870: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5880: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5890: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
58a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
58b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
58c0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
58d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
58e0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
58f0: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
5900: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
5910: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5940: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
5950: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
5960: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(3)}]";..    
5970: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
5980: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
5990: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
59a0: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
59b0: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
59c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
59d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
59e0: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
59f0: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
5a00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5a10: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
5a20: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
5a30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5a40: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
5a70: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
5a80: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
5a90: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
5aa0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
5ab0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5ac0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
5ad0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
5ae0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 34 29  "[subst ${sql(4)
5af0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
5b00: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
5b10: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
5b20: 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78  {0}", command.Ex
5b30: 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b  ecuteScalar()));
5b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
5b70: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
5b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ba0: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
5bb0: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
5bc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5bd0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
5be0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
5bf0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5c00: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
5c10: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
5c20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5c70: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
5c80: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
5c90: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
5ca0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
5cb0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
5cc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
5cd0: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
5ce0: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
5cf0: 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53  s errors [list S
5d00: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
5d10: 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d  e.dll Eagle.dll]
5d20: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
5d30: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
5d40: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
5d50: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
5d60: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
5d70: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
5d80: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
5d90: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
5da0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
5db0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
5dc0: 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74  est${id} GetList
5dd0: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
5de0: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
5df0: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
5e00: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
5e10: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
5e20: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
5e30: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
5e40: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
5e50: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
5e60: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
5e70: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
5e80: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
5e90: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
5ea0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
5eb0: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
5ec0: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
5ed0: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
5ee0: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
5ef0: 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e  .SQLite SQLiteIn
5f00: 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f  terop\..defineCo
5f10: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
5f20: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
5f30: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE 
5f40: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
5f50: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
5f60: 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69  -result [normali
5f70: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f  zeVtabResult {^O
5f80: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
5f90: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
5fa0: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
5fb0: 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 62 32  \{\} 0 \{\{\} b2
5fc0: 35 6c 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 5c 0d  5l \{SQL logic\.
5fd0: 0a 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73 69  .error( or missi
5fe0: 6e 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d 2d  ng database)? --
5ff0: 20 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 66   unable to use f
6000: 75 6e 63 74 69 6f 6e 20 42 61 73 65 36 34 20 69  unction Base64 i
6010: 6e 20 74 68 65 20 72 65 71 75 65 73 74 65 64 5c  n the requested\
6020: 0d 0a 63 6f 6e 74 65 78 74 5c 7d 20 5c 7b 53 51  ..context\} \{SQ
6030: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f  L logic error( o
6040: 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61  r missing databa
6050: 73 65 29 3f 20 2d 2d 20 6e 6f 20 73 75 63 68 20  se)? -- no such 
6060: 66 75 6e 63 74 69 6f 6e 3a 5c 0d 0a 42 61 73 65  function:\..Base
6070: 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  65\}\}$}]}....##
6080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
60d0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
60e0: 74 61 62 2d 31 2e 35 20 7b 76 69 72 74 75 61 6c  tab-1.5 {virtual
60f0: 20 74 61 62 6c 65 20 66 75 6e 63 74 69 6f 6e 20   table function 
6100: 73 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20  support} -setup 
6110: 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  {..  set fileNam
6120: 65 20 76 74 61 62 2d 31 2e 35 2e 64 62 0d 0a 7d  e vtab-1.5.db..}
6130: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
6140: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
6150: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
6160: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
6170: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
6180: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
6190: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
61a0: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
61b0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b  ..  set sql(1) {
61c0: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56   \..    CREATE V
61d0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b  IRTUAL TABLE t${
61e0: 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69  id} USING mod${i
61f0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
6200: 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a  set sql(2) { \..
6210: 20 20 20 20 53 45 4c 45 43 54 20 42 61 73 65 36      SELECT Base6
6220: 34 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20  4(x, CAST('one' 
6230: 41 53 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20 74  AS BLOB)) 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 33 29 20 7b 20  .  set sql(3) { 
6260: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
6270: 73 65 36 34 28 78 2c 20 43 41 53 54 28 27 6f 6e  se64(x, CAST('on
6280: 65 27 20 41 53 20 42 4c 4f 42 29 2c 20 27 74 77  e' AS BLOB), 'tw
6290: 6f 27 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  o') FROM t${id};
62a0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
62b0: 20 73 71 6c 28 34 29 20 7b 20 5c 0d 0a 20 20 20   sql(4) { \..   
62c0: 20 53 45 4c 45 43 54 20 42 61 73 65 36 35 28 78   SELECT Base65(x
62d0: 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20  , CAST('one' AS 
62e0: 42 4c 4f 42 29 29 20 46 52 4f 4d 20 74 24 7b 69  BLOB)) FROM t${i
62f0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
6300: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
6310: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
6320: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
6330: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
6340: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
6350: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20  using System;.. 
6360: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
6370: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20  Data.SQLite;..  
6380: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
6390: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
63a0: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
63b0: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
63c0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
63d0: 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69  ublic class SQLi
63e0: 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d 20  teFunction${id} 
63f0: 3a 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  : SQLiteFunction
6400: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
6410: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
6420: 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d 28 29 0d  Function${id}().
6430: 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73  .          : bas
6440: 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e(SQLiteDateForm
6450: 61 74 73 2e 44 65 66 61 75 6c 74 2c 20 44 61 74  ats.Default, Dat
6460: 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63  eTimeKind.Unspec
6470: 69 66 69 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  ified,..        
6480: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 66           null, f
6490: 61 6c 73 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  alse)..        {
64a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
64b0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
64c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
64d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6520: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
6530: 69 64 65 20 6f 62 6a 65 63 74 20 49 6e 76 6f 6b  ide object Invok
6540: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62  e(..          ob
6550: 6a 65 63 74 5c 5b 5c 5d 20 61 72 67 73 0d 0a 20  ject\[\] args.. 
6560: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6570: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6580: 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c   if (args == nul
6590: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
65a0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
65b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
65c0: 67 73 2e 4c 65 6e 67 74 68 20 21 3d 20 32 29 0d  gs.Length != 2).
65d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
65e0: 75 72 6e 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  urn new Argument
65f0: 45 78 63 65 70 74 69 6f 6e 28 53 74 72 69 6e 67  Exception(String
6600: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
6610: 20 20 20 20 20 20 20 20 22 6e 65 65 64 20 65 78          "need ex
6620: 61 63 74 6c 79 20 74 77 6f 20 61 72 67 75 6d 65  actly two argume
6630: 6e 74 73 2c 20 67 6f 74 20 7b 30 7d 22 2c 20 61  nts, got {0}", a
6640: 72 67 73 2e 4c 65 6e 67 74 68 29 29 3b 0d 0a 0d  rgs.Length));...
6650: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
6660: 74 20 61 72 67 20 3d 20 61 72 67 73 5c 5b 31 5c  t arg = args\[1\
6670: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
6680: 69 66 20 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29  if (arg == null)
6690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
66a0: 74 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74  turn String.Empt
66b0: 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
66c0: 54 79 70 65 20 74 79 70 65 20 3d 20 61 72 67 2e  Type type = arg.
66d0: 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20  GetType();....  
66e0: 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65          if (type
66f0: 20 3d 3d 20 74 79 70 65 6f 66 28 44 42 4e 75 6c   == typeof(DBNul
6700: 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
6710: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 45   return String.E
6720: 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mpty;....       
6730: 20 20 20 69 66 20 28 74 79 70 65 20 21 3d 20 74     if (type != t
6740: 79 70 65 6f 66 28 62 79 74 65 5c 5b 5c 5d 29 29  ypeof(byte\[\]))
6750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6760: 74 75 72 6e 20 6e 65 77 20 41 72 67 75 6d 65 6e  turn new Argumen
6770: 74 45 78 63 65 70 74 69 6f 6e 28 53 74 72 69 6e  tException(Strin
6780: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
6790: 20 20 20 20 20 20 20 20 20 22 61 72 67 75 6d 65           "argume
67a0: 6e 74 20 6d 75 73 74 20 62 65 20 62 79 74 65 20  nt must be byte 
67b0: 61 72 72 61 79 2c 20 67 6f 74 20 7b 30 7d 22 2c  array, got {0}",
67c0: 20 74 79 70 65 29 29 3b 0d 0a 0d 0a 20 20 20 20   type));....    
67d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e        return Con
67e0: 76 65 72 74 2e 54 6f 42 61 73 65 36 34 53 74 72  vert.ToBase64Str
67f0: 69 6e 67 28 28 62 79 74 65 5c 5b 5c 5d 29 20 61  ing((byte\[\]) a
6800: 72 67 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rg);..        }.
6810: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
6820: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6870: 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c       public seal
6880: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
6890: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a  oduleTest${id} :
68a0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f 6f   SQLiteModuleNoo
68b0: 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  p..      {..    
68c0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
68d0: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
68e0: 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20  (string name).. 
68f0: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
6900: 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  name)..        {
6910: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
6920: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
6930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6940: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6990: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
69a0: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
69b0: 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20 20  ode Create(..   
69c0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
69d0: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
69e0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49  on,..          I
69f0: 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
6a00: 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  a,..          st
6a10: 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65 6e  ring\[\] argumen
6a20: 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ts,..          r
6a30: 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
6a40: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
6a50: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
6a60: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
6a70: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
6a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
6a90: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
6aa0: 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d 0a   DeclareTable(..
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
6ac0: 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45 20  ection, "CREATE 
6ad0: 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78 29  TABLE ignored(x)
6ae0: 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  ;", ref error);.
6af0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
6b00: 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
6b10: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
6b20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
6b30: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  c;....          
6b40: 72 63 20 3d 20 44 65 63 6c 61 72 65 46 75 6e 63  rc = DeclareFunc
6b50: 74 69 6f 6e 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c  tion(connection,
6b60: 20 2d 31 2c 20 22 42 61 73 65 36 34 22 2c 20 72   -1, "Base64", r
6b70: 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ef error);....  
6b80: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
6b90: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6ba0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6bb0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d     return rc;...
6bc0: 0a 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65  .          table
6bd0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72   = new SQLiteVir
6be0: 74 75 61 6c 54 61 62 6c 65 28 61 72 67 75 6d 65  tualTable(argume
6bf0: 6e 74 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  nts);..         
6c00: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
6c10: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
6c20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6c30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6c80: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
6c90: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
6ca0: 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20 20 20  Code Open(..    
6cb0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
6cc0: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
6cd0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53  .          ref S
6ce0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
6cf0: 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a  eCursor cursor..
6d00: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
6d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6d20: 20 20 63 75 72 73 6f 72 20 3d 20 6e 65 77 20 53    cursor = new S
6d30: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
6d40: 65 43 75 72 73 6f 72 28 74 61 62 6c 65 29 3b 0d  eCursor(table);.
6d50: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
6d60: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
6d70: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  e.Ok;..        }
6d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
6de0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62  ublic override b
6df0: 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ool FindFunction
6e00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  (..          SQL
6e10: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
6e20: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
6e30: 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f    int argumentCo
6e40: 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
6e50: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
6e60: 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69          ref SQLi
6e70: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
6e80: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
6e90: 72 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65  ref IntPtr pClie
6ea0: 6e 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ntData..        
6eb0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
6ec0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
6ed0: 67 75 6d 65 6e 74 43 6f 75 6e 74 20 21 3d 20 32  gumentCount != 2
6ee0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
6f00: 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65 2c  ableError(table,
6f10: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
6f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
6f30: 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e  no \\"{0}\\" fun
6f40: 63 74 69 6f 6e 73 20 61 63 63 65 70 74 20 7b 31  ctions accept {1
6f50: 7d 20 61 72 67 75 6d 65 6e 74 28 73 29 22 2c 0d  } argument(s)",.
6f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  .              b
6f70: 61 73 65 2e 4e 61 6d 65 2c 20 61 72 67 75 6d 65  ase.Name, argume
6f80: 6e 74 43 6f 75 6e 74 29 29 3b 0d 0a 0d 0a 20 20  ntCount));....  
6f90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6fa0: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
6fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6fc0: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
6fd0: 75 61 6c 73 28 6e 61 6d 65 2c 20 22 42 61 73 65  uals(name, "Base
6fe0: 36 34 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64",..          
6ff0: 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
7000: 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
7010: 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20 20  reCase))..      
7020: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7030: 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72     SetTableError
7040: 28 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46  (table, String.F
7050: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
7060: 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d        "no \\"{0}
7070: 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  \\" functions ar
7080: 65 20 6e 61 6d 65 64 20 5c 5c 22 7b 31 7d 5c 5c  e named \\"{1}\\
7090: 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "",..           
70a0: 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20 6e 61     base.Name, na
70b0: 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me));....       
70c0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
70d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
70e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 75 6e  ...          fun
70f0: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
7100: 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64 7d 28  teFunction${id}(
7110: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  );..          re
7120: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
7130: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
7140: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
7150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7190: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  /....      publi
71a0: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
71b0: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
71c0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
71d0: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  c static StringL
71e0: 69 73 74 20 47 65 74 4c 69 73 74 28 29 0d 0a 20  ist GetList().. 
71f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7200: 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72      StringList r
7210: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
7220: 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
7230: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
7240: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
7250: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
7260: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7270: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7280: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
7290: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
72a0: 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22  TestProperties]"
72b0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
72c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
72d0: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
72e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
72f0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
7300: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
7310: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 22  oduleTest${id}("
7320: 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a  mod${id}"));....
7330: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
7340: 0a 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 75 73                us
7360: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
7370: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
7380: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
7390: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
73a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
73b0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
73c0: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
73d0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
73e0: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
73f0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
7400: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
7410: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
7420: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
7430: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7440: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7450: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
7460: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
7470: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
7480: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7490: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
74a0: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
74b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
74c0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
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 75 73 69 6e 67 20 28 53          using (S
74f0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
7500: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
7510: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
7520: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
7530: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7540: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
7550: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
7560: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
7570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7580: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
7590: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
75a0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
75b0: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
75c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
75d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
75e0: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
75f0: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
7600: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7610: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
7620: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
7630: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7650: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
7660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7670: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
7680: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
7690: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
76a0: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
76d0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
76e0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
76f0: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(3)}]";..     
7700: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
7710: 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72  t.Add(String.For
7720: 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61  mat("{0}", comma
7730: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
7740: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
7750: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7760: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7770: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
7780: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
7790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
77a0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
77b0: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
77c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
77d0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
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 75 73 69 6e              usin
7800: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
7810: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
7820: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
7830: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
7840: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7850: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
7860: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
7870: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 34 29 7d  [subst ${sql(4)}
7880: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
7890: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
78a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
78b0: 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  0}", command.Exe
78c0: 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d  cuteScalar()));.
78d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
78e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
78f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
7900: 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
7910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
7930: 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73  esult.Add(e.Mess
7940: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
7950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7960: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
7970: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
7980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7990: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
79a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
79b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7a00: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
7a10: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
7a20: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
7a30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
7a40: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7a50: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
7a60: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
7a70: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
7a80: 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79   errors [list Sy
7a90: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
7aa0: 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d  .dll Eagle.dll]]
7ab0: 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65  ....  list $code
7ac0: 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20   $results \..   
7ad0: 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20     [expr {[info 
7ae0: 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f  exists errors] ?
7af0: 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20   $errors : ""}] 
7b00: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
7b10: 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20  $code eq "Ok" ? 
7b20: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..      
7b30: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
7b40: 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65  _Dynamic${id}.Te
7b50: 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 0d  st${id} GetList.
7b60: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
7b70: 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
7b80: 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  "]}] [normalizeV
7b90: 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c  tabResult $resul
7ba0: 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t]..} -cleanup {
7bb0: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
7bc0: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
7bd0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
7be0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c  esult code resul
7bf0: 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61  ts errors sql da
7c00: 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65  taSource id file
7c10: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
7c20: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
7c30: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
7c40: 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31  ug28 monoCrash21
7c50: 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a  1 command.sql\..
7c60: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
7c70: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
7c80: 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74  SQLite SQLiteInt
7c90: 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e  erop\..defineCon
7ca0: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
7cb0: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
7cc0: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63  _VIRTUAL_TABLE c
7cd0: 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d  ompileCSharp} -m
7ce0: 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d  atch \..regexp -
7cf0: 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a  result [normaliz
7d00: 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b  eVtabResult {^Ok
7d10: 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  \..System#CodeDo
7d20: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
7d30: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c  lerResults#\d+ \
7d40: 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 62 32 35  {\} 0 \{\{\} b25
7d50: 6c 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 5c 0d 0a  l \{SQL logic\..
7d60: 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e  error( or missin
7d70: 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20  g database)? -- 
7d80: 28 3f 3a 75 6e 61 62 6c 65 20 74 6f 20 75 73 65  (?:unable to use
7d90: 20 66 75 6e 63 74 69 6f 6e 20 42 61 73 65 36 34   function Base64
7da0: 20 69 6e 20 74 68 65 5c 0d 0a 72 65 71 75 65 73   in the\..reques
7db0: 74 65 64 20 63 6f 6e 74 65 78 74 7c 6e 65 65 64  ted context|need
7dc0: 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61 72 67   exactly one arg
7dd0: 75 6d 65 6e 74 2c 20 67 6f 74 20 33 29 5c 7d 20  ument, got 3)\} 
7de0: 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f  \{SQL logic erro
7df0: 72 28 20 6f 72 5c 0d 0a 6d 69 73 73 69 6e 67 20  r( or\..missing 
7e00: 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f  database)? -- no
7e10: 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20   such function: 
7e20: 42 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a  Base65\}\}$}]}..
7e30: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
7e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e80: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
7e90: 73 74 20 76 74 61 62 2d 31 2e 36 20 7b 76 69 72  st vtab-1.6 {vir
7ea0: 74 75 61 6c 20 74 61 62 6c 65 20 72 65 6e 61 6d  tual table renam
7eb0: 65 20 73 75 70 70 6f 72 74 7d 20 2d 73 65 74 75  e support} -setu
7ec0: 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e  p {..  set fileN
7ed0: 61 6d 65 20 76 74 61 62 2d 31 2e 36 2e 64 62 0d  ame vtab-1.6.db.
7ee0: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
7ef0: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
7f00: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
7f10: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
7f20: 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75  ]..  set dataSou
7f30: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
7f40: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
7f50: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
7f60: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29  ....  set sql(1)
7f70: 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45   { \..    CREATE
7f80: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
7f90: 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24  ${id} USING mod$
7fa0: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
7fb0: 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c    set sql(2) { \
7fc0: 0d 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  ..    ALTER TABL
7fd0: 45 20 74 24 7b 69 64 7d 20 52 45 4e 41 4d 45 20  E t${id} RENAME 
7fe0: 54 4f 20 78 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  TO x${id}; \..  
7ff0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33  }....  set sql(3
8000: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
8010: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
8020: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
8030: 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 4f  type = 'table' O
8040: 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 20 5c 0d  RDER BY name; \.
8050: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
8060: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
8070: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
8080: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
8090: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
80a0: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
80b0: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
80c0: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
80d0: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
80e0: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
80f0: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
8100: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
8110: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
8120: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
8130: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
8140: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
8150: 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c  d} : SQLiteModul
8160: 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a  eNoop..      {..
8170: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
8180: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
8190: 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65  {id}(string name
81a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62  )..          : b
81b0: 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ase(name)..     
81c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
81d0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
81e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
81f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8240: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
8250: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
8260: 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d  rorCode Create(.
8270: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
8280: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
8290: 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ection,..       
82a0: 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e     IntPtr pClien
82b0: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
82c0: 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67    string\[\] arg
82d0: 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20  uments,..       
82e0: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
82f0: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
8300: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
8310: 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
8320: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8330: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8340: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8350: 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c  rc = DeclareTabl
8360: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
8370: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45  connection, "CRE
8380: 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65  ATE TABLE ignore
8390: 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f  d(x);", ref erro
83a0: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
83b0: 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
83c0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
83e0: 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  rn rc;....      
83f0: 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77 20      table = new 
8400: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
8410: 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a  le(arguments);..
8420: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8430: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8440: 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  .Ok;..        }.
8450: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
84b0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51  blic override SQ
84c0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70  LiteErrorCode Op
84d0: 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53  en(..          S
84e0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
84f0: 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  e table,..      
8500: 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
8510: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
8520: 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20   cursor..       
8530: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
8540: 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f  .          curso
8550: 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69  r = new SQLiteVi
8560: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
8570: 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20  (table);..      
8580: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
8590: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a  eErrorCode.Ok;..
85a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
85b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
8610: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
8620: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
8630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
8640: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
8650: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
8660: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8670: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
8680: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
8690: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
86a0: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
86b0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
86c0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
86d0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
86e0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
86f0: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
8700: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
8710: 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69  [getTestProperti
8720: 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  es]"))..        
8730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8740: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
8750: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
8760: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
8770: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
8780: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
8790: 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b  d}("mod${id}"));
87a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
87b0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
87c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
87d0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
87e0: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
87f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
8800: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
8810: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8830: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
8840: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
8850: 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(1)}]";..     
8860: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
8870: 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72  t.Add(String.For
8880: 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61  mat("{0}", comma
8890: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
88a0: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
88b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
88c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
88d0: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
88e0: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
88f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8900: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
8910: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
8920: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8930: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
8940: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8950: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
8960: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
8970: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
8980: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
8990: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
89a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
89b0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
89c0: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
89d0: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d  [subst ${sql(3)}
89e0: 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]";....         
89f0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
8a00: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64  LiteDataReader d
8a10: 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d  ataReader = comm
8a20: 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65  and.ExecuteReade
8a30: 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r())..          
8a40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8a50: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
8a60: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
8a70: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
8a80: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
8a90: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
8aa0: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
8ab0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8ac0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8ad0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8ae0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8af0: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
8b00: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
8b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b20: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
8b30: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
8b40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8b50: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
8b60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8b70: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
8b80: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
8b90: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
8ba0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
8bb0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
8bc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8bd0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
8be0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
8bf0: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
8c00: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
8c10: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53      result.Add(S
8c20: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
8c30: 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  }", command.Exec
8c40: 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a  uteScalar()));..
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
8c80: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8cb0: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
8cc0: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
8cd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8ce0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
8cf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d00: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
8d10: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
8d20: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
8d30: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
8d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
8d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d60: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
8d70: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
8d80: 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a  ${sql(3)}]";....
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8da0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74  using (SQLiteDat
8db0: 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64  aReader dataRead
8dc0: 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  er = command.Exe
8dd0: 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20  cuteReader()).. 
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e00: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
8e10: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
8e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e30: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61     result.Add(da
8e40: 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f  taReader\[0\].To
8e50: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8e90: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
8ea0: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
8ed0: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
8ee0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8ef0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8f00: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f    connection.Clo
8f10: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
8f20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8f30: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
8f40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8f50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8fa0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
8fb0: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
8fc0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8fd0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8fe0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8ff0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
9000: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
9010: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
9020: 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74  rrors [list Syst
9030: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
9040: 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a  ll Eagle.dll]]..
9050: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
9060: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
9070: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
9080: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
9090: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
90a0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
90b0: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
90c0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
90d0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
90e0: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
90f0: 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20  ${id} GetList.. 
9100: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
9110: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
9120: 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61  }] [normalizeVta
9130: 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d  bResult $result]
9140: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
9150: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
9160: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
9170: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
9180: 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73  ult code results
9190: 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61   errors sql data
91a0: 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61  Source id fileNa
91b0: 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e  me..} -constrain
91c0: 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e  ts {eagle comman
91d0: 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67  d.object monoBug
91e0: 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20  28 monoCrash211 
91f0: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f  command.sql\..co
9200: 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74  mpile.DATA SQLit
9210: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
9220: 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65 72  Lite SQLiteInter
9230: 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  op\..defineConst
9240: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
9250: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
9260: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
9270: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
9280: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
9290: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  sult [normalizeV
92a0: 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  tabResult {^Ok\.
92b0: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
92c0: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
92d0: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
92e0: 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 74 5c 64 2b 20  } 0 \{\{\} t\d+ 
92f0: 5c 7b 5c 7d 20 78 5c 64 2b 5c 7d 24 7d 5d 7d 0d  \{\} x\d+\}$}]}.
9300: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
9310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9350: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
9360: 65 73 74 20 76 74 61 62 2d 31 2e 37 20 7b 76 69  est vtab-1.7 {vi
9370: 72 74 75 61 6c 20 74 61 62 6c 65 20 78 42 65 73  rtual table xBes
9380: 74 49 6e 64 65 78 20 6d 61 72 73 68 61 6c 6c 69  tIndex marshalli
9390: 6e 67 20 28 31 29 7d 20 2d 73 65 74 75 70 20 7b  ng (1)} -setup {
93a0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
93b0: 20 76 74 61 62 2d 31 2e 37 2e 64 62 0d 0a 7d 20   vtab-1.7.db..} 
93c0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
93d0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
93e0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
93f0: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
9400: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
9410: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
9420: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
9430: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
9440: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
9450: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  \..    CREATE TA
9460: 42 4c 45 20 74 24 7b 69 64 7d 28 79 20 43 48 41  BLE t${id}(y CHA
9470: 52 28 31 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50  R(10) NOT NULL P
9480: 52 49 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a  RIMARY KEY); \..
9490: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
94a0: 41 4c 20 54 41 42 4c 45 20 75 24 7b 69 64 7d 20  AL TABLE u${id} 
94b0: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
94c0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
94d0: 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(2) { \..    
94e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 24 7b 69  INSERT INTO t${i
94f0: 64 7d 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  d} SELECT x FROM
9500: 20 75 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   u${id}; \..  }.
9510: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
9520: 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20  { \..    SELECT 
9530: 76 24 7b 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24  v${id}.y FROM t$
9540: 7b 69 64 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54  {id} v${id} LEFT
9550: 20 4f 55 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20   OUTER JOIN \.. 
9560: 20 20 20 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b     u${id} ON u${
9570: 69 64 7d 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79  id}.x = v${id}.y
9580: 20 57 48 45 52 45 20 75 24 7b 69 64 7d 2e 78 20   WHERE u${id}.x 
9590: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20  IS NOT NULL \.. 
95a0: 20 20 20 4f 52 44 45 52 20 42 59 20 76 24 7b 69     ORDER BY v${i
95b0: 64 7d 2e 79 20 44 45 53 43 3b 20 5c 0d 0a 20 20  d}.y DESC; \..  
95c0: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
95d0: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
95e0: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
95f0: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
9600: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
9610: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
9620: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
9630: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
9640: 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  ns;..    using S
9650: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
9660: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
9670: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
9680: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
9690: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
96a0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
96b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c       public seal
96c0: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
96d0: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a  oduleTest${id} :
96e0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75   SQLiteModuleEnu
96f0: 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 7b  merable..      {
9700: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9710: 20 73 74 72 69 6e 67 20 52 65 73 75 6c 74 3b 0d   string Result;.
9720: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9770: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
9780: 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
9790: 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20  eTest${id}(..   
97a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
97b0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49  me,..          I
97c0: 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d 65  Enumerable enume
97d0: 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  rable..         
97e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20   )..          : 
97f0: 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d 65  base(name, enume
9800: 72 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  rable)..        
9810: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
9820: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
9830: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9840: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9890: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
98a0: 20 2f 2f 20 42 55 47 46 49 58 3a 20 54 68 69 73   // BUGFIX: This
98b0: 20 6d 65 74 68 6f 64 20 68 65 6c 70 73 20 76 65   method helps ve
98c0: 72 69 66 79 20 74 69 63 6b 65 74 20 5c 5b 35 36  rify ticket \[56
98d0: 66 35 31 31 64 32 36 38 5c 5d 20 69 73 20 66 69  f511d268\] is fi
98e0: 78 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  xed...        //
98f0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9900: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
9910: 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e  ErrorCode BestIn
9920: 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
9930: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
9940: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
9950: 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78       SQLiteIndex
9960: 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
9970: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
9980: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
9990: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
99a0: 74 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65 6e  traintUsages.Len
99b0: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
99c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
99d0: 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74     if (index.Out
99e0: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
99f0: 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e 75  sages\[0\] == nu
9a00: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9a10: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
9a20: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22  umentException("
9a30: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
9a40: 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29 3b  \[0\] is null");
9a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
9a60: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9a70: 20 20 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e 73    Result = "Cons
9a80: 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73 20  traintUsages is 
9a90: 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  OK";..          
9aa0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  }....          r
9ab0: 65 74 75 72 6e 20 62 61 73 65 2e 42 65 73 74 49  eturn base.BestI
9ac0: 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e 64 65  ndex(table, inde
9ad0: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x);..        }..
9ae0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9af0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9b40: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9b50: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
9b60: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
9b70: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9b80: 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74  c StringList Get
9b90: 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69  List(params stri
9ba0: 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d  ng\[\] strings).
9bb0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9bc0: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
9bd0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
9be0: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
9bf0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9c00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9c10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
9c20: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
9c30: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
9c40: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
9c50: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
9c60: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
9c70: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
9c80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
9c90: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
9ca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9cb0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
9cc0: 74 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20 3d 20  t${id} module = 
9cd0: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
9ce0: 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20  Test${id}(..    
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
9d00: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
9d10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9d20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
9d30: 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29  teModule(module)
9d40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9d50: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
9d60: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
9d70: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
9d80: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
9d90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9da0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
9db0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
9dc0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
9dd0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
9de0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63      result.Add(c
9df0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
9e00: 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e  nQuery().ToStrin
9e10: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
9e20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9e30: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
9e40: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
9e50: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
9e60: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
9e90: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
9ea0: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
9eb0: 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (2)}]";..       
9ec0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
9ed0: 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  d(command.Execut
9ee0: 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74  eNonQuery().ToSt
9ef0: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
9f00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9f10: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
9f20: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
9f30: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
9f40: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
9f50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f70: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
9f80: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
9f90: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
9fb0: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
9fc0: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
9fd0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
9fe0: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
9ff0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a000: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
a010: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
a020: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
a030: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
a040: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
a050: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
a060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a070: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a080: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a090: 72 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64 75 6c  result.Add(modul
a0a0: 65 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20  e.Result);..    
a0b0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
a0c0: 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  on.Close();..   
a0d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a0e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
a0f0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
a100: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
a160: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
a170: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
a180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
a190: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
a1a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
a1b0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72  ..    }..  }] tr
a1c0: 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73  ue true true res
a1d0: 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73  ults errors [lis
a1e0: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
a1f0: 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64  Lite.dll Eagle.d
a200: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  ll]]....  list $
a210: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
a220: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  .      [expr {[i
a230: 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72  nfo exists error
a240: 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22  s] ? $errors : "
a250: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  "}] \..      [ex
a260: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
a270: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
a280: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
a290: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
a2a0: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c  }.Test${id} GetL
a2b0: 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  ist one two thre
a2c0: 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d  e 4 5.0..      }
a2d0: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
a2e0: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f  result ""]}] [no
a2f0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
a300: 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63  t $result]..} -c
a310: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
a320: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
a330: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
a340: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
a350: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
a360: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
a370: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
a380: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
a390: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
a3a0: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e  ct monoBug28 mon
a3b0: 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e  oCrash211 comman
a3c0: 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e  d.sql\..compile.
a3d0: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
a3e0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53  em.Data.SQLite S
a3f0: 51 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64  QLiteInterop\..d
a400: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
a410: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a420: 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c  .INTEROP_VIRTUAL
a430: 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53  _TABLE compileCS
a440: 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a  harp} -match \..
a450: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b  regexp -result [
a460: 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73  normalizeVtabRes
a470: 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65  ult {^Ok\..Syste
a480: 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c  m#CodeDom#Compil
a490: 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c  er#CompilerResul
a4a0: 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b  ts#\d+ \{\} 0 \{
a4b0: 30 20 35 20 74 77 6f 20 74 68 72 65 65 20 6f 6e  0 5 two three on
a4c0: 65 20 35 5c 2e 30 5c 0d 0a 34 20 5c 7b 43 6f 6e  e 5\.0\..4 \{Con
a4d0: 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73  straintUsages is
a4e0: 20 4f 4b 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23   OK\}\}$}]}....#
a4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
a540: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
a550: 76 74 61 62 2d 31 2e 38 20 7b 76 69 72 74 75 61  vtab-1.8 {virtua
a560: 6c 20 74 61 62 6c 65 20 78 42 65 73 74 49 6e 64  l table xBestInd
a570: 65 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67 20 28  ex marshalling (
a580: 32 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  2)} -setup {..  
a590: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
a5a0: 62 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62 6f 64  b-1.8.db..} -bod
a5b0: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
a5c0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
a5d0: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
a5e0: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
a5f0: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
a600: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
a610: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
a620: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
a630: 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20  et sql(1) { \.. 
a640: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
a650: 74 24 7b 69 64 7d 28 79 20 43 48 41 52 28 31 30  t${id}(y CHAR(10
a660: 29 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49 4d 41  ) NOT NULL PRIMA
a670: 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20 20 20  RY KEY); \..    
a680: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
a690: 41 42 4c 45 20 75 24 7b 69 64 7d 20 55 53 49 4e  ABLE u${id} USIN
a6a0: 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20  G mod${id}; \.. 
a6b0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
a6c0: 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53 45  2) { \..    INSE
a6d0: 52 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d 20 53  RT INTO t${id} S
a6e0: 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 75 24 7b  ELECT x FROM u${
a6f0: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
a700: 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d   set sql(3) { \.
a710: 0a 20 20 20 20 53 45 4c 45 43 54 20 76 24 7b 69  .    SELECT v${i
a720: 64 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69 64 7d  d}.y FROM t${id}
a730: 20 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f 55 54   v${id} LEFT OUT
a740: 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20 20 75  ER JOIN \..    u
a750: 24 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64 7d 2e  ${id} ON u${id}.
a760: 78 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57 48 45  x = v${id}.y WHE
a770: 52 45 20 75 24 7b 69 64 7d 2e 78 20 49 53 20 4e  RE u${id}.x IS N
a780: 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20 20 41  OT NULL \..    A
a790: 4e 44 20 75 24 7b 69 64 7d 2e 78 20 42 45 54 57  ND u${id}.x BETW
a7a0: 45 45 4e 20 27 6f 6e 65 27 20 61 6e 64 20 27 74  EEN 'one' and 't
a7b0: 68 72 65 65 27 20 4f 52 44 45 52 20 42 59 20 75  hree' ORDER BY u
a7c0: 24 7b 69 64 7d 2e 78 20 41 53 43 2c 20 5c 0d 0a  ${id}.x ASC, \..
a7d0: 20 20 20 20 75 24 7b 69 64 7d 2e 78 20 44 45 53      u${id}.x DES
a7e0: 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75  C; \..  }....  u
a7f0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
a800: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
a810: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
a820: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
a830: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
a840: 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20  sing System;..  
a850: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43    using System.C
a860: 6f 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20 20 20  ollections;..   
a870: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
a880: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
a890: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
a8a0: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
a8b0: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
a8c0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
a8d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
a8e0: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
a8f0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
a900: 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d  t${id} : SQLiteM
a910: 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 0d  oduleEnumerable.
a920: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a930: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
a940: 52 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  Result;....     
a950: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a9a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
a9b0: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
a9c0: 64 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73  d}(..          s
a9d0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
a9e0: 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 62         IEnumerab
a9f0: 6c 65 20 65 6e 75 6d 65 72 61 62 6c 65 0d 0a 20  le enumerable.. 
aa00: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
aa10: 20 20 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d        : base(nam
aa20: 65 2c 20 65 6e 75 6d 65 72 61 62 6c 65 29 0d 0a  e, enumerable)..
aa30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aa40: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
aa50: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
aa60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
aa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
aac0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46  .        // BUGF
aad0: 49 58 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  IX: This method 
aae0: 68 65 6c 70 73 20 76 65 72 69 66 79 20 74 69 63  helps verify tic
aaf0: 6b 65 74 20 5c 5b 35 36 66 35 31 31 64 32 36 38  ket \[56f511d268
ab00: 5c 5d 20 69 73 20 66 69 78 65 64 2e 0d 0a 20 20  \] is fixed...  
ab10: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ab20: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
ab30: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
ab40: 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  e BestIndex(..  
ab50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
ab60: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
ab70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  ,..          SQL
ab80: 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a  iteIndex index..
ab90: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
aba0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
abb0: 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74 70    if (index.Outp
abc0: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73  uts.ConstraintUs
abd0: 61 67 65 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29  ages.Length > 0)
abe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
abf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
ac00: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
ac10: 73 74 72 61 69 6e 74 55 73 61 67 65 73 5c 5b 30  straintUsages\[0
ac20: 5c 5d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  \] == null)..   
ac30: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
ac40: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
ac50: 65 70 74 69 6f 6e 28 22 43 6f 6e 73 74 72 61 69  eption("Constrai
ac60: 6e 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20 69 73  ntUsages\[0\] is
ac70: 20 6e 75 6c 6c 22 29 3b 0d 0a 20 20 20 20 20 20   null");..      
ac80: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
ac90: 20 20 20 20 20 20 20 20 20 20 52 65 73 75 6c 74            Result
aca0: 20 3d 20 22 43 6f 6e 73 74 72 61 69 6e 74 55 73   = "ConstraintUs
acb0: 61 67 65 73 20 69 73 20 4f 4b 22 3b 0d 0a 20 20  ages is OK";..  
acc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
acd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61         return ba
ace0: 73 65 2e 42 65 73 74 49 6e 64 65 78 28 74 61 62  se.BestIndex(tab
acf0: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
ad00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
ad10: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
ad20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c  //....      publ
ad70: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
ad80: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
ad90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
ada0: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
adb0: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
adc0: 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73  ams string\[\] s
add0: 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20  trings)..       
ade0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
adf0: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
ae00: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
ae10: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
ae20: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
ae30: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
ae40: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
ae50: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
ae60: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
ae70: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
ae80: 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72  urce};[getTestPr
ae90: 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20  operties]"))..  
aea0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aeb0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
aec0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
aed0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
aee0: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 6d  oduleTest${id} m
aef0: 6f 64 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  odule = new SQLi
af00: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
af10: 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }(..            
af20: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
af30: 73 74 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20  strings);....   
af40: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
af50: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
af60: 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20  (module);....   
af70: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
af80: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
af90: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
afa0: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
afb0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
afc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
afd0: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
afe0: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
aff0: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
b000: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
b010: 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45  lt.Add(command.E
b020: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
b030: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
b040: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
b050: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
b060: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
b070: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
b080: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
b090: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
b0a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0b0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
b0c0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
b0d0: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
b0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
b0f0: 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e  esult.Add(comman
b100: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
b110: 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  y().ToString());
b120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b130: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
b140: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
b150: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
b160: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
b170: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
b180: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b190: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
b1a0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
b1b0: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
b1c0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
b1d0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
b1e0: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
b1f0: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
b200: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
b210: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b230: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
b240: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
b250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b260: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
b270: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
b280: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
b290: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b2a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b2b0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
b2c0: 64 64 28 6d 6f 64 75 6c 65 2e 52 65 73 75 6c 74  dd(module.Result
b2d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b2e0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
b2f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
b300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
b310: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
b320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b330: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b380: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
b390: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
b3a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b3b0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
b3c0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
b3d0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
b3e0: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
b3f0: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
b400: 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d  ors [list System
b410: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
b420: 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a   Eagle.dll]]....
b430: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
b440: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
b450: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
b460: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
b470: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
b480: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
b490: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
b4a0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
b4b0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
b4c0: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
b4d0: 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20  id} GetList one 
b4e0: 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d  two three 4 5.0.
b4f0: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
b500: 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
b510: 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  "]}] [normalizeV
b520: 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c  tabResult $resul
b530: 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t]..} -cleanup {
b540: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
b550: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
b560: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
b570: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c  esult code resul
b580: 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61  ts errors sql da
b590: 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65  taSource id file
b5a0: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
b5b0: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
b5c0: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
b5d0: 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31  ug28 monoCrash21
b5e0: 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a  1 command.sql\..
b5f0: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
b600: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
b610: 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74  SQLite SQLiteInt
b620: 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e  erop\..defineCon
b630: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
b640: 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
b650: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63  _VIRTUAL_TABLE c
b660: 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d  ompileCSharp} -m
b670: 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d  atch \..regexp -
b680: 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a  result [normaliz
b690: 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b  eVtabResult {^Ok
b6a0: 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f  \..System#CodeDo
b6b0: 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69  m#Compiler#Compi
b6c0: 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c  lerResults#\d+ \
b6d0: 7b 5c 7d 20 30 20 5c 7b 30 20 35 20 6f 6e 65 20  {\} 0 \{0 5 one 
b6e0: 74 68 72 65 65 5c 0d 0a 5c 7b 43 6f 6e 73 74 72  three\..\{Constr
b6f0: 61 69 6e 74 55 73 61 67 65 73 20 69 73 20 4f 4b  aintUsages is OK
b700: 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23  \}\}$}]}....####
b710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b750: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
b760: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61  unTest {test vta
b770: 62 2d 31 2e 39 20 7b 49 45 6e 75 6d 65 72 61 62  b-1.9 {IEnumerab
b780: 6c 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  le virtual table
b790: 20 77 2f 6c 61 72 67 65 20 62 79 74 65 20 61 72   w/large byte ar
b7a0: 72 61 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ray} -setup {.. 
b7b0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
b7c0: 61 62 2d 31 2e 39 2e 64 62 0d 0a 7d 20 2d 62 6f  ab-1.9.db..} -bo
b7d0: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
b7e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
b7f0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
b800: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
b810: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
b820: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
b830: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
b840: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
b850: 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a  set sql(1) { \..
b860: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
b870: 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20  AL TABLE t${id} 
b880: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
b890: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
b8a0: 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(2) { \..    
b8b0: 53 45 4c 45 43 54 20 53 55 4d 28 78 29 20 46 52  SELECT SUM(x) FR
b8c0: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
b8d0: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
b8e0: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
b8f0: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
b900: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
b910: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
b920: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
b930: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
b940: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b950: 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73  te;....    names
b960: 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  pace _Dynamic${i
b970: 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  d}..    {..     
b980: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
b990: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
b9a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b9b0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f   public static o
b9c0: 62 6a 65 63 74 20 47 65 74 53 75 6d 28 29 0d 0a  bject GetSum()..
b9d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b9e0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
b9f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
ba00: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
ba10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
ba20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
ba30: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
ba40: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65  taSource};[getTe
ba50: 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29  stProperties]"))
ba60: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
ba70: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
ba80: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d  ction.Open();...
ba90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74  .            byt
baa0: 65 5c 5b 5c 5d 20 62 79 74 65 73 20 3d 20 6e 65  e\[\] bytes = ne
bab0: 77 20 62 79 74 65 5c 5b 31 30 34 38 35 37 36 5c  w byte\[1048576\
bac0: 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
bad0: 6e 65 77 20 52 61 6e 64 6f 6d 28 29 2e 4e 65 78  new Random().Nex
bae0: 74 42 79 74 65 73 28 62 79 74 65 73 29 3b 0d 0a  tBytes(bytes);..
baf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
bb00: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d  nnection.CreateM
bb10: 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65  odule(new SQLite
bb20: 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65  ModuleEnumerable
bb30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
bb40: 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 62 79 74   "mod${id}", byt
bb50: 65 73 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  es));....       
bb60: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
bb70: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
bb80: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
bb90: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
bba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
bbc0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
bbd0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
bbe0: 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(1)}]";..      
bbf0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
bc00: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
bc10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
bc20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
bc30: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
bc40: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
bc50: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
bc60: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
bc70: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
bc80: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
bc90: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
bca0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
bcb0: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
bcc0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d 61      return comma
bcd0: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
bce0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
bcf0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
bd00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
bd10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bd60: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
bd70: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
bd80: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
bd90: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
bda0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
bdb0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
bdc0: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
bdd0: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
bde0: 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44 61  errors System.Da
bdf0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a  ta.SQLite.dll]..
be00: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
be10: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
be20: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
be30: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
be40: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
be50: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
be60: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
be70: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
be80: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
be90: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
bea0: 24 7b 69 64 7d 20 47 65 74 53 75 6d 0d 0a 20 20  ${id} GetSum..  
beb0: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
bec0: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
bed0: 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  ] [normalizeVtab
bee0: 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d  Result $result].
bef0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
bf00: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
bf10: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
bf20: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
bf30: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
bf40: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
bf50: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
bf60: 65 0d 0a 7d 20 2d 74 69 6d 65 20 74 72 75 65 20  e..} -time true 
bf70: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
bf80: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
bf90: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e  ct monoBug28 mon
bfa0: 6f 43 72 61 73 68 32 31 31 5c 0d 0a 63 6f 6d 6d  oCrash211\..comm
bfb0: 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65 2e  and.sql compile.
bfc0: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
bfd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53  em.Data.SQLite S
bfe0: 51 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64  QLiteInterop\..d
bff0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
c000: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
c010: 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c  .INTEROP_VIRTUAL
c020: 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53  _TABLE compileCS
c030: 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a  harp} -match \..
c040: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b  regexp -result [
c050: 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73  normalizeVtabRes
c060: 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65  ult {^Ok\..Syste
c070: 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c  m#CodeDom#Compil
c080: 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c  er#CompilerResul
c090: 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 28 3f  ts#\d+ \{\} 0 (?
c0a0: 3a 2d 29 3f 5c 64 2b 24 7d 5d 7d 0d 0a 0d 0a 23  :-)?\d+$}]}....#
c0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
c100: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
c110: 76 74 61 62 2d 31 2e 31 30 20 7b 76 69 72 74 75  vtab-1.10 {virtu
c120: 61 6c 20 74 61 62 6c 65 20 78 52 6f 77 49 64 20  al table xRowId 
c130: 75 6e 69 71 75 65 6e 65 73 73 7d 20 2d 73 65 74  uniqueness} -set
c140: 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65  up {..  set file
c150: 4e 61 6d 65 20 76 74 61 62 2d 31 2e 31 30 2e 64  Name vtab-1.10.d
c160: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
c170: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
c180: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
c190: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
c1a0: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
c1b0: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
c1c0: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
c1d0: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
c1e0: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
c1f0: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
c200: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
c210: 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f   t${id} USING mo
c220: 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  d${id}; \..  }..
c230: 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b  ..  set sql(2) {
c240: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 43   \..    SELECT C
c250: 41 53 45 20 57 48 45 4e 20 30 20 54 48 45 4e 20  ASE WHEN 0 THEN 
c260: 72 6f 77 49 64 20 45 4c 53 45 20 72 6f 77 49 64  rowId ELSE rowId
c270: 20 45 4e 44 2c 20 5c 0d 0a 20 20 20 20 20 20 20   END, \..       
c280: 20 20 20 20 43 41 53 45 20 57 48 45 4e 20 31 20      CASE WHEN 1 
c290: 54 48 45 4e 20 72 6f 77 49 64 20 45 4c 53 45 20  THEN rowId ELSE 
c2a0: 72 6f 77 49 64 20 45 4e 44 20 46 52 4f 4d 20 74  rowId END FROM t
c2b0: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
c2c0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
c2d0: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
c2e0: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
c2f0: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
c300: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
c310: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b     using System;
c320: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
c330: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
c340: 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65  .    using Eagle
c350: 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62  ._Containers.Pub
c360: 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  lic;....    name
c370: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
c380: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
c390: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
c3a0: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
c3b0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
c3c0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
c3d0: 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69  StringList GetLi
c3e0: 73 74 28 70 61 72 61 6d 73 20 73 74 72 69 6e 67  st(params string
c3f0: 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20  \[\] strings).. 
c400: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c410: 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72      StringList r
c420: 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69  esult = new Stri
c430: 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
c440: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
c450: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
c460: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
c470: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c480: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c490: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
c4a0: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
c4b0: 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22  TestProperties]"
c4c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
c4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
c4e0: 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d  nection.Open();.
c4f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
c500: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
c510: 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74  Module(new SQLit
c520: 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c  eModuleEnumerabl
c530: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
c540: 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73 74    "mod${id}", st
c550: 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20 20 20  rings));....    
c560: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
c570: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
c580: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
c590: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
c5a0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
c5b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c5c0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
c5d0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
c5e0: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
c5f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
c600: 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78  t.Add(command.Ex
c610: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e  ecuteNonQuery().
c620: 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20  ToString());..  
c630: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c640: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
c650: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
c660: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
c670: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
c680: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
c690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c6a0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
c6b0: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
c6c0: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
c6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c6e0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74  using (SQLiteDat
c6f0: 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64  aReader dataRead
c700: 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  er = command.Exe
c710: 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20  cuteReader()).. 
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c750: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 73      // NOTE: Mas
c760: 6b 20 6f 66 66 20 74 68 65 20 68 61 73 68 20 63  k off the hash c
c770: 6f 64 65 20 70 6f 72 74 69 6f 6e 20 62 65 63 61  ode portion beca
c780: 75 73 65 20 69 74 20 64 69 66 66 65 72 73 0d 0a  use it differs..
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7a0: 2f 2f 20 20 20 20 20 20 20 62 65 74 77 65 65 6e  //       between
c7b0: 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
c7c0: 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ons...          
c7d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c7e0: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 6d            long m
c7f0: 61 73 6b 20 3d 20 75 6e 63 68 65 63 6b 65 64 28  ask = unchecked(
c800: 28 6c 6f 6e 67 29 30 78 46 46 46 46 46 46 46 46  (long)0xFFFFFFFF
c810: 30 30 30 30 30 30 30 30 29 3b 0d 0a 0d 0a 20 20  00000000);....  
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
c830: 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e  ile (dataReader.
c840: 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
c850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c870: 73 75 6c 74 2e 41 64 64 28 28 64 61 74 61 52 65  sult.Add((dataRe
c880: 61 64 65 72 2e 47 65 74 49 6e 74 36 34 28 30 29  ader.GetInt64(0)
c890: 20 26 20 6d 61 73 6b 29 2e 54 6f 53 74 72 69 6e   & mask).ToStrin
c8a0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
c8b0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
c8c0: 41 64 64 28 28 64 61 74 61 52 65 61 64 65 72 2e  Add((dataReader.
c8d0: 47 65 74 49 6e 74 36 34 28 31 29 20 26 20 6d 61  GetInt64(1) & ma
c8e0: 73 6b 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  sk).ToString());
c8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c900: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c910: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c930: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c     connection.Cl
c940: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
c950: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c960: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
c970: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
c980: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
c990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c9d0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
c9e0: 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e  static void Main
c9f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
ca00: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
ca10: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
ca20: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..   
ca30: 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72   }..  }] true tr
ca40: 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20  ue true results 
ca50: 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73  errors [list Sys
ca60: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
ca70: 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d  dll Eagle.dll]].
ca80: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
ca90: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
caa0: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
cab0: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
cac0: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
cad0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
cae0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
caf0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
cb00: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
cb10: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
cb20: 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f  t${id} GetList o
cb30: 6e 65 20 6f 6e 65 20 74 77 6f 20 6f 6e 65 20 74  ne one two one t
cb40: 77 6f 20 74 77 6f 0d 0a 20 20 20 20 20 20 7d 20  wo two..      } 
cb50: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
cb60: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72  esult ""]}] [nor
cb70: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
cb80: 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c   $result]..} -cl
cb90: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
cba0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
cbb0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
cbc0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
cbd0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
cbe0: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
cbf0: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
cc00: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
cc10: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
cc20: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f  t monoBug28 mono
cc30: 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64  Crash211 command
cc40: 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
cc50: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
cc60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51  m.Data.SQLite SQ
cc70: 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65  LiteInterop\..de
cc80: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
cc90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
cca0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
ccb0: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
ccc0: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
ccd0: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e  egexp -result [n
cce0: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
ccf0: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
cd00: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
cd10: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
cd20: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 30  s#\d+ \{\} 0 \{0
cd30: 20 34 32 39 34 39 36 37 32 39 36 20 34 32 39 34   4294967296 4294
cd40: 39 36 37 32 39 36 5c 0d 0a 38 35 38 39 39 33 34  967296\..8589934
cd50: 35 39 32 20 38 35 38 39 39 33 34 35 39 32 20 31  592 8589934592 1
cd60: 32 38 38 34 39 30 31 38 38 38 20 31 32 38 38 34  2884901888 12884
cd70: 39 30 31 38 38 38 20 31 37 31 37 39 38 36 39 31  901888 171798691
cd80: 38 34 20 31 37 31 37 39 38 36 39 31 38 34 5c 0d  84 17179869184\.
cd90: 0a 32 31 34 37 34 38 33 36 34 38 30 20 32 31 34  .21474836480 214
cda0: 37 34 38 33 36 34 38 30 20 32 35 37 36 39 38 30  74836480 2576980
cdb0: 33 37 37 36 20 32 35 37 36 39 38 30 33 37 37 36  3776 25769803776
cdc0: 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \}$}]}....######
cdd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cde0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cdf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce10: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
ce20: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
ce30: 31 2e 31 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c  1.11 {IEnumerabl
ce40: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
ce50: 77 2f 6f 62 6a 65 63 74 20 69 64 65 6e 74 69 74  w/object identit
ce60: 79 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  y} -setup {..  s
ce70: 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62  et fileName vtab
ce80: 2d 31 2e 31 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64  -1.11.db..} -bod
ce90: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
cea0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
ceb0: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
cec0: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
ced0: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
cee0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
cef0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
cf00: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
cf10: 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20  et sql(1) { \.. 
cf20: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
cf30: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
cf40: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
cf50: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
cf60: 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(2) { \..    S
cf70: 45 4c 45 43 54 20 72 6f 77 49 64 2c 20 2a 20 46  ELECT rowId, * F
cf80: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
cf90: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
cfa0: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
cfb0: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
cfc0: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
cfd0: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
cfe0: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
cff0: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
d000: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
d010: 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ite;..    using 
d020: 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72  Eagle._Container
d030: 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20  s.Public;....   
d040: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
d050: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
d060: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
d070: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
d080: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
d090: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d0a0: 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  atic StringList 
d0b0: 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73  GetList(params s
d0c0: 74 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67  tring\[\] string
d0d0: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
d0e0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c           StringL
d0f0: 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ist result = new
d100: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
d110: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
d120: 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
d130: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
d140: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
d150: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
d160: 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
d170: 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
d180: 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74  ;[getTestPropert
d190: 69 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20  ies]"))..       
d1a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d1b0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65    connection.Ope
d1c0: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
d1d0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43      connection.C
d1e0: 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20  reateModule(new 
d1f0: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d  SQLiteModuleEnum
d200: 65 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  erable(..       
d210: 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d         "mod${id}
d220: 22 2c 20 73 74 72 69 6e 67 73 2c 20 74 72 75 65  ", strings, true
d230: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
d240: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
d250: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
d260: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
d270: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
d280: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d290: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
d2a0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
d2b0: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
d2c0: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
d2d0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78        command.Ex
d2e0: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
d2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d300: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
d310: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
d320: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
d330: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
d340: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
d350: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d360: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
d370: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
d380: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
d390: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
d3a0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
d3b0: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
d3c0: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
d3d0: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
d3e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d3f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d400: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
d410: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
d430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d440: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64      result.Add(d
d450: 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54  ataReader\[0\].T
d460: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
d470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d480: 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65  esult.Add(dataRe
d490: 61 64 65 72 5c 5b 31 5c 5d 2e 54 6f 53 74 72 69  ader\[1\].ToStri
d4a0: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
d4b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d4c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d4d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d4e0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
d4f0: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
d500: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d510: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
d520: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
d530: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
d590: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
d5a0: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
d5b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
d5c0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
d5d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d5e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
d5f0: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
d600: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
d610: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
d620: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
d630: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
d640: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
d650: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
d660: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
d670: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
d680: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
d690: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
d6a0: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
d6b0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
d6c0: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
d6d0: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
d6e0: 4c 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72  List one two thr
d6f0: 65 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20  ee 4 5.0..      
d700: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
d710: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e   result ""]}] [n
d720: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
d730: 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d  lt $result]..} -
d740: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
d750: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
d760: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
d770: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63  omplain result c
d780: 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ode results erro
d790: 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63  rs sql dataSourc
d7a0: 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  e id fileName..}
d7b0: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
d7c0: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
d7d0: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f  ect monoBug28 mo
d7e0: 6e 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61  noCrash211 comma
d7f0: 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65  nd.sql\..compile
d800: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
d810: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite 
d820: 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a  SQLiteInterop\..
d830: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
d840: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
d850: 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  e.INTEROP_VIRTUA
d860: 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43  L_TABLE compileC
d870: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d  Sharp} -match \.
d880: 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20  .regexp -result 
d890: 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65  [normalizeVtabRe
d8a0: 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74  sult {^Ok\..Syst
d8b0: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
d8c0: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
d8d0: 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c  lts#\d+ \{\} 0 \
d8e0: 7b 2d 3f 5c 64 2b 20 6f 6e 65 20 2d 3f 5c 64 2b  {-?\d+ one -?\d+
d8f0: 20 74 77 6f 20 2d 3f 5c 64 2b 5c 0d 0a 74 68 72   two -?\d+\..thr
d900: 65 65 20 2d 3f 5c 64 2b 20 34 20 2d 3f 5c 64 2b  ee -?\d+ 4 -?\d+
d910: 20 35 5c 2e 30 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23   5\.0\}$}]}....#
d920: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
d970: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
d980: 76 74 61 62 2d 31 2e 31 32 20 7b 53 51 4c 69 74  vtab-1.12 {SQLit
d990: 65 49 6e 64 65 78 20 6d 61 6e 61 67 65 64 2d 74  eIndex managed-t
d9a0: 6f 2d 6e 61 74 69 76 65 2d 74 6f 2d 6d 61 6e 61  o-native-to-mana
d9b0: 67 65 64 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ged} -setup {.. 
d9c0: 20 73 65 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74   set nConstraint
d9d0: 20 33 3b 20 73 65 74 20 6e 4f 72 64 65 72 42 79   3; set nOrderBy
d9e0: 20 33 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20   3..} -body {.. 
d9f0: 20 73 65 74 20 69 6e 64 65 78 28 31 29 20 5b 6f   set index(1) [o
da00: 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c  bject create -al
da10: 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  ias -flags +NonP
da20: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53  ublic \..      S
da30: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
da40: 65 2e 53 51 4c 69 74 65 49 6e 64 65 78 20 24 6e  e.SQLiteIndex $n
da50: 43 6f 6e 73 74 72 61 69 6e 74 20 24 6e 4f 72 64  Constraint $nOrd
da60: 65 72 42 79 5d 0d 0a 0d 0a 20 20 66 6f 72 20 7b  erBy]....  for {
da70: 73 65 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20  set iConstraint 
da80: 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74  0} {$iConstraint
da90: 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d   < $nConstraint}
daa0: 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74 72 61 69   {incr iConstrai
dab0: 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 63  nt} {..    set c
dac0: 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 5b 6f 62  onstraint(1) [ob
dad0: 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69  ject create -ali
dae0: 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  as -flags +NonPu
daf0: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..        
db00: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
db10: 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  te.SQLiteIndexCo
db20: 6e 73 74 72 61 69 6e 74 20 30 20 30 20 30 20 30  nstraint 0 0 0 0
db30: 5d 0d 0a 0d 0a 20 20 20 20 24 69 6e 64 65 78 28  ]....    $index(
db40: 31 29 20 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72  1) Inputs.Constr
db50: 61 69 6e 74 73 2e 53 65 74 56 61 6c 75 65 20 24  aints.SetValue $
db60: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 24 69  constraint(1) $i
db70: 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 0d 0a 20 20  Constraint....  
db80: 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 28 31 29    $constraint(1)
db90: 20 69 43 6f 6c 75 6d 6e 20 5b 65 78 70 72 20 7b   iColumn [expr {
dba0: 69 6e 74 28 30 78 30 31 32 33 34 35 36 37 20 2b  int(0x01234567 +
dbb0: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 29 7d 5d   $iConstraint)}]
dbc0: 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69 6e  ..    $constrain
dbd0: 74 28 31 29 20 6f 70 20 5b 65 78 70 72 20 7b 30  t(1) op [expr {0
dbe0: 78 46 46 20 2d 20 24 69 43 6f 6e 73 74 72 61 69  xFF - $iConstrai
dbf0: 6e 74 7d 5d 0d 0a 20 20 20 20 24 63 6f 6e 73 74  nt}]..    $const
dc00: 72 61 69 6e 74 28 31 29 20 75 73 61 62 6c 65 20  raint(1) usable 
dc10: 5b 65 78 70 72 20 7b 30 78 43 43 20 2b 20 24 69  [expr {0xCC + $i
dc20: 43 6f 6e 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20  Constraint}]..  
dc30: 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 28 31 29    $constraint(1)
dc40: 20 69 54 65 72 6d 4f 66 66 73 65 74 20 5b 65 78   iTermOffset [ex
dc50: 70 72 20 7b 69 6e 74 28 30 78 38 39 41 42 43 44  pr {int(0x89ABCD
dc60: 45 46 20 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e  EF + $iConstrain
dc70: 74 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66  t)}]..  }....  f
dc80: 6f 72 20 7b 73 65 74 20 69 4f 72 64 65 72 42 79  or {set iOrderBy
dc90: 20 30 7d 20 7b 24 69 4f 72 64 65 72 42 79 20 3c   0} {$iOrderBy <
dca0: 20 24 6e 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63   $nOrderBy} {inc
dcb0: 72 20 69 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20  r iOrderBy} {.. 
dcc0: 20 20 20 73 65 74 20 6f 72 64 65 72 42 79 28 31     set orderBy(1
dcd0: 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65  ) [object create
dce0: 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b   -alias -flags +
dcf0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
dd00: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
dd10: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e  .SQLite.SQLiteIn
dd20: 64 65 78 4f 72 64 65 72 42 79 20 30 20 30 5d 0d  dexOrderBy 0 0].
dd30: 0a 0d 0a 20 20 20 20 24 69 6e 64 65 78 28 31 29  ...    $index(1)
dd40: 20 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73   Inputs.OrderBys
dd50: 2e 53 65 74 56 61 6c 75 65 20 24 6f 72 64 65 72  .SetValue $order
dd60: 42 79 28 31 29 20 24 69 4f 72 64 65 72 42 79 0d  By(1) $iOrderBy.
dd70: 0a 0d 0a 20 20 20 20 24 6f 72 64 65 72 42 79 28  ...    $orderBy(
dd80: 31 29 20 69 43 6f 6c 75 6d 6e 20 5b 65 78 70 72  1) iColumn [expr
dd90: 20 7b 69 6e 74 28 30 78 32 33 30 31 36 37 34 35   {int(0x23016745
dda0: 20 2b 20 24 69 4f 72 64 65 72 42 79 29 7d 5d 0d   + $iOrderBy)}].
ddb0: 0a 20 20 20 20 24 6f 72 64 65 72 42 79 28 31 29  .    $orderBy(1)
ddc0: 20 64 65 73 63 20 5b 65 78 70 72 20 7b 30 78 46   desc [expr {0xF
ddd0: 46 20 2d 20 24 69 4f 72 64 65 72 42 79 7d 5d 0d  F - $iOrderBy}].
dde0: 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73  .  }....  for {s
ddf0: 65 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 30  et iConstraint 0
de00: 7d 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74 20  } {$iConstraint 
de10: 3c 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20  < $nConstraint} 
de20: 7b 69 6e 63 72 20 69 43 6f 6e 73 74 72 61 69 6e  {incr iConstrain
de30: 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f  t} {..    set co
de40: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31 29  nstraintUsage(1)
de50: 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20   [object create 
de60: 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e  -alias -flags +N
de70: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
de80: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
de90: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64  SQLite.SQLiteInd
dea0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
deb0: 65 20 30 20 30 5d 0d 0a 0d 0a 20 20 20 20 24 69  e 0 0]....    $i
dec0: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
ded0: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
dee0: 2e 53 65 74 56 61 6c 75 65 20 24 63 6f 6e 73 74  .SetValue $const
def0: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 5c 0d  raintUsage(1) \.
df00: 0a 20 20 20 20 20 20 20 20 24 69 43 6f 6e 73 74  .        $iConst
df10: 72 61 69 6e 74 0d 0a 0d 0a 20 20 20 20 24 63 6f  raint....    $co
df20: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31 29  nstraintUsage(1)
df30: 20 61 72 67 76 49 6e 64 65 78 20 5b 65 78 70 72   argvIndex [expr
df40: 20 7b 69 6e 74 28 30 78 41 42 38 39 45 46 43 44   {int(0xAB89EFCD
df50: 20 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 29   + $iConstraint)
df60: 7d 5d 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61  }]..    $constra
df70: 69 6e 74 55 73 61 67 65 28 31 29 20 6f 6d 69 74  intUsage(1) omit
df80: 20 5b 65 78 70 72 20 7b 30 78 43 43 20 2b 20 24   [expr {0xCC + $
df90: 69 43 6f 6e 73 74 72 61 69 6e 74 7d 5d 0d 0a 20  iConstraint}].. 
dfa0: 20 7d 0d 0a 0d 0a 20 20 24 69 6e 64 65 78 28 31   }....  $index(1
dfb0: 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 4e  ) Outputs.IndexN
dfc0: 75 6d 62 65 72 20 5b 65 78 70 72 20 7b 69 6e 74  umber [expr {int
dfd0: 28 30 78 41 41 41 41 41 41 41 41 29 7d 5d 0d 0a  (0xAAAAAAAA)}]..
dfe0: 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70    $index(1) Outp
dff0: 75 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 20  uts.IndexString 
e000: 22 5c 78 30 31 74 65 73 74 20 69 6e 64 65 78 20  "\x01test index 
e010: 73 74 72 69 6e 67 2e 5c 78 46 46 22 0d 0a 20 20  string.\xFF"..  
e020: 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74  $index(1) Output
e030: 73 2e 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65  s.NeedToFreeInde
e040: 78 53 74 72 69 6e 67 20 5b 65 78 70 72 20 7b 69  xString [expr {i
e050: 6e 74 28 30 78 35 35 35 35 35 35 35 35 29 7d 5d  nt(0x55555555)}]
e060: 0d 0a 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75  ..  $index(1) Ou
e070: 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e  tputs.OrderByCon
e080: 73 75 6d 65 64 20 5b 65 78 70 72 20 7b 69 6e 74  sumed [expr {int
e090: 28 30 78 33 33 33 33 33 33 33 33 29 7d 5d 0d 0a  (0x33333333)}]..
e0a0: 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70    $index(1) Outp
e0b0: 75 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f 73  uts.EstimatedCos
e0c0: 74 20 31 2e 30 0d 0a 0d 0a 20 20 69 66 20 7b 5b  t 1.0....  if {[
e0d0: 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74  $index(1) Output
e0e0: 73 2e 43 61 6e 55 73 65 45 73 74 69 6d 61 74 65  s.CanUseEstimate
e0f0: 64 52 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  dRows]} then {..
e100: 20 20 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75      $index(1) Ou
e110: 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 52  tputs.EstimatedR
e120: 6f 77 73 20 5b 65 78 70 72 20 7b 69 6e 74 28 30  ows [expr {int(0
e130: 78 43 43 43 43 43 43 43 43 29 7d 5d 0d 0a 20 20  xCCCCCCCC)}]..  
e140: 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64  }....  if {[$ind
e150: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43 61  ex(1) Outputs.Ca
e160: 6e 55 73 65 49 6e 64 65 78 46 6c 61 67 73 5d 7d  nUseIndexFlags]}
e170: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 24 69 6e   then {..    $in
e180: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 49  dex(1) Outputs.I
e190: 6e 64 65 78 46 6c 61 67 73 20 5b 65 78 70 72 20  ndexFlags [expr 
e1a0: 7b 69 6e 74 28 30 78 45 45 45 45 45 45 45 45 29  {int(0xEEEEEEEE)
e1b0: 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20  }]..  }....  if 
e1c0: 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70  {[$index(1) Outp
e1d0: 75 74 73 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e  uts.CanUseColumn
e1e0: 73 55 73 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  sUsed]} then {..
e1f0: 20 20 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75      $index(1) Ou
e200: 74 70 75 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65  tputs.ColumnsUse
e210: 64 20 5b 65 78 70 72 20 7b 77 69 64 65 28 30 78  d [expr {wide(0x
e220: 42 41 44 43 30 46 46 45 45 38 37 35 36 32 31 41  BADC0FFEE875621A
e230: 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  )}]..  }....  se
e240: 74 20 70 49 6e 64 65 78 28 31 29 20 5b 6f 62 6a  t pIndex(1) [obj
e250: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61  ect invoke -crea
e260: 74 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  te -flags +NonPu
e270: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79  blic \..      Sy
e280: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
e290: 2e 53 51 4c 69 74 65 49 6e 64 65 78 20 41 6c 6c  .SQLiteIndex All
e2a0: 6f 63 61 74 65 41 6e 64 49 6e 69 74 69 61 6c 69  ocateAndInitiali
e2b0: 7a 65 4e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20  zeNative \..    
e2c0: 20 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 20 24    $nConstraint $
e2d0: 6e 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 6f  nOrderBy]....  o
e2e0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
e2f0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
e300: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
e310: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
e320: 65 49 6e 64 65 78 20 54 6f 49 6e 74 50 74 72 20  eIndex ToIntPtr 
e330: 24 69 6e 64 65 78 28 31 29 20 24 70 49 6e 64 65  $index(1) $pInde
e340: 78 28 31 29 20 74 72 75 65 0d 0a 0d 0a 20 20 73  x(1) true....  s
e350: 65 74 20 69 6e 64 65 78 28 32 29 20 5b 6f 62 6a  et index(2) [obj
e360: 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61  ect create -alia
e370: 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  s -flags +NonPub
e380: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73  lic \..      Sys
e390: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
e3a0: 53 51 4c 69 74 65 49 6e 64 65 78 20 24 6e 43 6f  SQLiteIndex $nCo
e3b0: 6e 73 74 72 61 69 6e 74 20 24 6e 4f 72 64 65 72  nstraint $nOrder
e3c0: 42 79 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20  By]....  object 
e3d0: 69 6e 76 6f 6b 65 20 2d 61 6c 69 61 73 20 2d 66  invoke -alias -f
e3e0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
e3f0: 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  \..      System.
e400: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
e410: 74 65 49 6e 64 65 78 20 46 72 6f 6d 49 6e 74 50  teIndex FromIntP
e420: 74 72 20 24 70 49 6e 64 65 78 28 31 29 20 74 72  tr $pIndex(1) tr
e430: 75 65 20 69 6e 64 65 78 28 32 29 0d 0a 0d 0a 20  ue index(2).... 
e440: 20 66 6f 72 20 7b 73 65 74 20 69 43 6f 6e 73 74   for {set iConst
e450: 72 61 69 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73  raint 0} {$iCons
e460: 74 72 61 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74  traint < $nConst
e470: 72 61 69 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f  raint} {incr iCo
e480: 6e 73 74 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20  nstraint} {..   
e490: 20 73 65 74 20 63 6f 6e 73 74 72 61 69 6e 74 28   set constraint(
e4a0: 31 29 20 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d  1) [$index(1) \.
e4b0: 0a 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20  .        -alias 
e4c0: 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
e4d0: 74 73 2e 47 65 74 56 61 6c 75 65 20 24 69 43 6f  ts.GetValue $iCo
e4e0: 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20  nstraint]....   
e4f0: 20 73 65 74 20 63 6f 6e 73 74 72 61 69 6e 74 28   set constraint(
e500: 32 29 20 5b 24 69 6e 64 65 78 28 32 29 20 5c 0d  2) [$index(2) \.
e510: 0a 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20  .        -alias 
e520: 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
e530: 74 73 2e 47 65 74 56 61 6c 75 65 20 24 69 43 6f  ts.GetValue $iCo
e540: 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20  nstraint]....   
e550: 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e   if {[$constrain
e560: 74 28 31 29 20 69 43 6f 6c 75 6d 6e 5d 20 21 3d  t(1) iColumn] !=
e570: 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 32 29   [$constraint(2)
e580: 20 69 43 6f 6c 75 6d 6e 5d 7d 20 74 68 65 6e 20   iColumn]} then 
e590: 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b  {..      error [
e5a0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
e5b0: 20 20 20 20 20 20 20 20 22 69 43 6f 6c 75 6d 6e          "iColumn
e5c0: 20 61 74 20 69 6e 64 65 78 20 22 20 24 69 43 6f   at index " $iCo
e5d0: 6e 73 74 72 61 69 6e 74 20 22 20 64 6f 65 73 20  nstraint " does 
e5e0: 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20  not match"]..   
e5f0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24   }....    if {[$
e600: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 6f 70  constraint(1) op
e610: 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e  ] != [$constrain
e620: 74 28 32 29 20 6f 70 5d 7d 20 74 68 65 6e 20 7b  t(2) op]} then {
e630: 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61  ..      error [a
e640: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..   
e650: 20 20 20 20 20 20 20 22 6f 70 20 61 74 20 69 6e         "op at in
e660: 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69  dex " $iConstrai
e670: 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61  nt " does not ma
e680: 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tch"]..    }....
e690: 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72      if {[$constr
e6a0: 61 69 6e 74 28 31 29 20 75 73 61 62 6c 65 5d 20  aint(1) usable] 
e6b0: 21 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28  != [$constraint(
e6c0: 32 29 20 75 73 61 62 6c 65 5d 7d 20 74 68 65 6e  2) usable]} then
e6d0: 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20   {..      error 
e6e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
e6f0: 20 20 20 20 20 20 20 20 20 22 75 73 61 62 6c 65           "usable
e700: 20 61 74 20 69 6e 64 65 78 20 22 20 24 69 43 6f   at index " $iCo
e710: 6e 73 74 72 61 69 6e 74 20 22 20 64 6f 65 73 20  nstraint " does 
e720: 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20  not match"]..   
e730: 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24   }....    if {[$
e740: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 69 54  constraint(1) iT
e750: 65 72 6d 4f 66 66 73 65 74 5d 20 21 3d 20 5b 24  ermOffset] != [$
e760: 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 69 54  constraint(2) iT
e770: 65 72 6d 4f 66 66 73 65 74 5d 7d 20 74 68 65 6e  ermOffset]} then
e780: 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20   {..      error 
e790: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
e7a0: 20 20 20 20 20 20 20 20 20 22 69 54 65 72 6d 4f           "iTermO
e7b0: 66 66 73 65 74 20 61 74 20 69 6e 64 65 78 20 22  ffset at index "
e7c0: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20   $iConstraint " 
e7d0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
e7e0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
e7f0: 20 20 66 6f 72 20 7b 73 65 74 20 69 4f 72 64 65    for {set iOrde
e800: 72 42 79 20 30 7d 20 7b 24 69 4f 72 64 65 72 42  rBy 0} {$iOrderB
e810: 79 20 3c 20 24 6e 4f 72 64 65 72 42 79 7d 20 7b  y < $nOrderBy} {
e820: 69 6e 63 72 20 69 4f 72 64 65 72 42 79 7d 20 7b  incr iOrderBy} {
e830: 0d 0a 20 20 20 20 73 65 74 20 6f 72 64 65 72 42  ..    set orderB
e840: 79 28 31 29 20 5b 24 69 6e 64 65 78 28 31 29 20  y(1) [$index(1) 
e850: 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61 6c 69 61  \..        -alia
e860: 73 20 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79  s Inputs.OrderBy
e870: 73 2e 47 65 74 56 61 6c 75 65 20 24 69 4f 72 64  s.GetValue $iOrd
e880: 65 72 42 79 5d 0d 0a 0d 0a 20 20 20 20 73 65 74  erBy]....    set
e890: 20 6f 72 64 65 72 42 79 28 32 29 20 5b 24 69 6e   orderBy(2) [$in
e8a0: 64 65 78 28 32 29 20 5c 0d 0a 20 20 20 20 20 20  dex(2) \..      
e8b0: 20 20 2d 61 6c 69 61 73 20 49 6e 70 75 74 73 2e    -alias Inputs.
e8c0: 4f 72 64 65 72 42 79 73 2e 47 65 74 56 61 6c 75  OrderBys.GetValu
e8d0: 65 20 24 69 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a  e $iOrderBy]....
e8e0: 20 20 20 20 69 66 20 7b 5b 24 6f 72 64 65 72 42      if {[$orderB
e8f0: 79 28 31 29 20 69 43 6f 6c 75 6d 6e 5d 20 21 3d  y(1) iColumn] !=
e900: 20 5b 24 6f 72 64 65 72 42 79 28 32 29 20 69 43   [$orderBy(2) iC
e910: 6f 6c 75 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a  olumn]} then {..
e920: 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70        error [app
e930: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
e940: 20 20 20 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74       "iColumn at
e950: 20 69 6e 64 65 78 20 22 20 24 69 4f 72 64 65 72   index " $iOrder
e960: 42 79 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61  By " does not ma
e970: 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tch"]..    }....
e980: 20 20 20 20 69 66 20 7b 5b 24 6f 72 64 65 72 42      if {[$orderB
e990: 79 28 31 29 20 64 65 73 63 5d 20 21 3d 20 5b 24  y(1) desc] != [$
e9a0: 6f 72 64 65 72 42 79 28 32 29 20 64 65 73 63 5d  orderBy(2) desc]
e9b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
e9c0: 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67  error [appendArg
e9d0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
e9e0: 64 65 73 63 20 61 74 20 69 6e 64 65 78 20 22 20  desc at index " 
e9f0: 24 69 4f 72 64 65 72 42 79 20 22 20 64 6f 65 73  $iOrderBy " does
ea00: 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20   not match"]..  
ea10: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f    }..  }....  fo
ea20: 72 20 7b 73 65 74 20 69 43 6f 6e 73 74 72 61 69  r {set iConstrai
ea30: 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61  nt 0} {$iConstra
ea40: 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69  int < $nConstrai
ea50: 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74  nt} {incr iConst
ea60: 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65  raint} {..    se
ea70: 74 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  t constraintUsag
ea80: 65 28 31 29 20 5b 24 69 6e 64 65 78 28 31 29 20  e(1) [$index(1) 
ea90: 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61 6c 69 61  \..        -alia
eaa0: 73 20 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  s Outputs.Constr
eab0: 61 69 6e 74 55 73 61 67 65 73 2e 47 65 74 56 61  aintUsages.GetVa
eac0: 6c 75 65 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  lue $iConstraint
ead0: 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e  ]....    set con
eae0: 73 74 72 61 69 6e 74 55 73 61 67 65 28 32 29 20  straintUsage(2) 
eaf0: 5b 24 69 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20  [$index(2) \..  
eb00: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 4f 75 74        -alias Out
eb10: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
eb20: 73 61 67 65 73 2e 47 65 74 56 61 6c 75 65 20 24  sages.GetValue $
eb30: 69 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a  iConstraint]....
eb40: 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72      if {[$constr
eb50: 61 69 6e 74 55 73 61 67 65 28 31 29 20 61 72 67  aintUsage(1) arg
eb60: 76 49 6e 64 65 78 5d 20 21 3d 20 5c 0d 0a 20 20  vIndex] != \..  
eb70: 20 20 20 20 20 20 5b 24 63 6f 6e 73 74 72 61 69        [$constrai
eb80: 6e 74 55 73 61 67 65 28 32 29 20 61 72 67 76 49  ntUsage(2) argvI
eb90: 6e 64 65 78 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ndex]} then {.. 
eba0: 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
ebb0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
ebc0: 20 20 20 20 22 61 72 67 76 49 6e 64 65 78 20 61      "argvIndex a
ebd0: 74 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e 73  t index " $iCons
ebe0: 74 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f  traint " does no
ebf0: 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d  t match"]..    }
ec00: 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f  ....    if {[$co
ec10: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31 29  nstraintUsage(1)
ec20: 20 6f 6d 69 74 5d 20 21 3d 20 5b 24 63 6f 6e 73   omit] != [$cons
ec30: 74 72 61 69 6e 74 55 73 61 67 65 28 32 29 20 6f  traintUsage(2) o
ec40: 6d 69 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  mit]} then {..  
ec50: 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e      error [appen
ec60: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
ec70: 20 20 20 22 6f 6d 69 74 20 61 74 20 69 6e 64 65     "omit at inde
ec80: 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  x " $iConstraint
ec90: 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63   " does not matc
eca0: 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  h"]..    }..  }.
ecb0: 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78  ...  if {[$index
ecc0: 28 31 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65  (1) Outputs.Inde
ecd0: 78 4e 75 6d 62 65 72 5d 20 21 3d 20 5c 0d 0a 20  xNumber] != \.. 
ece0: 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20       [$index(2) 
ecf0: 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d  Outputs.IndexNum
ed00: 62 65 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ber]} then {..  
ed10: 20 20 65 72 72 6f 72 20 22 49 6e 64 65 78 4e 75    error "IndexNu
ed20: 6d 62 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61  mber does not ma
ed30: 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69  tch"..  }....  i
ed40: 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75  f {[$index(1) Ou
ed50: 74 70 75 74 73 2e 49 6e 64 65 78 53 74 72 69 6e  tputs.IndexStrin
ed60: 67 5d 20 6e 65 20 5c 0d 0a 20 20 20 20 20 20 5b  g] ne \..      [
ed70: 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74  $index(2) Output
ed80: 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 5d 7d 20  s.IndexString]} 
ed90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f  then {..    erro
eda0: 72 20 22 49 6e 64 65 78 53 74 72 69 6e 67 20 64  r "IndexString d
edb0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a  oes not match"..
edc0: 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69    }....  if {[$i
edd0: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
ede0: 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53  NeedToFreeIndexS
edf0: 74 72 69 6e 67 5d 20 21 3d 20 5c 0d 0a 20 20 20  tring] != \..   
ee00: 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75     [$index(2) Ou
ee10: 74 70 75 74 73 2e 4e 65 65 64 54 6f 46 72 65 65  tputs.NeedToFree
ee20: 49 6e 64 65 78 53 74 72 69 6e 67 5d 7d 20 74 68  IndexString]} th
ee30: 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20  en {..    error 
ee40: 22 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78  "NeedToFreeIndex
ee50: 53 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20  String does not 
ee60: 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20  match"..  }.... 
ee70: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
ee80: 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43  Outputs.OrderByC
ee90: 6f 6e 73 75 6d 65 64 5d 20 21 3d 20 5c 0d 0a 20  onsumed] != \.. 
eea0: 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20       [$index(2) 
eeb0: 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79 43  Outputs.OrderByC
eec0: 6f 6e 73 75 6d 65 64 5d 7d 20 74 68 65 6e 20 7b  onsumed]} then {
eed0: 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 4f 72 64  ..    error "Ord
eee0: 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 64 6f 65  erByConsumed doe
eef0: 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20  s not match"..  
ef00: 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64  }....  if {[$ind
ef10: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 45 73  ex(1) Outputs.Es
ef20: 74 69 6d 61 74 65 64 43 6f 73 74 5d 20 21 3d 20  timatedCost] != 
ef30: 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65 78  \..      [$index
ef40: 28 32 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69  (2) Outputs.Esti
ef50: 6d 61 74 65 64 43 6f 73 74 5d 7d 20 74 68 65 6e  matedCost]} then
ef60: 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 45   {..    error "E
ef70: 73 74 69 6d 61 74 65 64 43 6f 73 74 20 64 6f 65  stimatedCost doe
ef80: 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20  s not match"..  
ef90: 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64  }....  if {[$ind
efa0: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43 61  ex(1) Outputs.Ca
efb0: 6e 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f 77  nUseEstimatedRow
efc0: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b  s] && \..      [
efd0: 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74  $index(2) Output
efe0: 73 2e 43 61 6e 55 73 65 45 73 74 69 6d 61 74 65  s.CanUseEstimate
eff0: 64 52 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  dRows]} then {..
f000: 20 20 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28      if {[$index(
f010: 31 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d  1) Outputs.Estim
f020: 61 74 65 64 52 6f 77 73 5d 20 21 3d 20 5c 0d 0a  atedRows] != \..
f030: 20 20 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28          [$index(
f040: 32 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d  2) Outputs.Estim
f050: 61 74 65 64 52 6f 77 73 5d 7d 20 74 68 65 6e 20  atedRows]} then 
f060: 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 22  {..      error "
f070: 45 73 74 69 6d 61 74 65 64 52 6f 77 73 20 64 6f  EstimatedRows do
f080: 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20  es not match".. 
f090: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 74 70 75 74     }....    tput
f0a0: 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  s $test_channel 
f0b0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 65 64 20 45 73  "---- checked Es
f0c0: 74 69 6d 61 74 65 64 52 6f 77 73 20 70 72 6f 70  timatedRows prop
f0d0: 65 72 74 79 5c 6e 22 0d 0a 20 20 7d 0d 0a 0d 0a  erty\n"..  }....
f0e0: 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29    if {[$index(1)
f0f0: 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 49   Outputs.CanUseI
f100: 6e 64 65 78 46 6c 61 67 73 5d 20 26 26 20 5c 0d  ndexFlags] && \.
f110: 0a 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32  .      [$index(2
f120: 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65  ) Outputs.CanUse
f130: 49 6e 64 65 78 46 6c 61 67 73 5d 7d 20 74 68 65  IndexFlags]} the
f140: 6e 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 24 69  n {..    if {[$i
f150: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
f160: 49 6e 64 65 78 46 6c 61 67 73 5d 20 21 3d 20 5c  IndexFlags] != \
f170: 0d 0a 20 20 20 20 20 20 20 20 5b 24 69 6e 64 65  ..        [$inde
f180: 78 28 32 29 20 4f 75 74 70 75 74 73 2e 49 6e 64  x(2) Outputs.Ind
f190: 65 78 46 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b  exFlags]} then {
f1a0: 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 22 49  ..      error "I
f1b0: 6e 64 65 78 46 6c 61 67 73 20 64 6f 65 73 20 6e  ndexFlags does n
f1c0: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 20 20 7d  ot match"..    }
f1d0: 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24 74  ....    tputs $t
f1e0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  est_channel "---
f1f0: 2d 20 63 68 65 63 6b 65 64 20 49 6e 64 65 78 46  - checked IndexF
f200: 6c 61 67 73 20 70 72 6f 70 65 72 74 79 5c 6e 22  lags property\n"
f210: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b  ..  }....  if {[
f220: 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74  $index(1) Output
f230: 73 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55  s.CanUseColumnsU
f240: 73 65 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  sed] && \..     
f250: 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70   [$index(2) Outp
f260: 75 74 73 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e  uts.CanUseColumn
f270: 73 55 73 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  sUsed]} then {..
f280: 20 20 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28      if {[$index(
f290: 31 29 20 4f 75 74 70 75 74 73 2e 43 6f 6c 75 6d  1) Outputs.Colum
f2a0: 6e 73 55 73 65 64 5d 20 21 3d 20 5c 0d 0a 20 20  nsUsed] != \..  
f2b0: 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29        [$index(2)
f2c0: 20 4f 75 74 70 75 74 73 2e 43 6f 6c 75 6d 6e 73   Outputs.Columns
f2d0: 55 73 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Used]} then {.. 
f2e0: 20 20 20 20 20 65 72 72 6f 72 20 22 43 6f 6c 75       error "Colu
f2f0: 6d 6e 73 55 73 65 64 20 64 6f 65 73 20 6e 6f 74  mnsUsed does not
f300: 20 6d 61 74 63 68 22 0d 0a 20 20 20 20 7d 0d 0a   match"..    }..
f310: 0d 0a 20 20 20 20 74 70 75 74 73 20 24 74 65 73  ..    tputs $tes
f320: 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20  t_channel "---- 
f330: 63 68 65 63 6b 65 64 20 43 6f 6c 75 6d 6e 73 55  checked ColumnsU
f340: 73 65 64 20 70 72 6f 70 65 72 74 79 5c 6e 22 0d  sed property\n".
f350: 0a 20 20 7d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  .  }..} -cleanup
f360: 20 7b 0d 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20   {..  catch {.. 
f370: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
f380: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
f390: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79  ic \..        Sy
f3a0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f3b0: 2e 53 51 4c 69 74 65 49 6e 64 65 78 20 46 72 65  .SQLiteIndex Fre
f3c0: 65 4e 61 74 69 76 65 20 24 70 49 6e 64 65 78 28  eNative $pIndex(
f3d0: 31 29 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73  1)..  }....  uns
f3e0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63  et -nocomplain c
f3f0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a  onstraintUsage..
f400: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
f410: 61 69 6e 20 6f 72 64 65 72 42 79 20 6e 4f 72 64  ain orderBy nOrd
f420: 65 72 42 79 20 69 4f 72 64 65 72 42 79 0d 0a 20  erBy iOrderBy.. 
f430: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
f440: 69 6e 20 63 6f 6e 73 74 72 61 69 6e 74 20 6e 43  in constraint nC
f450: 6f 6e 73 74 72 61 69 6e 74 20 69 43 6f 6e 73 74  onstraint iConst
f460: 72 61 69 6e 74 0d 0a 20 20 75 6e 73 65 74 20 2d  raint..  unset -
f470: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 49 6e 64 65  nocomplain pInde
f480: 78 20 69 6e 64 65 78 0d 0a 7d 20 2d 63 6f 6e 73  x index..} -cons
f490: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
f4a0: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
f4b0: 6e 6f 42 75 67 32 31 31 20 53 51 4c 69 74 65 20  noBug211 SQLite 
f4c0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
f4d0: 74 65 5c 0d 0a 53 51 4c 69 74 65 49 6e 74 65 72  te\..SQLiteInter
f4e0: 6f 70 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  op defineConstan
f4f0: 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
f500: 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52  Lite.INTEROP_VIR
f510: 54 55 41 4c 5f 54 41 42 4c 45 7d 20 5c 0d 0a 2d  TUAL_TABLE} \..-
f520: 72 65 73 75 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23 23  result {}}....##
f530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f570: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
f580: 0a 72 65 6e 61 6d 65 20 6e 6f 72 6d 61 6c 69 7a  .rename normaliz
f590: 65 56 74 61 62 52 65 73 75 6c 74 20 22 22 0d 0a  eVtabResult ""..
f5a0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
f5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5f0: 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69 74 65 54 65  #....runSQLiteTe
f600: 73 74 45 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 54  stEpilogue..runT
f610: 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a           estEpilogue..