System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 12d14ac20b929828c88c4685111aa066096dcd14:


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 5c 0d 0a 64 65 66 69  ta.SQLite\..defi
0d70: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
0d80: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
0d90: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
0da0: 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  BLE compileCShar
0db0: 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67  p} -match \..reg
0dc0: 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72  exp -result [nor
0dd0: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
0de0: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
0df0: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
0e00: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
0e10: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 24  \d+ \{\} 0 \{\}$
0e20: 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  }]}....#########
0e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73  ######....runTes
0e80: 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 32  t {test vtab-1.2
0e90: 2e 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20  .1 {IEnumerable 
0ea0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d  virtual table} -
0eb0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
0ec0: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 32  ileName vtab-1.2
0ed0: 2e 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b  .1.db..} -body {
0ee0: 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65  ..  set id [obje
0ef0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
0f00: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
0f10: 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64  NextId]..  set d
0f20: 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20  ataSource [file 
0f30: 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73  join [getDatabas
0f40: 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c  eDirectory] $fil
0f50: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20  eName]....  set 
0f60: 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(1) { \..    
0f70: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0f80: 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e  ABLE t${id} USIN
0f90: 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20  G mod${id}; \.. 
0fa0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
0fb0: 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  2) { \..    SELE
0fc0: 43 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d  CT * FROM t${id}
0fd0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
0fe0: 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20  t sql(3) { \..  
0ff0: 20 20 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20    UPDATE t${id} 
1000: 53 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20  SET x = 1; \..  
1010: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
1020: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
1030: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
1040: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
1050: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
1060: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
1070: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
1080: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1090: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
10a0: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
10b0: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
10c0: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
10d0: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
10e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
10f0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
1100: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
1110: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
1120: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
1130: 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74  etList(params st
1140: 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73  ring\[\] strings
1150: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1160: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
1170: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
1180: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
1190: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
11a0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
11b0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
11c0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
11d0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
11e0: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
11f0: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
1200: 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69  [getTestProperti
1210: 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  es]"))..        
1220: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1230: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
1240: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1250: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
1260: 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53  eateModule(new S
1270: 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65  QLiteModuleEnume
1280: 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  rable(..        
1290: 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22        "mod${id}"
12a0: 2c 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a  , strings));....
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
12c0: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
12d0: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
12e0: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
12f0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
1300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1310: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
1320: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
1330: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
1340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
1350: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
1360: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
1370: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1380: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
1390: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
13a0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
13b0: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
13c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13e0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
13f0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
1400: 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(2)}]";.... 
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1420: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
1430: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
1440: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
1450: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
1460: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1470: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
1480: 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52  le (dataReader.R
1490: 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
14a0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
14b0: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
14c0: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
14d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1500: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
1510: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
1520: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
1530: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
1540: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1550: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
1560: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
1570: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
1580: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
1590: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
15a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
15c0: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
15d0: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
15e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15f0: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51         catch (SQ
1600: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29  LiteException e)
1610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1620: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1630: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
1640: 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72  ResultCode.ToStr
1650: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
1660: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
1670: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
16b0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
16c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
16d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
16e0: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
16f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1700: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1750: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1760: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
1770: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1780: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1790: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
17a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
17b0: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
17c0: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
17d0: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
17e0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
17f0: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
1800: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
1810: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
1820: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
1830: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
1840: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
1850: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
1860: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
1870: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
1880: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
1890: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
18a0: 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74  d} GetList one t
18b0: 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a  wo three 4 5.0..
18c0: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
18d0: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
18e0: 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ]}] [normalizeVt
18f0: 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74  abResult $result
1900: 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
1910: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
1920: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
1930: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
1940: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
1950: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
1960: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
1970: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
1980: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
1990: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
19a0: 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31  g28 monoCrash211
19b0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63   command.sql\..c
19c0: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
19d0: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
19e0: 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f  QLite\..defineCo
19f0: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
1a00: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
1a10: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE 
1a20: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
1a30: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
1a40: 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69  -result [normali
1a50: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f  zeVtabResult {^O
1a60: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
1a70: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
1a80: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
1a90: 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74 77 6f  \{\} 0 \{one two
1aa0: 20 74 68 72 65 65 20 34 20 35 5c 2e 30 20 45 72   three 4 5\.0 Er
1ab0: 72 6f 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69  ror\..\{SQL logi
1ac0: 63 20 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73  c error( or miss
1ad0: 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d  ing database)? -
1ae0: 2d 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  - virtual table 
1af0: 22 74 5c 64 2b 22 20 69 73 5c 0d 0a 72 65 61 64  "t\d+" is\..read
1b00: 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d  -only\}\}$}]}...
1b10: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
1b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b60: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
1b70: 74 20 76 74 61 62 2d 31 2e 32 2e 32 20 7b 49 45  t vtab-1.2.2 {IE
1b80: 6e 75 6d 65 72 61 62 6c 65 20 76 69 72 74 75 61  numerable virtua
1b90: 6c 20 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20  l table} -setup 
1ba0: 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  {..  set fileNam
1bb0: 65 20 76 74 61 62 2d 31 2e 32 2e 32 2e 64 62 0d  e vtab-1.2.2.db.
1bc0: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
1bd0: 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76  t id [object inv
1be0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
1bf0: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64  GetActive NextId
1c00: 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75  ]..  set dataSou
1c10: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  rce [file join [
1c20: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
1c30: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName]
1c40: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29  ....  set sql(1)
1c50: 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45   { \..    CREATE
1c60: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
1c70: 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24  ${id} USING mod$
1c80: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
1c90: 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c    set sql(2) { \
1ca0: 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ..    SELECT * F
1cb0: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
1cc0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
1cd0: 33 29 20 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41  3) { \..    UPDA
1ce0: 54 45 20 74 24 7b 69 64 7d 20 53 45 54 20 78 20  TE t${id} SET x 
1cf0: 3d 20 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  = 1; \..  }.... 
1d00: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1d10: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
1d20: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
1d30: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
1d40: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
1d50: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
1d60: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
1d70: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
1d80: 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f     using Eagle._
1d90: 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69  Containers.Publi
1da0: 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  c;....    namesp
1db0: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
1dc0: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
1dd0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c  public static cl
1de0: 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20  ass Test${id}.. 
1df0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e00: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74  public static St
1e10: 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74  ringList GetList
1e20: 28 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b  (params string\[
1e30: 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20  \] strings)..   
1e40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e50: 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73    StringList res
1e60: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
1e70: 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
1e80: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
1e90: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
1ea0: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
1eb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
1ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
1ed0: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
1ee0: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65  taSource};[getTe
1ef0: 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29  stProperties]"))
1f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
1f10: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
1f20: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d  ction.Open();...
1f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1f40: 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
1f50: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64   = new SQLiteMod
1f60: 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a  uleEnumerable(..
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73 74 72 69  "mod${id}", stri
1f90: 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngs);....       
1fa0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
1fb0: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64  CreateModule(mod
1fc0: 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ule);....       
1fd0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
1fe0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
1ff0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
2000: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
2010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2030: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
2040: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
2050: 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(1)}]";..      
2060: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
2070: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
2080: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2090: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20a0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
20b0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
20c0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
20d0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
20e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20f0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
2100: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
2110: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
2120: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
2130: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
2140: 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61  iteDataReader da
2150: 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61  taReader = comma
2160: 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  nd.ExecuteReader
2170: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
2180: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2190: 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 61 74        while (dat
21a0: 61 52 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d  aReader.Read()).
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61     result.Add(da
21d0: 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f  taReader\[0\].To
21e0: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
21f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2200: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2210: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2220: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
2230: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
2240: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
2250: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
2260: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2270: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
2280: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
2290: 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d   ${sql(3)}]";...
22a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
22b0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
22c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22d0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
22e0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
22f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2310: 63 61 74 63 68 20 28 53 51 4c 69 74 65 45 78 63  catch (SQLiteExc
2320: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
2330: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2340: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2350: 6c 74 2e 41 64 64 28 65 2e 52 65 73 75 6c 74 43  lt.Add(e.ResultC
2360: 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  ode.ToString());
2370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2380: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
2390: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
23a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23c0: 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44          module.D
23d0: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
23e0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
23f0: 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  n.Close();..    
2400: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2410: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
2420: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
2430: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
2490: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
24a0: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
24b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
24c0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
24d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
24e0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
24f0: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
2500: 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74  lts errors [list
2510: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2520: 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c  ite.dll Eagle.dl
2530: 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  l]]....  list $c
2540: 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a  ode $results \..
2550: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e        [expr {[in
2560: 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73  fo exists errors
2570: 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22  ] ? $errors : ""
2580: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
2590: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
25a0: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
25b0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
25c0: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
25d0: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69  .Test${id} GetLi
25e0: 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  st one two three
25f0: 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20   4 5.0..      } 
2600: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
2610: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72  esult ""]}] [nor
2620: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
2630: 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c   $result]..} -cl
2640: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
2650: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
2660: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
2670: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
2680: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
2690: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
26a0: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
26b0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
26c0: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
26d0: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f  t monoBug28 mono
26e0: 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64  Crash211 command
26f0: 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
2700: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
2710: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a  m.Data.SQLite\..
2720: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
2730: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2740: 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  e.INTEROP_VIRTUA
2750: 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43  L_TABLE compileC
2760: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d  Sharp} -match \.
2770: 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20  .regexp -result 
2780: 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65  [normalizeVtabRe
2790: 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74  sult {^Ok\..Syst
27a0: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
27b0: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
27c0: 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c  lts#\d+ \{\} 0 \
27d0: 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 34  {one two three 4
27e0: 20 35 5c 2e 30 20 45 72 72 6f 72 5c 0d 0a 5c 7b   5\.0 Error\..\{
27f0: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 28  SQL logic error(
2800: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
2810: 62 61 73 65 29 3f 20 2d 2d 20 76 69 72 74 75 61  base)? -- virtua
2820: 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22 20 69  l table "t\d+" i
2830: 73 5c 0d 0a 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c  s\..read-only\}\
2840: 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }$}]}....#######
2850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2890: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
28a0: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
28b0: 2e 33 2e 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c  .3.1 {IEnumerabl
28c0: 65 3c 54 3e 20 76 69 72 74 75 61 6c 20 74 61 62  e<T> virtual tab
28d0: 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  le} -setup {..  
28e0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
28f0: 62 2d 31 2e 33 2e 31 2e 64 62 0d 0a 7d 20 2d 62  b-1.3.1.db..} -b
2900: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
2910: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
2920: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
2930: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
2940: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
2950: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
2960: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
2970: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
2980: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
2990: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
29a0: 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d  UAL TABLE t${id}
29b0: 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b   USING mod${id};
29c0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
29d0: 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20   sql(2) { \..   
29e0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
29f0: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
2a00: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
2a10: 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74 24  \..    UPDATE t$
2a20: 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b 20  {id} SET x = 1; 
2a30: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
2a40: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
2a50: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
2a60: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
2a70: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
2a80: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
2a90: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
2aa0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
2ab0: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73  .SQLite;..    us
2ac0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
2ad0: 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63 3b 0d  SQLite.Generic;.
2ae0: 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65  .    using Eagle
2af0: 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62  ._Containers.Pub
2b00: 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65  lic;....    name
2b10: 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b  space _Dynamic${
2b20: 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  id}..    {..    
2b30: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2b40: 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d  class Test${id}.
2b50: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
2b60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2b70: 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69  StringList GetLi
2b80: 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c 5b 5c  st(params int\[\
2b90: 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20 20 20  ] integers)..   
2ba0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bb0: 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73    StringList res
2bc0: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
2bd0: 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2be0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
2bf0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
2c00: 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51  nection = new SQ
2c10: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d  LiteConnection(.
2c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
2c30: 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61  Data Source=${da
2c40: 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65  taSource};[getTe
2c50: 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29  stProperties]"))
2c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2c70: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
2c80: 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d  ction.Open();...
2c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
2ca0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f  nection.CreateMo
2cb0: 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d  dule(new SQLiteM
2cc0: 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c  oduleEnumerable<
2cd0: 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  int>(..         
2ce0: 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c       "mod${id}",
2cf0: 20 69 6e 74 65 67 65 72 73 29 29 3b 0d 0a 0d 0a   integers));....
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2d10: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
2d20: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
2d30: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
2d40: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
2d50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d60: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
2d70: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
2d80: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
2d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2da0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
2db0: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
2dc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2dd0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
2de0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
2df0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
2e00: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
2e10: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e30: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
2e40: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
2e50: 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(2)}]";.... 
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
2e70: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
2e80: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
2e90: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
2ea0: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
2eb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
2ed0: 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52  le (dataReader.R
2ee0: 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
2ef0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2f00: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
2f10: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
2f20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2f40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f50: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
2f60: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
2f70: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
2f80: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
2f90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fa0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
2fb0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
2fc0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
2fd0: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
2fe0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2ff0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3000: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
3010: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
3020: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
3030: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3040: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51         catch (SQ
3050: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29  LiteException e)
3060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3080: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
3090: 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72  ResultCode.ToStr
30a0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
30b0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
30c0: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
30d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
30e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
3100: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
3110: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
3120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
3130: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
3140: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3150: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
31a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
31b0: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
31c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
31d0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
31e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
31f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3200: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
3210: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
3220: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
3230: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
3240: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
3250: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
3260: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
3270: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
3280: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
3290: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
32a0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
32b0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
32c0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
32d0: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
32e0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
32f0: 64 7d 20 47 65 74 4c 69 73 74 20 31 20 32 20 33  d} GetList 1 2 3
3300: 20 34 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65   4 5..      } re
3310: 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73  sult] : [set res
3320: 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61  ult ""]}] [norma
3330: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24  lizeVtabResult $
3340: 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61  result]..} -clea
3350: 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70  nup {..  cleanup
3360: 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a  Db $fileName....
3370: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
3380: 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20  ain result code 
3390: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73  results errors s
33a0: 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64  ql dataSource id
33b0: 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f   fileName..} -co
33c0: 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65  nstraints {eagle
33d0: 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20   command.object 
33e0: 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72  monoBug28 monoCr
33f0: 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73  ash211 command.s
3400: 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54  ql\..compile.DAT
3410: 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e  A SQLite System.
3420: 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65  Data.SQLite\..de
3430: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
3440: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
3450: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
3460: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
3470: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
3480: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e  egexp -result [n
3490: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
34a0: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
34b0: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
34c0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
34d0: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 31  s#\d+ \{\} 0 \{1
34e0: 20 32 20 33 20 34 20 35 20 45 72 72 6f 72 20 5c   2 3 4 5 Error \
34f0: 7b 53 51 4c 5c 0d 0a 6c 6f 67 69 63 20 65 72 72  {SQL\..logic err
3500: 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  or( or missing d
3510: 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 76 69 72  atabase)? -- vir
3520: 74 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b  tual table "t\d+
3530: 22 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d  " is read-only\}
3540: 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \}$}]}....######
3550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3590: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
35a0: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
35b0: 31 2e 33 2e 32 20 7b 49 45 6e 75 6d 65 72 61 62  1.3.2 {IEnumerab
35c0: 6c 65 3c 54 3e 20 76 69 72 74 75 61 6c 20 74 61  le<T> virtual ta
35d0: 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ble} -setup {.. 
35e0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
35f0: 61 62 2d 31 2e 33 2e 32 2e 64 62 0d 0a 7d 20 2d  ab-1.3.2.db..} -
3600: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
3610: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
3620: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
3630: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
3640: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
3650: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
3660: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
3670: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
3680: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
3690: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ..    CREATE VIR
36a0: 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64  TUAL TABLE t${id
36b0: 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d  } USING mod${id}
36c0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
36d0: 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20  t sql(2) { \..  
36e0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
36f0: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
3700: 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b  ..  set sql(3) {
3710: 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74   \..    UPDATE t
3720: 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b  ${id} SET x = 1;
3730: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73   \..  }....  uns
3740: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
3750: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d  esults errors...
3760: 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d  .  set code [com
3770: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b  pileCSharpWith [
3780: 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69  subst {..    usi
3790: 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20  ng System;..    
37a0: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
37b0: 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75  a.SQLite;..    u
37c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
37d0: 2e 53 51 4c 69 74 65 2e 47 65 6e 65 72 69 63 3b  .SQLite.Generic;
37e0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
37f0: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
3800: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
3810: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
3820: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
3830: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3840: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
3850: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
3860: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3870: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
3880: 69 73 74 28 70 61 72 61 6d 73 20 69 6e 74 5c 5b  ist(params int\[
3890: 5c 5d 20 69 6e 74 65 67 65 72 73 29 0d 0a 20 20  \] integers)..  
38a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38b0: 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65     StringList re
38c0: 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e  sult = new Strin
38d0: 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
38e0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
38f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
3900: 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
3910: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
3920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3930: 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64  "Data Source=${d
3940: 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54  ataSource};[getT
3950: 65 73 74 50 72 6f 70 65 72 74 69 65 73 5d 22 29  estProperties]")
3960: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
3970: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
3980: 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  ection.Open();..
3990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
39a0: 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c  LiteModule modul
39b0: 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f  e = new SQLiteMo
39c0: 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69  duleEnumerable<i
39d0: 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nt>(..          
39e0: 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22        "mod${id}"
39f0: 2c 20 69 6e 74 65 67 65 72 73 29 3b 0d 0a 0d 0a  , integers);....
3a00: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
3a10: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64  ection.CreateMod
3a20: 75 6c 65 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a  ule(module);....
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
3a40: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
3a50: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
3a60: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
3a70: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
3a80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a90: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
3aa0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
3ab0: 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d  st ${sql(1)}]";.
3ac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
3ad0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
3ae0: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
3af0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3b00: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
3b10: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
3b20: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
3b30: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
3b40: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
3b50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3b60: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
3b70: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
3b80: 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(2)}]";.... 
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
3ba0: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
3bb0: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
3bc0: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
3bd0: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
3be0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
3c00: 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52  le (dataReader.R
3c10: 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
3c20: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
3c30: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
3c40: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
3c50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3c70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3c80: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
3c90: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
3ca0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
3cb0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
3cc0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3cd0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
3ce0: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
3cf0: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
3d00: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
3d10: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
3d20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3d30: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
3d40: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
3d50: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
3d60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3d70: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51         catch (SQ
3d80: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29  LiteException e)
3d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3da0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3db0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
3dc0: 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72  ResultCode.ToStr
3dd0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
3de0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3df0: 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d  Add(e.Message);.
3e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
3e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3e20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  ...            m
3e30: 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
3e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
3e50: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
3e60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
3e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
3e80: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
3e90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3ea0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ee0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
3ef0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3f00: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
3f10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3f20: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
3f30: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
3f40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
3f50: 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72   }] true true tr
3f60: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
3f70: 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44  s [list System.D
3f80: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45  ata.SQLite.dll E
3f90: 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20  agle.dll]]....  
3fa0: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code $resu
3fb0: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  lts \..      [ex
3fc0: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
3fd0: 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f   errors] ? $erro
3fe0: 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20  rs : ""}] \..   
3ff0: 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20     [expr {$code 
4000: 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68  eq "Ok" ? [catch
4010: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
4020: 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d  ct invoke _Dynam
4030: 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64  ic${id}.Test${id
4040: 7d 20 47 65 74 4c 69 73 74 20 31 20 32 20 33 20  } GetList 1 2 3 
4050: 34 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  4 5..      } res
4060: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
4070: 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c  lt ""]}] [normal
4080: 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72  izeVtabResult $r
4090: 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  esult]..} -clean
40a0: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
40b0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
40c0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
40d0: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
40e0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
40f0: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
4100: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
4110: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
4120: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
4130: 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61  onoBug28 monoCra
4140: 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71  sh211 command.sq
4150: 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41  l\..compile.DATA
4160: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
4170: 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66  ata.SQLite\..def
4180: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
4190: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
41a0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
41b0: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
41c0: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
41d0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
41e0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
41f0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
4200: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
4210: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
4220: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 31 20  #\d+ \{\} 0 \{1 
4230: 32 20 33 20 34 20 35 20 45 72 72 6f 72 20 5c 7b  2 3 4 5 Error \{
4240: 53 51 4c 5c 0d 0a 6c 6f 67 69 63 20 65 72 72 6f  SQL\..logic erro
4250: 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  r( or missing da
4260: 74 61 62 61 73 65 29 3f 20 2d 2d 20 76 69 72 74  tabase)? -- virt
4270: 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22  ual table "t\d+"
4280: 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c   is read-only\}\
4290: 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }$}]}....#######
42a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42e0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
42f0: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
4300: 2e 34 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c  .4 {virtual tabl
4310: 65 20 66 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f  e function suppo
4320: 72 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  rt} -setup {..  
4330: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
4340: 62 2d 31 2e 34 2e 64 62 0d 0a 7d 20 2d 62 6f 64  b-1.4.db..} -bod
4350: 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f  y {..  set id [o
4360: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
4370: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
4380: 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65  ve NextId]..  se
4390: 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69  t dataSource [fi
43a0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
43b0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24  baseDirectory] $
43c0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73  fileName]....  s
43d0: 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20  et sql(1) { \.. 
43e0: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
43f0: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
4400: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
4410: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73  ..  }....  set s
4420: 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53  ql(2) { \..    S
4430: 45 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20  ELECT Base64(x, 
4440: 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c  CAST('one' AS BL
4450: 4f 42 29 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d  OB)) FROM t${id}
4460: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
4470: 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20  t sql(3) { \..  
4480: 20 20 53 45 4c 45 43 54 20 42 61 73 65 36 34 28    SELECT Base64(
4490: 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53  x, CAST('one' AS
44a0: 20 42 4c 4f 42 29 2c 20 27 74 77 6f 27 29 20 46   BLOB), 'two') F
44b0: 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20  ROM t${id}; \.. 
44c0: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28   }....  set sql(
44d0: 34 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45  4) { \..    SELE
44e0: 43 54 20 42 61 73 65 36 35 28 78 2c 20 43 41 53  CT Base65(x, CAS
44f0: 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29  T('one' AS BLOB)
4500: 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c  ) FROM t${id}; \
4510: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
4520: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
4530: 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  ults errors.... 
4540: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
4550: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
4560: 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67  bst {..    using
4570: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73   System;..    us
4580: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
4590: 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69  SQLite;..    usi
45a0: 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69  ng Eagle._Contai
45b0: 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a  ners.Public;....
45c0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44      namespace _D
45d0: 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20  ynamic${id}..   
45e0: 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63   {..      public
45f0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75 6e   class SQLiteFun
4600: 63 74 69 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c  ction${id} : SQL
4610: 69 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  iteFunction..   
4620: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
4630: 62 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74  blic SQLiteFunct
4640: 69 6f 6e 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20  ion${id}()..    
4650: 20 20 20 20 20 20 3a 20 62 61 73 65 28 53 51 4c        : base(SQL
4660: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 44  iteDateFormats.D
4670: 65 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d 65  efault, DateTime
4680: 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64  Kind.Unspecified
4690: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
46a0: 20 20 20 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29      null, false)
46b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
46c0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
46d0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
46e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
46f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
4740: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f  ublic override o
4750: 62 6a 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20  bject Invoke(.. 
4760: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5c           object\
4770: 5b 5c 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20  [\] args..      
4780: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
4790: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
47a0: 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  args == null).. 
47b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
47c0: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
47d0: 20 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65       if (args.Le
47e0: 6e 67 74 68 20 21 3d 20 32 29 0d 0a 20 20 20 20  ngth != 2)..    
47f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4800: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
4810: 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d  tion(String.Form
4820: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
4830: 20 20 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79     "need exactly
4840: 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20   two arguments, 
4850: 67 6f 74 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c  got {0}", args.L
4860: 65 6e 67 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20  ength));....    
4870: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 61 72 67        object arg
4880: 20 3d 20 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d   = args\[1\];...
4890: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
48a0: 72 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rg == null)..   
48b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
48c0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
48d0: 0a 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20  .          Type 
48e0: 74 79 70 65 20 3d 20 61 72 67 2e 47 65 74 54 79  type = arg.GetTy
48f0: 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  pe();....       
4900: 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74     if (type == t
4910: 79 70 65 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a  ypeof(DBNull))..
4920: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4930: 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b  rn String.Empty;
4940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
4950: 20 28 74 79 70 65 20 21 3d 20 74 79 70 65 6f 66   (type != typeof
4960: 28 62 79 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20  (byte\[\]))..   
4970: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4980: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
4990: 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72  ption(String.For
49a0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
49b0: 20 20 20 20 22 61 72 67 75 6d 65 6e 74 20 6d 75      "argument mu
49c0: 73 74 20 62 65 20 62 79 74 65 20 61 72 72 61 79  st be byte array
49d0: 2c 20 67 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65  , got {0}", type
49e0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
49f0: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
4a00: 54 6f 42 61 73 65 36 34 53 74 72 69 6e 67 28 28  ToBase64String((
4a10: 62 79 74 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d  byte\[\]) arg);.
4a20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4a30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f    }....      ///
4a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4a90: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
4aa0: 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ass SQLiteModule
4ab0: 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
4ac0: 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20  teModuleNoop..  
4ad0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
4ae0: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
4af0: 6c 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69  leTest${id}(stri
4b00: 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
4b10: 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29      : base(name)
4b20: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4b30: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
4b40: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
4b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
4bb0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
4bc0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
4bd0: 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
4be0: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
4bf0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a  on connection,..
4c00: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
4c10: 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20   pClientData,.. 
4c20: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c           string\
4c30: 5b 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a  [\] arguments,..
4c40: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
4c50: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
4c60: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
4c70: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
4c80: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ror..          )
4c90: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
4ca0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
4cb0: 6f 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c  orCode rc = Decl
4cc0: 61 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  areTable(..     
4cd0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
4ce0: 6e 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  n, "CREATE TABLE
4cf0: 20 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72   ignored(x);", r
4d00: 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ef error);....  
4d10: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
4d20: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
4d30: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
4d40: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d     return rc;...
4d50: 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
4d60: 44 65 63 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28  DeclareFunction(
4d70: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20  connection, -1, 
4d80: 22 42 61 73 65 36 34 22 2c 20 72 65 66 20 65 72  "Base64", ref er
4d90: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
4da0: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
4db0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
4dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4dd0: 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  turn rc;....    
4de0: 20 20 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65        table = ne
4df0: 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  w SQLiteVirtualT
4e00: 61 62 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b  able(arguments);
4e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
4e20: 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
4e30: 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20  de.Ok;..        
4e40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4ea0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
4eb0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
4ec0: 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
4ed0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
4ee0: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
4ef0: 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
4f00: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
4f10: 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20  or cursor..     
4f20: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4f30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 72  {..          cur
4f40: 73 6f 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  sor = new SQLite
4f50: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
4f60: 6f 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20  or(table);..    
4f70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4f80: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
4f90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4fa0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4ff0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
5000: 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 46   override bool F
5010: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
5020: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
5030: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
5040: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ,..          int
5050: 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d   argumentCount,.
5060: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
5070: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
5080: 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e     ref SQLiteFun
5090: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d  ction function,.
50a0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49  .          ref I
50b0: 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
50c0: 61 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  a..          )..
50d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
50e0: 20 20 20 20 20 69 66 20 28 61 72 67 75 6d 65 6e       if (argumen
50f0: 74 43 6f 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20  tCount != 2)..  
5100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5110: 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
5120: 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69  rror(table, Stri
5130: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
5140: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c            "no \\
5150: 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e  "{0}\\" function
5160: 73 20 61 63 63 65 70 74 20 7b 31 7d 20 61 72 67  s accept {1} arg
5170: 75 6d 65 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20  ument(s)",..    
5180: 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e            base.N
5190: 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75  ame, argumentCou
51a0: 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
51b0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
51c0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e;..          }.
51d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
51e0: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
51f0: 6e 61 6d 65 2c 20 22 42 61 73 65 36 34 22 2c 0d  name, "Base64",.
5200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
5210: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
5220: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
5230: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  e))..          {
5240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65  ..            Se
5250: 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c  tTableError(tabl
5260: 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  e, String.Format
5270: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5280: 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66   "no \\"{0}\\" f
5290: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d  unctions are nam
52a0: 65 64 20 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a  ed \\"{1}\\"",..
52b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61                ba
52c0: 73 65 2e 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b  se.Name, name));
52d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
52e0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
52f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5300: 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e          function
5310: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75 6e   = new SQLiteFun
5320: 63 74 69 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20  ction${id}();.. 
5330: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5340: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
5350: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
5360: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
53b0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
53c0: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
53d0: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
53e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
53f0: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
5400: 65 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  etList()..      
5410: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
5420: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
5430: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
5440: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
5450: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
5460: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
5470: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
5480: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
5490: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
54a0: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
54b0: 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50  ource};[getTestP
54c0: 72 6f 70 65 72 74 69 65 73 20 4e 6f 42 69 6e 64  roperties NoBind
54d0: 46 75 6e 63 74 69 6f 6e 73 5d 22 29 29 0d 0a 20  Functions]")).. 
54e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
54f0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
5500: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20  on.Open();..    
5510: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
5520: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
5530: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
5540: 54 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b  Test${id}("mod${
5550: 69 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  id}"));....     
5560: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
5570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5580: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
5590: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
55a0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
55b0: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
55c0: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
55d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
55e0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
55f0: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
5600: 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b  bst ${sql(1)}]";
5610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5620: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72    result.Add(Str
5630: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22  ing.Format("{0}"
5640: 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  , command.Execut
5650: 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20  eScalar()));..  
5660: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5670: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5680: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
5690: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
56a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
56c0: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
56d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
56e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
56f0: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
5700: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5710: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
5720: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
5730: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
5740: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
5750: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5770: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
5780: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
5790: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20  sql(2)}]";..    
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
57b0: 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f  lt.Add(String.Fo
57c0: 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d  rmat("{0}", comm
57d0: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
57e0: 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  r()));..        
57f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5800: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5810: 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
5820: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
5830: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5840: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
5850: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
5860: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5870: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
5880: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
58a0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
58b0: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
58c0: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
58d0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
58e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
58f0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
5900: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
5910: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
5920: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
5930: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
5940: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22  (String.Format("
5950: 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78  {0}", command.Ex
5960: 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b  ecuteScalar()));
5970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5980: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
59a0: 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
59b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
59c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59d0: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
59e0: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
59f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5a00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5a10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5a20: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
5a30: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
5a40: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
5a50: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
5a60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5a80: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
5a90: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
5aa0: 74 20 24 7b 73 71 6c 28 34 29 7d 5d 22 3b 0d 0a  t ${sql(4)}]";..
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ac0: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
5ad0: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
5ae0: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
5af0: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
5b00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5b10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5b20: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
5b30: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
5b40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5b50: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
5b60: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
5b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5b80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
5b90: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28  onnection.Close(
5ba0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
5bb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
5bc0: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
5bd0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5be0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5c30: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
5c40: 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a  ic void Main()..
5c50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5c60: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
5c70: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
5c80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5c90: 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74    }] true true t
5ca0: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
5cb0: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
5cc0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
5cd0: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
5ce0: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
5cf0: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
5d00: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
5d10: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
5d20: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
5d30: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
5d40: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
5d50: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
5d60: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
5d70: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
5d80: 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20  d} GetList..    
5d90: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
5da0: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
5db0: 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65  [normalizeVtabRe
5dc0: 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d  sult $result]..}
5dd0: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
5de0: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
5df0: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
5e00: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
5e10: 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72   code results er
5e20: 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75  rors sql dataSou
5e30: 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d  rce id fileName.
5e40: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
5e50: 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
5e60: 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
5e70: 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f 6d  monoCrash211 com
5e80: 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69  mand.sql\..compi
5e90: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
5ea0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
5eb0: 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61  e\..defineConsta
5ec0: 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
5ed0: 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49  QLite.INTEROP_VI
5ee0: 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70  RTUAL_TABLE comp
5ef0: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
5f00: 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73  h \..regexp -res
5f10: 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ult [normalizeVt
5f20: 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a  abResult {^Ok\..
5f30: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
5f40: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
5f50: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
5f60: 20 30 20 5c 7b 5c 7b 5c 7d 20 62 32 35 6c 20 5c   0 \{\{\} b25l \
5f70: 7b 53 51 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72  {SQL logic\..err
5f80: 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  or( or missing d
5f90: 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 75 6e 61  atabase)? -- una
5fa0: 62 6c 65 20 74 6f 20 75 73 65 20 66 75 6e 63 74  ble to use funct
5fb0: 69 6f 6e 20 42 61 73 65 36 34 20 69 6e 20 74 68  ion Base64 in th
5fc0: 65 20 72 65 71 75 65 73 74 65 64 5c 0d 0a 63 6f  e requested\..co
5fd0: 6e 74 65 78 74 5c 7d 20 5c 7b 53 51 4c 20 6c 6f  ntext\} \{SQL lo
5fe0: 67 69 63 20 65 72 72 6f 72 28 20 6f 72 20 6d 69  gic error( or mi
5ff0: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 29 3f  ssing database)?
6000: 20 2d 2d 20 6e 6f 20 73 75 63 68 20 66 75 6e 63   -- no such func
6010: 74 69 6f 6e 3a 5c 0d 0a 42 61 73 65 36 35 5c 7d  tion:\..Base65\}
6020: 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  \}$}]}....######
6030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6070: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
6080: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
6090: 31 2e 35 20 7b 76 69 72 74 75 61 6c 20 74 61 62  1.5 {virtual tab
60a0: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 73 75 70 70  le function supp
60b0: 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  ort} -setup {.. 
60c0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
60d0: 61 62 2d 31 2e 35 2e 64 62 0d 0a 7d 20 2d 62 6f  ab-1.5.db..} -bo
60e0: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
60f0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
6100: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
6110: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
6120: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
6130: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
6140: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
6150: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
6160: 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a  set sql(1) { \..
6170: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
6180: 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20  AL TABLE t${id} 
6190: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
61a0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
61b0: 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(2) { \..    
61c0: 53 45 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c  SELECT Base64(x,
61d0: 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42   CAST('one' AS B
61e0: 4c 4f 42 29 29 20 46 52 4f 4d 20 74 24 7b 69 64  LOB)) FROM t${id
61f0: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
6200: 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20  et sql(3) { \.. 
6210: 20 20 20 53 45 4c 45 43 54 20 42 61 73 65 36 34     SELECT Base64
6220: 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41  (x, CAST('one' A
6230: 53 20 42 4c 4f 42 29 2c 20 27 74 77 6f 27 29 20  S BLOB), 'two') 
6240: 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a  FROM t${id}; \..
6250: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
6260: 28 34 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (4) { \..    SEL
6270: 45 43 54 20 42 61 73 65 36 35 28 78 2c 20 43 41  ECT Base65(x, CA
6280: 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42  ST('one' AS BLOB
6290: 29 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20  )) FROM t${id}; 
62a0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
62b0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
62c0: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
62d0: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
62e0: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
62f0: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
6300: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
6310: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
6320: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73  .SQLite;..    us
6330: 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61  ing Eagle._Conta
6340: 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d  iners.Public;...
6350: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
6360: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
6370: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
6380: 63 20 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75  c class SQLiteFu
6390: 6e 63 74 69 6f 6e 24 7b 69 64 7d 20 3a 20 53 51  nction${id} : SQ
63a0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20  LiteFunction..  
63b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
63c0: 75 62 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63  ublic SQLiteFunc
63d0: 74 69 6f 6e 24 7b 69 64 7d 28 29 0d 0a 20 20 20  tion${id}()..   
63e0: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 53 51         : base(SQ
63f0: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
6400: 44 65 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d  Default, DateTim
6410: 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65  eKind.Unspecifie
6420: 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
6430: 20 20 20 20 20 6e 75 6c 6c 2c 20 66 61 6c 73 65       null, false
6440: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6450: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
6460: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
6470: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
64d0: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
64e0: 6f 62 6a 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a  object Invoke(..
64f0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
6500: 5c 5b 5c 5d 20 61 72 67 73 0d 0a 20 20 20 20 20  \[\] args..     
6510: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6520: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
6530: 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (args == null)..
6540: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6550: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
6560: 20 20 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c        if (args.L
6570: 65 6e 67 74 68 20 21 3d 20 32 29 0d 0a 20 20 20  ength != 2)..   
6580: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6590: 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
65a0: 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72  ption(String.For
65b0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
65c0: 20 20 20 20 22 6e 65 65 64 20 65 78 61 63 74 6c      "need exactl
65d0: 79 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c  y two arguments,
65e0: 20 67 6f 74 20 7b 30 7d 22 2c 20 61 72 67 73 2e   got {0}", args.
65f0: 4c 65 6e 67 74 68 29 29 3b 0d 0a 0d 0a 20 20 20  Length));....   
6600: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 61 72         object ar
6610: 67 20 3d 20 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a  g = args\[1\];..
6620: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
6630: 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  arg == null)..  
6640: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6650: 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
6660: 0d 0a 20 20 20 20 20 20 20 20 20 20 54 79 70 65  ..          Type
6670: 20 74 79 70 65 20 3d 20 61 72 67 2e 47 65 74 54   type = arg.GetT
6680: 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ype();....      
6690: 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20      if (type == 
66a0: 74 79 70 65 6f 66 28 44 42 4e 75 6c 6c 29 29 0d  typeof(DBNull)).
66b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
66c0: 75 72 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  urn String.Empty
66d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
66e0: 66 20 28 74 79 70 65 20 21 3d 20 74 79 70 65 6f  f (type != typeo
66f0: 66 28 62 79 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20  f(byte\[\]))..  
6700: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6710: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
6720: 65 70 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f  eption(String.Fo
6730: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
6740: 20 20 20 20 20 22 61 72 67 75 6d 65 6e 74 20 6d       "argument m
6750: 75 73 74 20 62 65 20 62 79 74 65 20 61 72 72 61  ust be byte arra
6760: 79 2c 20 67 6f 74 20 7b 30 7d 22 2c 20 74 79 70  y, got {0}", typ
6770: 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e));....        
6780: 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74    return Convert
6790: 2e 54 6f 42 61 73 65 36 34 53 74 72 69 6e 67 28  .ToBase64String(
67a0: 28 62 79 74 65 5c 5b 5c 5d 29 20 61 72 67 29 3b  (byte\[\]) arg);
67b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
67c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6820: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
6830: 6c 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c  lass SQLiteModul
6840: 65 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c  eTest${id} : SQL
6850: 69 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20  iteModuleNoop.. 
6860: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6870: 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64  public SQLiteMod
6880: 75 6c 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72  uleTest${id}(str
6890: 69 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ing name)..     
68a0: 20 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65       : base(name
68b0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
68c0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
68d0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
68e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
68f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6940: 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
6950: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6960: 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20  Create(..       
6970: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
6980: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d  ion connection,.
6990: 0a 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74  .          IntPt
69a0: 72 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  r pClientData,..
69b0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
69c0: 5c 5b 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d  \[\] arguments,.
69d0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53  .          ref S
69e0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
69f0: 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  e table,..      
6a00: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
6a10: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
6a20: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6a30: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
6a40: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63  rorCode rc = Dec
6a50: 6c 61 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20  lareTable(..    
6a60: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
6a70: 6f 6e 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c  on, "CREATE TABL
6a80: 45 20 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20  E ignored(x);", 
6a90: 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20  ref error);.... 
6aa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20           if (rc 
6ab0: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
6ac0: 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
6ad0: 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a      return rc;..
6ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ..          rc =
6af0: 20 44 65 63 6c 61 72 65 46 75 6e 63 74 69 6f 6e   DeclareFunction
6b00: 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c  (connection, -1,
6b10: 20 22 42 61 73 65 36 34 22 2c 20 72 65 66 20 65   "Base64", ref e
6b20: 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
6b30: 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51      if (rc != SQ
6b40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6b50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
6b60: 65 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20  eturn rc;....   
6b70: 20 20 20 20 20 20 20 74 61 62 6c 65 20 3d 20 6e         table = n
6b80: 65 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ew SQLiteVirtual
6b90: 54 61 62 6c 65 28 61 72 67 75 6d 65 6e 74 73 29  Table(arguments)
6ba0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ;..          ret
6bb0: 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
6bc0: 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20  ode.Ok;..       
6bd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6c30: 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65   public override
6c40: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6c50: 20 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20   Open(..        
6c60: 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
6c70: 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20  able table,..   
6c80: 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
6c90: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
6ca0: 73 6f 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20  sor cursor..    
6cb0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75   {..          cu
6cd0: 72 73 6f 72 20 3d 20 6e 65 77 20 53 51 4c 69 74  rsor = new SQLit
6ce0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
6cf0: 73 6f 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20  sor(table);..   
6d00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
6d10: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6d20: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
6d30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6d80: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
6d90: 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  c override bool 
6da0: 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
6db0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
6dc0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
6dd0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  e,..          in
6de0: 74 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c  t argumentCount,
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69  ..          stri
6e00: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
6e10: 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75      ref SQLiteFu
6e20: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c  nction function,
6e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
6e40: 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
6e50: 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  ta..          ).
6e60: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6e70: 20 20 20 20 20 20 69 66 20 28 61 72 67 75 6d 65        if (argume
6e80: 6e 74 43 6f 75 6e 74 20 21 3d 20 32 29 0d 0a 20  ntCount != 2).. 
6e90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6ea0: 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
6eb0: 45 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72  Error(table, Str
6ec0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
6ed0: 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c             "no \
6ee0: 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f  \"{0}\\" functio
6ef0: 6e 73 20 61 63 63 65 70 74 20 7b 31 7d 20 61 72  ns accept {1} ar
6f00: 67 75 6d 65 6e 74 28 73 29 22 2c 0d 0a 20 20 20  gument(s)",..   
6f10: 20 20 20 20 20 20 20 20 20 20 20 62 61 73 65 2e             base.
6f20: 4e 61 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f  Name, argumentCo
6f30: 75 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  unt));....      
6f40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
6f50: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  se;..          }
6f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
6f70: 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
6f80: 28 6e 61 6d 65 2c 20 22 42 61 73 65 36 34 22 2c  (name, "Base64",
6f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6fa0: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
6fb0: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
6fc0: 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
6fd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
6fe0: 65 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62  etTableError(tab
6ff0: 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  le, String.Forma
7000: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
7010: 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20    "no \\"{0}\\" 
7020: 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 61  functions are na
7030: 6d 65 64 20 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d  med \\"{1}\\"",.
7040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62  .              b
7050: 61 73 65 2e 4e 61 6d 65 2c 20 6e 61 6d 65 29 29  ase.Name, name))
7060: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7070: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
7080: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7090: 20 20 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f           functio
70a0: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75  n = new SQLiteFu
70b0: 6e 63 74 69 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a  nction${id}();..
70c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
70d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
70e0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
70f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7140: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74  .      public st
7150: 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24  atic class Test$
7160: 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  {id}..      {.. 
7170: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7180: 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  atic StringList 
7190: 47 65 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  GetList()..     
71a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
71b0: 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c  StringList resul
71c0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  t = new StringLi
71d0: 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
71e0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
71f0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
7200: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
7210: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
7230: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
7240: 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74  Source};[getTest
7250: 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a  Properties]"))..
7260: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7270: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
7280: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20  ion.Open();..   
7290: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
72a0: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
72b0: 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c  (new SQLiteModul
72c0: 65 54 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24  eTest${id}("mod$
72d0: 7b 69 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20  {id}"));....    
72e0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
72f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7300: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
7310: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
7320: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
7330: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
7340: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
7350: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7360: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
7370: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
7380: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
7390: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
73a0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74     result.Add(St
73b0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
73c0: 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75  ", command.Execu
73d0: 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20  teScalar()));.. 
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7400: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
7410: 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
7420: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
7440: 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67  ult.Add(e.Messag
7450: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
7460: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7470: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
7480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7490: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
74a0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
74b0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
74c0: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74f0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
7500: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
7510: 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(2)}]";..   
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
7530: 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46  ult.Add(String.F
7540: 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d  ormat("{0}", com
7550: 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c  mand.ExecuteScal
7560: 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20  ar()));..       
7570: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7580: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7590: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
75a0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
75b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
75c0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
75d0: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
75e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
7600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
7620: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
7630: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
7640: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
7650: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
7660: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7670: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
7680: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
7690: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33   "[subst ${sql(3
76a0: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
76b0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
76c0: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
76d0: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
76e0: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
76f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7700: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7710: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
7720: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
7730: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
7740: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7750: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
7760: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
7770: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7780: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
7790: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
77a0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
77b0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
77c0: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
77d0: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
77e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
77f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7800: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
7810: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
7820: 73 74 20 24 7b 73 71 6c 28 34 29 7d 5d 22 3b 0d  st ${sql(4)}]";.
7830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7840: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
7850: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
7860: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
7870: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
7880: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7890: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
78a0: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
78b0: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
78c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
78d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
78e0: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
78f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7900: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7910: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
7920: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
7930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
7940: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
7950: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7960: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
79b0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
79c0: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
79d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
79e0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
79f0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
7a00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
7a10: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
7a20: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
7a30: 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d  ors [list System
7a40: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
7a50: 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a   Eagle.dll]]....
7a60: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
7a70: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
7a80: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
7a90: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
7aa0: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
7ab0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
7ac0: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
7ad0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
7ae0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
7af0: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
7b00: 69 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20  id} GetList..   
7b10: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
7b20: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
7b30: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
7b40: 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a  esult $result]..
7b50: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
7b60: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
7b70: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
7b80: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
7b90: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
7ba0: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
7bb0: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
7bc0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
7bd0: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
7be0: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
7bf0: 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f   monoCrash211 co
7c00: 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70  mmand.sql\..comp
7c10: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
7c20: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7c30: 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  te\..defineConst
7c40: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
7c50: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
7c60: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
7c70: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
7c80: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
7c90: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  sult [normalizeV
7ca0: 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  tabResult {^Ok\.
7cb0: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
7cc0: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
7cd0: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
7ce0: 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 62 32 35 6c 20  } 0 \{\{\} b25l 
7cf0: 5c 7b 53 51 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72  \{SQL logic\..er
7d00: 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20  ror( or missing 
7d10: 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 28 3f  database)? -- (?
7d20: 3a 75 6e 61 62 6c 65 20 74 6f 20 75 73 65 20 66  :unable to use f
7d30: 75 6e 63 74 69 6f 6e 20 42 61 73 65 36 34 20 69  unction Base64 i
7d40: 6e 20 74 68 65 5c 0d 0a 72 65 71 75 65 73 74 65  n the\..requeste
7d50: 64 20 63 6f 6e 74 65 78 74 7c 6e 65 65 64 20 65  d context|need e
7d60: 78 61 63 74 6c 79 20 6f 6e 65 20 61 72 67 75 6d  xactly one argum
7d70: 65 6e 74 2c 20 67 6f 74 20 33 29 5c 7d 20 5c 7b  ent, got 3)\} \{
7d80: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 28  SQL logic error(
7d90: 20 6f 72 5c 0d 0a 6d 69 73 73 69 6e 67 20 64 61   or\..missing da
7da0: 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f 20 73  tabase)? -- no s
7db0: 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 42 61  uch function: Ba
7dc0: 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  se65\}\}$}]}....
7dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
7e20: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
7e30: 20 76 74 61 62 2d 31 2e 36 20 7b 76 69 72 74 75   vtab-1.6 {virtu
7e40: 61 6c 20 74 61 62 6c 65 20 72 65 6e 61 6d 65 20  al table rename 
7e50: 73 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20  support} -setup 
7e60: 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  {..  set fileNam
7e70: 65 20 76 74 61 62 2d 31 2e 36 2e 64 62 0d 0a 7d  e vtab-1.6.db..}
7e80: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
7e90: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
7ea0: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
7eb0: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
7ec0: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
7ed0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
7ee0: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
7ef0: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
7f00: 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b  ..  set sql(1) {
7f10: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56   \..    CREATE V
7f20: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b  IRTUAL TABLE t${
7f30: 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69  id} USING mod${i
7f40: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
7f50: 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a  set sql(2) { \..
7f60: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
7f70: 74 24 7b 69 64 7d 20 52 45 4e 41 4d 45 20 54 4f  t${id} RENAME TO
7f80: 20 78 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   x${id}; \..  }.
7f90: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
7fa0: 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20  { \..    SELECT 
7fb0: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
7fc0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
7fd0: 70 65 20 3d 20 27 74 61 62 6c 65 27 20 4f 52 44  pe = 'table' ORD
7fe0: 45 52 20 42 59 20 6e 61 6d 65 3b 20 5c 0d 0a 20  ER BY name; \.. 
7ff0: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
8000: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
8010: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
8020: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
8030: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
8040: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
8050: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
8060: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
8070: 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ite;..    using 
8080: 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72  Eagle._Container
8090: 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20  s.Public;....   
80a0: 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61   namespace _Dyna
80b0: 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d  mic${id}..    {.
80c0: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65  .      public se
80d0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
80e0: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
80f0: 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e   : SQLiteModuleN
8100: 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  oop..      {..  
8110: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
8120: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
8130: 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d  d}(string name).
8140: 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73  .          : bas
8150: 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  e(name)..       
8160: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
8170: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
8180: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8190: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
81e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65        public ove
81f0: 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
8200: 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20  rCode Create(.. 
8210: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
8220: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
8230: 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
8240: 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44   IntPtr pClientD
8250: 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
8260: 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d  string\[\] argum
8270: 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ents,..         
8280: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
8290: 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a  alTable table,..
82a0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
82b0: 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
82c0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
82d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   {..          SQ
82e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
82f0: 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28   = DeclareTable(
8300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
8310: 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54  nnection, "CREAT
8320: 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28  E TABLE ignored(
8330: 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29  x);", ref error)
8340: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
8350: 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45  f (rc != SQLiteE
8360: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
8370: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8380: 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   rc;....        
8390: 20 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51    table = new SQ
83a0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
83b0: 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20  (arguments);..  
83c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
83d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
83e0: 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  k;..        }...
83f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
8450: 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  ic override SQLi
8460: 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e  teErrorCode Open
8470: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  (..          SQL
8480: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
8490: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
84a0: 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
84b0: 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
84c0: 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
84d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
84e0: 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20           cursor 
84f0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74  = new SQLiteVirt
8500: 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74  ualTableCursor(t
8510: 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  able);..        
8520: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
8530: 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20  rrorCode.Ok;..  
8540: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
8550: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
8560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62  ///....      pub
85b0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
85c0: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
85d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
85e0: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
85f0: 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29 0d  gList GetList().
8600: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8610: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
8620: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
8630: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
8640: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
8650: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8660: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
8670: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
8680: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
8690: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
86a0: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
86b0: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
86c0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
86d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
86e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
86f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
8700: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
8710: 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74  Module(new SQLit
8720: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
8730: 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a  ("mod${id}"));..
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
8750: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
8760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8770: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
8780: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
8790: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
87a0: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
87b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
87d0: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
87e0: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
87f0: 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (1)}]";..       
8800: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
8810: 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  Add(String.Forma
8820: 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64  t("{0}", command
8830: 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29  .ExecuteScalar()
8840: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
8850: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8860: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8870: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
8880: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
8890: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
88a0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
88b0: 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20  Message);..     
88c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
88d0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
88e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
88f0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
8900: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
8910: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
8920: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
8930: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
8940: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8950: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
8960: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
8970: 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22  ubst ${sql(3)}]"
8980: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8990: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
89a0: 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74  teDataReader dat
89b0: 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e  aReader = comman
89c0: 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  d.ExecuteReader(
89d0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
89e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89f0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
8a00: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
8a10: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
8a20: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
8a30: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
8a40: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
8a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8a70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8a90: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
8aa0: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
8ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ac0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
8ad0: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
8ae0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8af0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
8b00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8b10: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
8b20: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
8b30: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
8b40: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
8b50: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8b60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b70: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
8b80: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
8b90: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
8ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bb0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72    result.Add(Str
8bc0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22  ing.Format("{0}"
8bd0: 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  , command.Execut
8be0: 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20  eScalar()));..  
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8c00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8c10: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
8c20: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
8c30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
8c50: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
8c60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8c70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8c80: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
8c90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8ca0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
8cb0: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
8cc0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
8cd0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
8d10: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
8d20: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
8d40: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
8d50: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
8d60: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
8d70: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8da0: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
8db0: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
8de0: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
8df0: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
8e00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8e10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8e20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8e30: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
8e40: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
8e50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8e60: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
8e70: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
8e80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8e90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ea0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
8eb0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
8ec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
8ed0: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
8ee0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8ef0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8f40: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
8f50: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
8f60: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8f70: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
8f80: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
8f90: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
8fa0: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
8fb0: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
8fc0: 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d  ors [list System
8fd0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
8fe0: 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a   Eagle.dll]]....
8ff0: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
9000: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
9010: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
9020: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
9030: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
9040: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
9050: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
9060: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
9070: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
9080: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
9090: 69 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20  id} GetList..   
90a0: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
90b0: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
90c0: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
90d0: 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a  esult $result]..
90e0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
90f0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
9100: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
9110: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
9120: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
9130: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
9140: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
9150: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
9160: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
9170: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
9180: 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f   monoCrash211 co
9190: 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70  mmand.sql\..comp
91a0: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
91b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
91c0: 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  te\..defineConst
91d0: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
91e0: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
91f0: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
9200: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
9210: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
9220: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  sult [normalizeV
9230: 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  tabResult {^Ok\.
9240: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
9250: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
9260: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
9270: 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 74 5c 64 2b 20  } 0 \{\{\} t\d+ 
9280: 5c 7b 5c 7d 20 78 5c 64 2b 5c 7d 24 7d 5d 7d 0d  \{\} x\d+\}$}]}.
9290: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
92a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92e0: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
92f0: 65 73 74 20 76 74 61 62 2d 31 2e 37 20 7b 76 69  est vtab-1.7 {vi
9300: 72 74 75 61 6c 20 74 61 62 6c 65 20 78 42 65 73  rtual table xBes
9310: 74 49 6e 64 65 78 20 6d 61 72 73 68 61 6c 6c 69  tIndex marshalli
9320: 6e 67 20 28 31 29 7d 20 2d 73 65 74 75 70 20 7b  ng (1)} -setup {
9330: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
9340: 20 76 74 61 62 2d 31 2e 37 2e 64 62 0d 0a 7d 20   vtab-1.7.db..} 
9350: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
9360: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
9370: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
9380: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
9390: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
93a0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
93b0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
93c0: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
93d0: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
93e0: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  \..    CREATE TA
93f0: 42 4c 45 20 74 24 7b 69 64 7d 28 79 20 43 48 41  BLE t${id}(y CHA
9400: 52 28 31 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50  R(10) NOT NULL P
9410: 52 49 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a  RIMARY KEY); \..
9420: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
9430: 41 4c 20 54 41 42 4c 45 20 75 24 7b 69 64 7d 20  AL TABLE u${id} 
9440: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
9450: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
9460: 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(2) { \..    
9470: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 24 7b 69  INSERT INTO t${i
9480: 64 7d 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  d} SELECT x FROM
9490: 20 75 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   u${id}; \..  }.
94a0: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
94b0: 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20  { \..    SELECT 
94c0: 76 24 7b 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24  v${id}.y FROM t$
94d0: 7b 69 64 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54  {id} v${id} LEFT
94e0: 20 4f 55 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20   OUTER JOIN \.. 
94f0: 20 20 20 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b     u${id} ON u${
9500: 69 64 7d 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79  id}.x = v${id}.y
9510: 20 57 48 45 52 45 20 75 24 7b 69 64 7d 2e 78 20   WHERE u${id}.x 
9520: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20  IS NOT NULL \.. 
9530: 20 20 20 4f 52 44 45 52 20 42 59 20 76 24 7b 69     ORDER BY v${i
9540: 64 7d 2e 79 20 44 45 53 43 3b 20 5c 0d 0a 20 20  d}.y DESC; \..  
9550: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
9560: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
9570: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
9580: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
9590: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
95a0: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
95b0: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
95c0: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
95d0: 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  ns;..    using S
95e0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
95f0: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
9600: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
9610: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
9620: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
9630: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
9640: 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c       public seal
9650: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
9660: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a  oduleTest${id} :
9670: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75   SQLiteModuleEnu
9680: 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 7b  merable..      {
9690: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
96a0: 20 73 74 72 69 6e 67 20 52 65 73 75 6c 74 3b 0d   string Result;.
96b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
9710: 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
9720: 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20  eTest${id}(..   
9730: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
9740: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49  me,..          I
9750: 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d 65  Enumerable enume
9760: 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  rable..         
9770: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20   )..          : 
9780: 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d 65  base(name, enume
9790: 72 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  rable)..        
97a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
97b0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
97c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
97d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9820: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9830: 20 2f 2f 20 42 55 47 46 49 58 3a 20 54 68 69 73   // BUGFIX: This
9840: 20 6d 65 74 68 6f 64 20 68 65 6c 70 73 20 76 65   method helps ve
9850: 72 69 66 79 20 74 69 63 6b 65 74 20 5c 5b 35 36  rify ticket \[56
9860: 66 35 31 31 64 32 36 38 5c 5d 20 69 73 20 66 69  f511d268\] is fi
9870: 78 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  xed...        //
9880: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9890: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
98a0: 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e  ErrorCode BestIn
98b0: 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
98c0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
98d0: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
98e0: 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78       SQLiteIndex
98f0: 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
9900: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
9910: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
9920: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
9930: 74 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65 6e  traintUsages.Len
9940: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
9950: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9960: 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74     if (index.Out
9970: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
9980: 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e 75  sages\[0\] == nu
9990: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
99a0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
99b0: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22  umentException("
99c0: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
99d0: 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29 3b  \[0\] is null");
99e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
99f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9a00: 20 20 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e 73    Result = "Cons
9a10: 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73 20  traintUsages is 
9a20: 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  OK";..          
9a30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  }....          r
9a40: 65 74 75 72 6e 20 62 61 73 65 2e 42 65 73 74 49  eturn base.BestI
9a50: 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e 64 65  ndex(table, inde
9a60: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x);..        }..
9a70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9a80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9ad0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9ae0: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
9af0: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
9b00: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9b10: 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74  c StringList Get
9b20: 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69  List(params stri
9b30: 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d  ng\[\] strings).
9b40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9b50: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
9b60: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
9b70: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
9b80: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9b90: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9ba0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
9bb0: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
9bc0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
9bd0: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
9be0: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
9bf0: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
9c00: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
9c10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
9c20: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
9c30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9c40: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
9c50: 74 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20 3d 20  t${id} module = 
9c60: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
9c70: 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20  Test${id}(..    
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64              "mod
9c90: 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29  ${id}", strings)
9ca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9cb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
9cc0: 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29  teModule(module)
9cd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9ce0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
9cf0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
9d00: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
9d10: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
9d20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9d30: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
9d40: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
9d50: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29  "[subst ${sql(1)
9d60: 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }]";..          
9d70: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63      result.Add(c
9d80: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
9d90: 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e  nQuery().ToStrin
9da0: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
9db0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9dc0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
9dd0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
9de0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
9df0: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
9e20: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
9e30: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
9e40: 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (2)}]";..       
9e50: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
9e60: 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  d(command.Execut
9e70: 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74  eNonQuery().ToSt
9e80: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
9e90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9ea0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
9eb0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
9ec0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
9ed0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
9ee0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9f00: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
9f10: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
9f20: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
9f40: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
9f50: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
9f60: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
9f70: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
9f80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
9fa0: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
9fb0: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
9fc0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
9fd0: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
9fe0: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
9ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a000: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a020: 72 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64 75 6c  result.Add(modul
a030: 65 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20  e.Result);..    
a040: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
a050: 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  on.Close();..   
a060: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
a080: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
a090: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
a0f0: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
a100: 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20   Main()..       
a110: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
a120: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
a130: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
a140: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72  ..    }..  }] tr
a150: 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73  ue true true res
a160: 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73  ults errors [lis
a170: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
a180: 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64  Lite.dll Eagle.d
a190: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24  ll]]....  list $
a1a0: 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d  code $results \.
a1b0: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69  .      [expr {[i
a1c0: 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72  nfo exists error
a1d0: 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22  s] ? $errors : "
a1e0: 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78  "}] \..      [ex
a1f0: 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b  pr {$code eq "Ok
a200: 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20  " ? [catch {..  
a210: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
a220: 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  oke _Dynamic${id
a230: 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c  }.Test${id} GetL
a240: 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  ist one two thre
a250: 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d  e 4 5.0..      }
a260: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
a270: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f  result ""]}] [no
a280: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
a290: 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63  t $result]..} -c
a2a0: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
a2b0: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
a2c0: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
a2d0: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
a2e0: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
a2f0: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
a300: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
a310: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
a320: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
a330: 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e  ct monoBug28 mon
a340: 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e  oCrash211 comman
a350: 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e  d.sql\..compile.
a360: 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74  DATA SQLite Syst
a370: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d  em.Data.SQLite\.
a380: 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
a390: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
a3a0: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
a3b0: 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65  AL_TABLE compile
a3c0: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c  CSharp} -match \
a3d0: 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  ..regexp -result
a3e0: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
a3f0: 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  esult {^Ok\..Sys
a400: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
a410: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
a420: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20  ults#\d+ \{\} 0 
a430: 5c 7b 30 20 35 20 74 77 6f 20 74 68 72 65 65 20  \{0 5 two three 
a440: 6f 6e 65 20 35 5c 2e 30 5c 0d 0a 34 20 5c 7b 43  one 5\.0\..4 \{C
a450: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20  onstraintUsages 
a460: 69 73 20 4f 4b 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d  is OK\}\}$}]}...
a470: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
a480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a4c0: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
a4d0: 74 20 76 74 61 62 2d 31 2e 38 20 7b 76 69 72 74  t vtab-1.8 {virt
a4e0: 75 61 6c 20 74 61 62 6c 65 20 78 42 65 73 74 49  ual table xBestI
a4f0: 6e 64 65 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67  ndex marshalling
a500: 20 28 32 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a   (2)} -setup {..
a510: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76    set fileName v
a520: 74 61 62 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62  tab-1.8.db..} -b
a530: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
a540: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
a550: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
a560: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
a570: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
a580: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
a590: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
a5a0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
a5b0: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
a5c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
a5d0: 45 20 74 24 7b 69 64 7d 28 79 20 43 48 41 52 28  E t${id}(y CHAR(
a5e0: 31 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49  10) NOT NULL PRI
a5f0: 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20  MARY KEY); \..  
a600: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
a610: 20 54 41 42 4c 45 20 75 24 7b 69 64 7d 20 55 53   TABLE u${id} US
a620: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
a630: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
a640: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e  l(2) { \..    IN
a650: 53 45 52 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d  SERT INTO t${id}
a660: 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 75   SELECT x FROM u
a670: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
a680: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
a690: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 76 24  \..    SELECT v$
a6a0: 7b 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69  {id}.y FROM t${i
a6b0: 64 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f  d} v${id} LEFT O
a6c0: 55 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20  UTER JOIN \..   
a6d0: 20 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64   u${id} ON u${id
a6e0: 7d 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57  }.x = v${id}.y W
a6f0: 48 45 52 45 20 75 24 7b 69 64 7d 2e 78 20 49 53  HERE u${id}.x IS
a700: 20 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20   NOT NULL \..   
a710: 20 41 4e 44 20 75 24 7b 69 64 7d 2e 78 20 42 45   AND u${id}.x BE
a720: 54 57 45 45 4e 20 27 6f 6e 65 27 20 61 6e 64 20  TWEEN 'one' and 
a730: 27 74 68 72 65 65 27 20 4f 52 44 45 52 20 42 59  'three' ORDER BY
a740: 20 75 24 7b 69 64 7d 2e 78 20 41 53 43 2c 20 5c   u${id}.x ASC, \
a750: 0d 0a 20 20 20 20 75 24 7b 69 64 7d 2e 78 20 44  ..    u${id}.x D
a760: 45 53 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  ESC; \..  }.... 
a770: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
a780: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
a790: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
a7a0: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
a7b0: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
a7c0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
a7d0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
a7e0: 2e 43 6f 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20  .Collections;.. 
a7f0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
a800: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20  Data.SQLite;..  
a810: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
a820: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
a830: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
a840: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
a850: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
a860: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
a870: 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ss SQLiteModuleT
a880: 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74  est${id} : SQLit
a890: 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c  eModuleEnumerabl
a8a0: 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  e..      {..    
a8b0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
a8c0: 67 20 52 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20  g Result;....   
a8d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a920: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
a930: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
a940: 7b 69 64 7d 28 0d 0a 20 20 20 20 20 20 20 20 20  {id}(..         
a950: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
a960: 20 20 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72           IEnumer
a970: 61 62 6c 65 20 65 6e 75 6d 65 72 61 62 6c 65 0d  able enumerable.
a980: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
a990: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 6e          : base(n
a9a0: 61 6d 65 2c 20 65 6e 75 6d 65 72 61 62 6c 65 29  ame, enumerable)
a9b0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a9c0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
a9d0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
a9e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
aa40: 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55  /..        // BU
aa50: 47 46 49 58 3a 20 54 68 69 73 20 6d 65 74 68 6f  GFIX: This metho
aa60: 64 20 68 65 6c 70 73 20 76 65 72 69 66 79 20 74  d helps verify t
aa70: 69 63 6b 65 74 20 5c 5b 35 36 66 35 31 31 64 32  icket \[56f511d2
aa80: 36 38 5c 5d 20 69 73 20 66 69 78 65 64 2e 0d 0a  68\] is fixed...
aa90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
aaa0: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
aab0: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
aac0: 6f 64 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a  ode BestIndex(..
aad0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
aae0: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
aaf0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 53  le,..          S
ab00: 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
ab10: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
ab20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ab30: 20 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75      if (index.Ou
ab40: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
ab50: 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 20 3e 20  Usages.Length > 
ab60: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  0)..          {.
ab70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
ab80: 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43  (index.Outputs.C
ab90: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 5c  onstraintUsages\
aba0: 5b 30 5c 5d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  [0\] == null).. 
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
abc0: 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
abd0: 78 63 65 70 74 69 6f 6e 28 22 43 6f 6e 73 74 72  xception("Constr
abe0: 61 69 6e 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20  aintUsages\[0\] 
abf0: 69 73 20 6e 75 6c 6c 22 29 3b 0d 0a 20 20 20 20  is null");..    
ac00: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 73 75              Resu
ac20: 6c 74 20 3d 20 22 43 6f 6e 73 74 72 61 69 6e 74  lt = "Constraint
ac30: 55 73 61 67 65 73 20 69 73 20 4f 4b 22 3b 0d 0a  Usages is OK";..
ac40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ac50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
ac60: 62 61 73 65 2e 42 65 73 74 49 6e 64 65 78 28 74  base.BestIndex(t
ac70: 61 62 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  able, index);.. 
ac80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ac90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ace0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75  ////....      pu
acf0: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
ad00: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
ad10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
ad20: 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69  blic static Stri
ad30: 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70  ngList GetList(p
ad40: 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d  arams string\[\]
ad50: 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20   strings)..     
ad60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ad70: 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c  StringList resul
ad80: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  t = new StringLi
ad90: 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
ada0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
adb0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
adc0: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
add0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
adf0: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
ae00: 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74  Source};[getTest
ae10: 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a  Properties]"))..
ae20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ae30: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
ae40: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
ae50: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
ae60: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
ae70: 20 6d 6f 64 75 6c 65 20 3d 20 6e 65 77 20 53 51   module = new SQ
ae80: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
ae90: 69 64 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  id}(..          
aea0: 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22        "mod${id}"
aeb0: 2c 20 73 74 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20  , strings);.... 
aec0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65             conne
aed0: 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75  ction.CreateModu
aee0: 6c 65 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20  le(module);.... 
aef0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
af00: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
af10: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
af20: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
af30: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
af40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
af50: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
af60: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
af70: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
af90: 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64  sult.Add(command
afa0: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
afb0: 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  ().ToString());.
afc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
afd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
afe0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
aff0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
b000: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
b010: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
b020: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b030: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
b040: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
b050: 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22  ubst ${sql(2)}]"
b060: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b070: 20 72 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d   result.Add(comm
b080: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
b090: 65 72 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29  ery().ToString()
b0a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b0b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b0c0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
b0d0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
b0e0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
b0f0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
b100: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b110: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
b120: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
b130: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29  "[subst ${sql(3)
b140: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
b150: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
b160: 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61  iteDataReader da
b170: 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61  taReader = comma
b180: 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  nd.ExecuteReader
b190: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
b1a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b1b0: 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 61 74        while (dat
b1c0: 61 52 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d  aReader.Read()).
b1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b1e0: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61     result.Add(da
b1f0: 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f  taReader\[0\].To
b200: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
b210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b220: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
b230: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
b240: 2e 41 64 64 28 6d 6f 64 75 6c 65 2e 52 65 73 75  .Add(module.Resu
b250: 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lt);..          
b260: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f    connection.Clo
b270: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
b280: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b290: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
b2a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b2b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b300: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
b310: 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28  tatic void Main(
b320: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
b330: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
b340: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
b350: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
b360: 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75  }..  }] true tru
b370: 65 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65  e true results e
b380: 72 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74  rrors [list Syst
b390: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
b3a0: 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a  ll Eagle.dll]]..
b3b0: 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24  ..  list $code $
b3c0: 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20  results \..     
b3d0: 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78   [expr {[info ex
b3e0: 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24  ists errors] ? $
b3f0: 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d  errors : ""}] \.
b400: 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63  .      [expr {$c
b410: 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63  ode eq "Ok" ? [c
b420: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..        
b430: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44  object invoke _D
b440: 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74  ynamic${id}.Test
b450: 24 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e  ${id} GetList on
b460: 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e  e two three 4 5.
b470: 30 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  0..      } resul
b480: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
b490: 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a   ""]}] [normaliz
b4a0: 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73  eVtabResult $res
b4b0: 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ult]..} -cleanup
b4c0: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
b4d0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
b4e0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
b4f0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73   result code res
b500: 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20  ults errors sql 
b510: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
b520: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
b530: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
b540: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
b550: 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68  oBug28 monoCrash
b560: 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c  211 command.sql\
b570: 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  ..compile.DATA S
b580: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
b590: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
b5a0: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
b5b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
b5c0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
b5d0: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
b5e0: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
b5f0: 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d  xp -result [norm
b600: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
b610: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
b620: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
b630: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
b640: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 30 20 35 20  d+ \{\} 0 \{0 5 
b650: 6f 6e 65 20 74 68 72 65 65 5c 0d 0a 5c 7b 43 6f  one three\..\{Co
b660: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 69  nstraintUsages i
b670: 73 20 4f 4b 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  s OK\}\}$}]}....
b680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
b6d0: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
b6e0: 20 76 74 61 62 2d 31 2e 39 20 7b 49 45 6e 75 6d   vtab-1.9 {IEnum
b6f0: 65 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74  erable virtual t
b700: 61 62 6c 65 20 77 2f 6c 61 72 67 65 20 62 79 74  able w/large byt
b710: 65 20 61 72 72 61 79 7d 20 2d 73 65 74 75 70 20  e array} -setup 
b720: 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d  {..  set fileNam
b730: 65 20 76 74 61 62 2d 31 2e 39 2e 64 62 0d 0a 7d  e vtab-1.9.db..}
b740: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
b750: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
b760: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
b770: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
b780: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
b790: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
b7a0: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
b7b0: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
b7c0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b  ..  set sql(1) {
b7d0: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56   \..    CREATE V
b7e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b  IRTUAL TABLE t${
b7f0: 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69  id} USING mod${i
b800: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
b810: 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a  set sql(2) { \..
b820: 20 20 20 20 53 45 4c 45 43 54 20 53 55 4d 28 78      SELECT SUM(x
b830: 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c  ) FROM t${id}; \
b840: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
b850: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
b860: 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  ults errors.... 
b870: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
b880: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
b890: 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67  bst {..    using
b8a0: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73   System;..    us
b8b0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
b8c0: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
b8d0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
b8e0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
b8f0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b900: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
b910: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
b920: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b930: 69 63 20 6f 62 6a 65 63 74 20 47 65 74 53 75 6d  ic object GetSum
b940: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
b950: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
b960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b970: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
b980: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
b990: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
b9a0: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
b9b0: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
b9c0: 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
b9d0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
b9e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
b9f0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
ba00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ba10: 20 62 79 74 65 5c 5b 5c 5d 20 62 79 74 65 73 20   byte\[\] bytes 
ba20: 3d 20 6e 65 77 20 62 79 74 65 5c 5b 31 30 34 38  = new byte\[1048
ba30: 35 37 36 5c 5d 3b 0d 0a 20 20 20 20 20 20 20 20  576\];..        
ba40: 20 20 20 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29      new Random()
ba50: 2e 4e 65 78 74 42 79 74 65 73 28 62 79 74 65 73  .NextBytes(bytes
ba60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ba70: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
ba80: 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51  ateModule(new SQ
ba90: 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72  LiteModuleEnumer
baa0: 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
bab0: 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c       "mod${id}",
bac0: 20 62 79 74 65 73 29 29 3b 0d 0a 0d 0a 20 20 20   bytes));....   
bad0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
bae0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
baf0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
bb00: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
bb10: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
bb20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bb30: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
bb40: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
bb50: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
bb70: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
bb80: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
bb90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
bba0: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
bbb0: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
bbc0: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
bbd0: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
bbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
bc00: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
bc10: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
bc20: 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(2)}]";..      
bc30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
bc40: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63  ommand.ExecuteSc
bc50: 61 6c 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  alar();..       
bc60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bc70: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
bc80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
bce0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
bcf0: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
bd00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
bd10: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
bd20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
bd30: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
bd40: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
bd50: 6c 74 73 20 65 72 72 6f 72 73 20 53 79 73 74 65  lts errors Syste
bd60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
bd70: 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  l]....  list $co
bd80: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
bd90: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
bda0: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
bdb0: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
bdc0: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
bdd0: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
bde0: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
bdf0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
be00: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
be10: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 53 75 6d  Test${id} GetSum
be20: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
be30: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
be40: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
be50: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
be60: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
be70: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
be80: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
be90: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
bea0: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
beb0: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
bec0: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
bed0: 65 4e 61 6d 65 0d 0a 7d 20 2d 74 69 6d 65 20 74  eName..} -time t
bee0: 72 75 65 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  rue -constraints
bef0: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
bf00: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
bf10: 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 5c 0d 0a   monoCrash211\..
bf20: 63 6f 6d 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70  command.sql comp
bf30: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
bf40: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
bf50: 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  te\..defineConst
bf60: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
bf70: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
bf80: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
bf90: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
bfa0: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
bfb0: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  sult [normalizeV
bfc0: 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  tabResult {^Ok\.
bfd0: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
bfe0: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
bff0: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
c000: 7d 20 30 20 28 3f 3a 2d 29 3f 5c 64 2b 24 7d 5d  } 0 (?:-)?\d+$}]
c010: 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23  }....###########
c020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c060: 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20  ####....runTest 
c070: 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 31 30 20  {test vtab-1.10 
c080: 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78  {virtual table x
c090: 52 6f 77 49 64 20 75 6e 69 71 75 65 6e 65 73 73  RowId uniqueness
c0a0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
c0b0: 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d  t fileName vtab-
c0c0: 31 2e 31 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  1.10.db..} -body
c0d0: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
c0e0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
c0f0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
c100: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
c110: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
c120: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
c130: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
c140: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
c150: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
c160: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
c170: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
c180: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
c190: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
c1a0: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
c1b0: 4c 45 43 54 20 43 41 53 45 20 57 48 45 4e 20 30  LECT CASE WHEN 0
c1c0: 20 54 48 45 4e 20 72 6f 77 49 64 20 45 4c 53 45   THEN rowId ELSE
c1d0: 20 72 6f 77 49 64 20 45 4e 44 2c 20 5c 0d 0a 20   rowId END, \.. 
c1e0: 20 20 20 20 20 20 20 20 20 20 43 41 53 45 20 57            CASE W
c1f0: 48 45 4e 20 31 20 54 48 45 4e 20 72 6f 77 49 64  HEN 1 THEN rowId
c200: 20 45 4c 53 45 20 72 6f 77 49 64 20 45 4e 44 20   ELSE rowId END 
c210: 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a  FROM t${id}; \..
c220: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
c230: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
c240: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
c250: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
c260: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
c270: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
c280: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
c290: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
c2a0: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
c2b0: 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65   Eagle._Containe
c2c0: 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20  rs.Public;....  
c2d0: 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e    namespace _Dyn
c2e0: 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b  amic${id}..    {
c2f0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
c300: 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73 74  tatic class Test
c310: 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a  ${id}..      {..
c320: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
c330: 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74  tatic StringList
c340: 20 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20   GetList(params 
c350: 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e  string\[\] strin
c360: 67 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  gs)..        {..
c370: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
c380: 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65  List result = ne
c390: 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
c3a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  ...          usi
c3b0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
c3c0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
c3d0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
c3e0: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
c3f0: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
c400: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
c410: 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72  };[getTestProper
c420: 74 69 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20  ties]"))..      
c430: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c440: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
c450: 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  en();....       
c460: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
c470: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77  CreateModule(new
c480: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75   SQLiteModuleEnu
c490: 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  merable(..      
c4a0: 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64          "mod${id
c4b0: 7d 22 2c 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a  }", strings));..
c4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
c4d0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
c4e0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
c4f0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
c500: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
c510: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c520: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
c530: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
c540: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
c550: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
c560: 20 72 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d   result.Add(comm
c570: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
c580: 65 72 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29  ery().ToString()
c590: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c5a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c5b0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
c5c0: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
c5d0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
c5e0: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
c5f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c600: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
c610: 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20  d.CommandText = 
c620: 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29  "[subst ${sql(2)
c630: 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }]";....        
c640: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
c650: 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61  iteDataReader da
c660: 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61  taReader = comma
c670: 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  nd.ExecuteReader
c680: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
c690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c6a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c6b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
c6c0: 45 3a 20 4d 61 73 6b 20 6f 66 66 20 74 68 65 20  E: Mask off the 
c6d0: 68 61 73 68 20 63 6f 64 65 20 70 6f 72 74 69 6f  hash code portio
c6e0: 6e 20 62 65 63 61 75 73 65 20 69 74 20 64 69 66  n because it dif
c6f0: 66 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  fers..          
c700: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
c710: 65 74 77 65 65 6e 20 66 72 61 6d 65 77 6f 72 6b  etween framework
c720: 20 76 65 72 73 69 6f 6e 73 2e 0d 0a 20 20 20 20   versions...    
c730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c750: 6c 6f 6e 67 20 6d 61 73 6b 20 3d 20 75 6e 63 68  long mask = unch
c760: 65 63 6b 65 64 28 28 6c 6f 6e 67 29 30 78 46 46  ecked((long)0xFF
c770: 46 46 46 46 46 46 30 30 30 30 30 30 30 30 29 3b  FFFFFF00000000);
c780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c790: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
c7a0: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c7d0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 28      result.Add((
c7e0: 64 61 74 61 52 65 61 64 65 72 2e 47 65 74 49 6e  dataReader.GetIn
c7f0: 74 36 34 28 30 29 20 26 20 6d 61 73 6b 29 2e 54  t64(0) & mask).T
c800: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c820: 65 73 75 6c 74 2e 41 64 64 28 28 64 61 74 61 52  esult.Add((dataR
c830: 65 61 64 65 72 2e 47 65 74 49 6e 74 36 34 28 31  eader.GetInt64(1
c840: 29 20 26 20 6d 61 73 6b 29 2e 54 6f 53 74 72 69  ) & mask).ToStri
c850: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
c860: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c870: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c880: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c890: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
c8a0: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
c8b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c8c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
c8d0: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
c8e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c930: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
c940: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
c950: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
c960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
c970: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
c980: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
c990: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
c9a0: 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72 65  rue true true re
c9b0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69  sults errors [li
c9c0: 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  st System.Data.S
c9d0: 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e  QLite.dll Eagle.
c9e0: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  dll]]....  list 
c9f0: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
ca00: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
ca10: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
ca20: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
ca30: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
ca40: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
ca50: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
ca60: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
ca70: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
ca80: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74  d}.Test${id} Get
ca90: 4c 69 73 74 20 6f 6e 65 20 6f 6e 65 20 74 77 6f  List one one two
caa0: 20 6f 6e 65 20 74 77 6f 20 74 77 6f 0d 0a 20 20   one two two..  
cab0: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
cac0: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
cad0: 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  ] [normalizeVtab
cae0: 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d  Result $result].
caf0: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
cb00: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
cb10: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
cb20: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
cb30: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
cb40: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
cb50: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
cb60: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
cb70: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
cb80: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
cb90: 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63  8 monoCrash211 c
cba0: 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d  ommand.sql\..com
cbb0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
cbc0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
cbd0: 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  ite\..defineCons
cbe0: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
cbf0: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
cc00: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f  VIRTUAL_TABLE co
cc10: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
cc20: 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72  tch \..regexp -r
cc30: 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65  esult [normalize
cc40: 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c  VtabResult {^Ok\
cc50: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
cc60: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
cc70: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
cc80: 5c 7d 20 30 20 5c 7b 30 20 34 32 39 34 39 36 37  \} 0 \{0 4294967
cc90: 32 39 36 20 34 32 39 34 39 36 37 32 39 36 5c 0d  296 4294967296\.
cca0: 0a 38 35 38 39 39 33 34 35 39 32 20 38 35 38 39  .8589934592 8589
ccb0: 39 33 34 35 39 32 20 31 32 38 38 34 39 30 31 38  934592 128849018
ccc0: 38 38 20 31 32 38 38 34 39 30 31 38 38 38 20 31  88 12884901888 1
ccd0: 37 31 37 39 38 36 39 31 38 34 20 31 37 31 37 39  7179869184 17179
cce0: 38 36 39 31 38 34 5c 0d 0a 32 31 34 37 34 38 33  869184\..2147483
ccf0: 36 34 38 30 20 32 31 34 37 34 38 33 36 34 38 30  6480 21474836480
cd00: 20 32 35 37 36 39 38 30 33 37 37 36 20 32 35 37   25769803776 257
cd10: 36 39 38 30 33 37 37 36 5c 7d 24 7d 5d 7d 0d 0a  69803776\}$}]}..
cd20: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
cd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd70: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
cd80: 73 74 20 76 74 61 62 2d 31 2e 31 31 20 7b 49 45  st vtab-1.11 {IE
cd90: 6e 75 6d 65 72 61 62 6c 65 20 76 69 72 74 75 61  numerable virtua
cda0: 6c 20 74 61 62 6c 65 20 77 2f 6f 62 6a 65 63 74  l table w/object
cdb0: 20 69 64 65 6e 74 69 74 79 7d 20 2d 73 65 74 75   identity} -setu
cdc0: 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e  p {..  set fileN
cdd0: 61 6d 65 20 76 74 61 62 2d 31 2e 31 31 2e 64 62  ame vtab-1.11.db
cde0: 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73  ..} -body {..  s
cdf0: 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e  et id [object in
ce00: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
ce10: 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49  .GetActive NextI
ce20: 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f  d]..  set dataSo
ce30: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
ce40: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
ce50: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65  ctory] $fileName
ce60: 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31  ]....  set sql(1
ce70: 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54  ) { \..    CREAT
ce80: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
ce90: 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64  t${id} USING mod
cea0: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
ceb0: 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20  .  set sql(2) { 
cec0: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f  \..    SELECT ro
ced0: 77 49 64 2c 20 2a 20 46 52 4f 4d 20 74 24 7b 69  wId, * FROM t${i
cee0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
cef0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
cf00: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
cf10: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
cf20: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
cf30: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
cf40: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20  using System;.. 
cf50: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
cf60: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20  Data.SQLite;..  
cf70: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
cf80: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
cf90: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
cfa0: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
cfb0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
cfc0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
cfd0: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
cfe0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
cff0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
d000: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
d010: 70 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c  params string\[\
d020: 5d 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20  ] strings)..    
d030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d040: 20 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75   StringList resu
d050: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c  lt = new StringL
d060: 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
d070: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
d080: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
d090: 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c  ection = new SQL
d0a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a  iteConnection(..
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
d0c0: 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74  ata Source=${dat
d0d0: 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73  aSource};[getTes
d0e0: 74 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d  tProperties]")).
d0f0: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
d100: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
d110: 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a  tion.Open();....
d120: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
d130: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64  ection.CreateMod
d140: 75 6c 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f  ule(new SQLiteMo
d150: 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d  duleEnumerable(.
d160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
d170: 6d 6f 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e  mod${id}", strin
d180: 67 73 2c 20 74 72 75 65 29 29 3b 0d 0a 0d 0a 20  gs, true));.... 
d190: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
d1a0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
d1b0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
d1c0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
d1d0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
d1e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d1f0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
d200: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
d210: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
d230: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
d240: 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
d250: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d260: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
d270: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
d280: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
d290: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
d2a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2c0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
d2d0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
d2e0: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(2)}]";....  
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
d300: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
d310: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
d320: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
d330: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
d340: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d350: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
d360: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
d370: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
d380: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d390: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
d3a0: 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65  lt.Add(dataReade
d3b0: 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28  r\[0\].ToString(
d3c0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
d3d0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
d3e0: 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 31 5c  d(dataReader\[1\
d3f0: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ].ToString());..
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
d420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d430: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
d440: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73   connection.Clos
d450: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
d460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  }....          r
d470: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
d480: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d490: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d4e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d4f0: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
d500: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
d510: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
d520: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
d530: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
d540: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65  ..  }] true true
d550: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
d560: 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65  rors [list Syste
d570: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
d580: 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d  l Eagle.dll]]...
d590: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
d5a0: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
d5b0: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
d5c0: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
d5d0: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
d5e0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
d5f0: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
d600: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
d610: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
d620: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
d630: 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65  {id} GetList one
d640: 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30   two three 4 5.0
d650: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
d660: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
d670: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
d680: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
d690: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
d6a0: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
d6b0: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
d6c0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
d6d0: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
d6e0: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
d6f0: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
d700: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
d710: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
d720: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
d730: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
d740: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
d750: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
d760: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
d770: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
d780: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
d790: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
d7a0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
d7b0: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
d7c0: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
d7d0: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
d7e0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
d7f0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
d800: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
d810: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
d820: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 2d 3f 5c 64 2b  + \{\} 0 \{-?\d+
d830: 20 6f 6e 65 20 2d 3f 5c 64 2b 20 74 77 6f 20 2d   one -?\d+ two -
d840: 3f 5c 64 2b 5c 0d 0a 74 68 72 65 65 20 2d 3f 5c  ?\d+\..three -?\
d850: 64 2b 20 34 20 2d 3f 5c 64 2b 20 35 5c 2e 30 5c  d+ 4 -?\d+ 5\.0\
d860: 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }$}]}....#######
d870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d8b0: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
d8c0: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
d8d0: 2e 31 32 20 7b 53 51 4c 69 74 65 49 6e 64 65 78  .12 {SQLiteIndex
d8e0: 20 6d 61 6e 61 67 65 64 2d 74 6f 2d 6e 61 74 69   managed-to-nati
d8f0: 76 65 2d 74 6f 2d 6d 61 6e 61 67 65 64 7d 20 2d  ve-to-managed} -
d900: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 6e  setup {..  set n
d910: 43 6f 6e 73 74 72 61 69 6e 74 20 33 3b 20 73 65  Constraint 3; se
d920: 74 20 6e 4f 72 64 65 72 42 79 20 33 0d 0a 7d 20  t nOrderBy 3..} 
d930: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
d940: 6e 64 65 78 28 31 29 20 5b 6f 62 6a 65 63 74 20  ndex(1) [object 
d950: 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66  create -alias -f
d960: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
d970: 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e  \..      System.
d980: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
d990: 74 65 49 6e 64 65 78 20 24 6e 43 6f 6e 73 74 72  teIndex $nConstr
d9a0: 61 69 6e 74 20 24 6e 4f 72 64 65 72 42 79 5d 0d  aint $nOrderBy].
d9b0: 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 43  ...  for {set iC
d9c0: 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20 7b 24 69  onstraint 0} {$i
d9d0: 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 24 6e 43  Constraint < $nC
d9e0: 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69 6e 63 72  onstraint} {incr
d9f0: 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0d   iConstraint} {.
da00: 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72 61  .    set constra
da10: 69 6e 74 28 31 29 20 5b 6f 62 6a 65 63 74 20 63  int(1) [object c
da20: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c  reate -alias -fl
da30: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
da40: 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d  ..        System
da50: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
da60: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
da70: 6e 74 20 30 20 30 20 30 20 30 5d 0d 0a 0d 0a 20  nt 0 0 0 0].... 
da80: 20 20 20 24 69 6e 64 65 78 28 31 29 20 49 6e 70     $index(1) Inp
da90: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
daa0: 53 65 74 56 61 6c 75 65 20 24 63 6f 6e 73 74 72  SetValue $constr
dab0: 61 69 6e 74 28 31 29 20 24 69 43 6f 6e 73 74 72  aint(1) $iConstr
dac0: 61 69 6e 74 0d 0a 0d 0a 20 20 20 20 24 63 6f 6e  aint....    $con
dad0: 73 74 72 61 69 6e 74 28 31 29 20 69 43 6f 6c 75  straint(1) iColu
dae0: 6d 6e 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78  mn [expr {int(0x
daf0: 30 31 32 33 34 35 36 37 20 2b 20 24 69 43 6f 6e  01234567 + $iCon
db00: 73 74 72 61 69 6e 74 29 7d 5d 0d 0a 20 20 20 20  straint)}]..    
db10: 24 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 6f  $constraint(1) o
db20: 70 20 5b 65 78 70 72 20 7b 30 78 46 46 20 2d 20  p [expr {0xFF - 
db30: 24 69 43 6f 6e 73 74 72 61 69 6e 74 7d 5d 0d 0a  $iConstraint}]..
db40: 20 20 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 28      $constraint(
db50: 31 29 20 75 73 61 62 6c 65 20 5b 65 78 70 72 20  1) usable [expr 
db60: 7b 30 78 43 43 20 2b 20 24 69 43 6f 6e 73 74 72  {0xCC + $iConstr
db70: 61 69 6e 74 7d 5d 0d 0a 20 20 20 20 24 63 6f 6e  aint}]..    $con
db80: 73 74 72 61 69 6e 74 28 31 29 20 69 54 65 72 6d  straint(1) iTerm
db90: 4f 66 66 73 65 74 20 5b 65 78 70 72 20 7b 69 6e  Offset [expr {in
dba0: 74 28 30 78 38 39 41 42 43 44 45 46 20 2b 20 24  t(0x89ABCDEF + $
dbb0: 69 43 6f 6e 73 74 72 61 69 6e 74 29 7d 5d 0d 0a  iConstraint)}]..
dbc0: 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65    }....  for {se
dbd0: 74 20 69 4f 72 64 65 72 42 79 20 30 7d 20 7b 24  t iOrderBy 0} {$
dbe0: 69 4f 72 64 65 72 42 79 20 3c 20 24 6e 4f 72 64  iOrderBy < $nOrd
dbf0: 65 72 42 79 7d 20 7b 69 6e 63 72 20 69 4f 72 64  erBy} {incr iOrd
dc00: 65 72 42 79 7d 20 7b 0d 0a 20 20 20 20 73 65 74  erBy} {..    set
dc10: 20 6f 72 64 65 72 42 79 28 31 29 20 5b 6f 62 6a   orderBy(1) [obj
dc20: 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61  ect create -alia
dc30: 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  s -flags +NonPub
dc40: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 53  lic \..        S
dc50: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
dc60: 65 2e 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  e.SQLiteIndexOrd
dc70: 65 72 42 79 20 30 20 30 5d 0d 0a 0d 0a 20 20 20  erBy 0 0]....   
dc80: 20 24 69 6e 64 65 78 28 31 29 20 49 6e 70 75 74   $index(1) Input
dc90: 73 2e 4f 72 64 65 72 42 79 73 2e 53 65 74 56 61  s.OrderBys.SetVa
dca0: 6c 75 65 20 24 6f 72 64 65 72 42 79 28 31 29 20  lue $orderBy(1) 
dcb0: 24 69 4f 72 64 65 72 42 79 0d 0a 0d 0a 20 20 20  $iOrderBy....   
dcc0: 20 24 6f 72 64 65 72 42 79 28 31 29 20 69 43 6f   $orderBy(1) iCo
dcd0: 6c 75 6d 6e 20 5b 65 78 70 72 20 7b 69 6e 74 28  lumn [expr {int(
dce0: 30 78 32 33 30 31 36 37 34 35 20 2b 20 24 69 4f  0x23016745 + $iO
dcf0: 72 64 65 72 42 79 29 7d 5d 0d 0a 20 20 20 20 24  rderBy)}]..    $
dd00: 6f 72 64 65 72 42 79 28 31 29 20 64 65 73 63 20  orderBy(1) desc 
dd10: 5b 65 78 70 72 20 7b 30 78 46 46 20 2d 20 24 69  [expr {0xFF - $i
dd20: 4f 72 64 65 72 42 79 7d 5d 0d 0a 20 20 7d 0d 0a  OrderBy}]..  }..
dd30: 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 43 6f  ..  for {set iCo
dd40: 6e 73 74 72 61 69 6e 74 20 30 7d 20 7b 24 69 43  nstraint 0} {$iC
dd50: 6f 6e 73 74 72 61 69 6e 74 20 3c 20 24 6e 43 6f  onstraint < $nCo
dd60: 6e 73 74 72 61 69 6e 74 7d 20 7b 69 6e 63 72 20  nstraint} {incr 
dd70: 69 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0d 0a  iConstraint} {..
dd80: 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72 61 69      set constrai
dd90: 6e 74 55 73 61 67 65 28 31 29 20 5b 6f 62 6a 65  ntUsage(1) [obje
dda0: 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
ddb0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
ddc0: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79  ic \..        Sy
ddd0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
dde0: 2e 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73  .SQLiteIndexCons
ddf0: 74 72 61 69 6e 74 55 73 61 67 65 20 30 20 30 5d  traintUsage 0 0]
de00: 0d 0a 0d 0a 20 20 20 20 24 69 6e 64 65 78 28 31  ....    $index(1
de10: 29 20 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  ) Outputs.Constr
de20: 61 69 6e 74 55 73 61 67 65 73 2e 53 65 74 56 61  aintUsages.SetVa
de30: 6c 75 65 20 24 63 6f 6e 73 74 72 61 69 6e 74 55  lue $constraintU
de40: 73 61 67 65 28 31 29 20 5c 0d 0a 20 20 20 20 20  sage(1) \..     
de50: 20 20 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 0d     $iConstraint.
de60: 0a 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69  ...    $constrai
de70: 6e 74 55 73 61 67 65 28 31 29 20 61 72 67 76 49  ntUsage(1) argvI
de80: 6e 64 65 78 20 5b 65 78 70 72 20 7b 69 6e 74 28  ndex [expr {int(
de90: 30 78 41 42 38 39 45 46 43 44 20 2b 20 24 69 43  0xAB89EFCD + $iC
dea0: 6f 6e 73 74 72 61 69 6e 74 29 7d 5d 0d 0a 20 20  onstraint)}]..  
deb0: 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61    $constraintUsa
dec0: 67 65 28 31 29 20 6f 6d 69 74 20 5b 65 78 70 72  ge(1) omit [expr
ded0: 20 7b 30 78 43 43 20 2b 20 24 69 43 6f 6e 73 74   {0xCC + $iConst
dee0: 72 61 69 6e 74 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a  raint}]..  }....
def0: 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70    $index(1) Outp
df00: 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 20  uts.IndexNumber 
df10: 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 41 41 41  [expr {int(0xAAA
df20: 41 41 41 41 41 29 7d 5d 0d 0a 20 20 24 69 6e 64  AAAAA)}]..  $ind
df30: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 49 6e  ex(1) Outputs.In
df40: 64 65 78 53 74 72 69 6e 67 20 22 5c 78 30 31 74  dexString "\x01t
df50: 65 73 74 20 69 6e 64 65 78 20 73 74 72 69 6e 67  est index string
df60: 2e 5c 78 46 46 22 0d 0a 20 20 24 69 6e 64 65 78  .\xFF"..  $index
df70: 28 31 29 20 4f 75 74 70 75 74 73 2e 4e 65 65 64  (1) Outputs.Need
df80: 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e  ToFreeIndexStrin
df90: 67 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 35  g [expr {int(0x5
dfa0: 35 35 35 35 35 35 35 29 7d 5d 0d 0a 20 20 24 69  5555555)}]..  $i
dfb0: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
dfc0: 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20  OrderByConsumed 
dfd0: 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 33 33 33  [expr {int(0x333
dfe0: 33 33 33 33 33 29 7d 5d 0d 0a 20 20 24 69 6e 64  33333)}]..  $ind
dff0: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 45 73  ex(1) Outputs.Es
e000: 74 69 6d 61 74 65 64 43 6f 73 74 20 31 2e 30 0d  timatedCost 1.0.
e010: 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78  ...  if {[$index
e020: 28 31 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55  (1) Outputs.CanU
e030: 73 65 45 73 74 69 6d 61 74 65 64 52 6f 77 73 5d  seEstimatedRows]
e040: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 24 69  } then {..    $i
e050: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
e060: 45 73 74 69 6d 61 74 65 64 52 6f 77 73 20 5b 65  EstimatedRows [e
e070: 78 70 72 20 7b 69 6e 74 28 30 78 43 43 43 43 43  xpr {int(0xCCCCC
e080: 43 43 43 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  CCC)}]..  }.... 
e090: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
e0a0: 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 49 6e  Outputs.CanUseIn
e0b0: 64 65 78 46 6c 61 67 73 5d 7d 20 74 68 65 6e 20  dexFlags]} then 
e0c0: 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78 28 31 29  {..    $index(1)
e0d0: 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 46 6c   Outputs.IndexFl
e0e0: 61 67 73 20 5b 65 78 70 72 20 7b 69 6e 74 28 30  ags [expr {int(0
e0f0: 78 45 45 45 45 45 45 45 45 29 7d 5d 0d 0a 20 20  xEEEEEEEE)}]..  
e100: 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64  }....  if {[$ind
e110: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43 61  ex(1) Outputs.Ca
e120: 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73 65 64 5d  nUseColumnsUsed]
e130: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 24 69  } then {..    $i
e140: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
e150: 43 6f 6c 75 6d 6e 73 55 73 65 64 20 5b 65 78 70  ColumnsUsed [exp
e160: 72 20 7b 77 69 64 65 28 30 78 42 41 44 43 30 46  r {wide(0xBADC0F
e170: 46 45 45 38 37 35 36 32 31 41 29 7d 5d 0d 0a 20  FEE875621A)}].. 
e180: 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 70 49 6e 64   }....  set pInd
e190: 65 78 28 31 29 20 5b 6f 62 6a 65 63 74 20 69 6e  ex(1) [object in
e1a0: 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 2d 66 6c  voke -create -fl
e1b0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
e1c0: 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44  ..      System.D
e1d0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
e1e0: 65 49 6e 64 65 78 20 41 6c 6c 6f 63 61 74 65 41  eIndex AllocateA
e1f0: 6e 64 49 6e 69 74 69 61 6c 69 7a 65 4e 61 74 69  ndInitializeNati
e200: 76 65 20 5c 0d 0a 20 20 20 20 20 20 24 6e 43 6f  ve \..      $nCo
e210: 6e 73 74 72 61 69 6e 74 20 24 6e 4f 72 64 65 72  nstraint $nOrder
e220: 42 79 5d 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20  By]....  object 
e230: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
e240: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
e250: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
e260: 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78  Lite.SQLiteIndex
e270: 20 54 6f 49 6e 74 50 74 72 20 24 69 6e 64 65 78   ToIntPtr $index
e280: 28 31 29 20 24 70 49 6e 64 65 78 28 31 29 20 74  (1) $pIndex(1) t
e290: 72 75 65 0d 0a 0d 0a 20 20 73 65 74 20 69 6e 64  rue....  set ind
e2a0: 65 78 28 32 29 20 5b 6f 62 6a 65 63 74 20 63 72  ex(2) [object cr
e2b0: 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61  eate -alias -fla
e2c0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
e2d0: 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61  .      System.Da
e2e0: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
e2f0: 49 6e 64 65 78 20 24 6e 43 6f 6e 73 74 72 61 69  Index $nConstrai
e300: 6e 74 20 24 6e 4f 72 64 65 72 42 79 5d 0d 0a 0d  nt $nOrderBy]...
e310: 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  .  object invoke
e320: 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b   -alias -flags +
e330: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
e340: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
e350: 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65  QLite.SQLiteInde
e360: 78 20 46 72 6f 6d 49 6e 74 50 74 72 20 24 70 49  x FromIntPtr $pI
e370: 6e 64 65 78 28 31 29 20 74 72 75 65 20 69 6e 64  ndex(1) true ind
e380: 65 78 28 32 29 0d 0a 0d 0a 20 20 66 6f 72 20 7b  ex(2)....  for {
e390: 73 65 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20  set iConstraint 
e3a0: 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74  0} {$iConstraint
e3b0: 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d   < $nConstraint}
e3c0: 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74 72 61 69   {incr iConstrai
e3d0: 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 63  nt} {..    set c
e3e0: 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 5b 24 69  onstraint(1) [$i
e3f0: 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20 20 20 20  ndex(1) \..     
e400: 20 20 20 2d 61 6c 69 61 73 20 49 6e 70 75 74 73     -alias Inputs
e410: 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e 47 65 74  .Constraints.Get
e420: 56 61 6c 75 65 20 24 69 43 6f 6e 73 74 72 61 69  Value $iConstrai
e430: 6e 74 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 63  nt]....    set c
e440: 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 5b 24 69  onstraint(2) [$i
e450: 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20 20 20 20  ndex(2) \..     
e460: 20 20 20 2d 61 6c 69 61 73 20 49 6e 70 75 74 73     -alias Inputs
e470: 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e 47 65 74  .Constraints.Get
e480: 56 61 6c 75 65 20 24 69 43 6f 6e 73 74 72 61 69  Value $iConstrai
e490: 6e 74 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b  nt]....    if {[
e4a0: 24 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 69  $constraint(1) i
e4b0: 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24 63 6f 6e  Column] != [$con
e4c0: 73 74 72 61 69 6e 74 28 32 29 20 69 43 6f 6c 75  straint(2) iColu
e4d0: 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  mn]} then {..   
e4e0: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
e4f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
e500: 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74 20 69 6e    "iColumn at in
e510: 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69  dex " $iConstrai
e520: 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61  nt " does not ma
e530: 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tch"]..    }....
e540: 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72      if {[$constr
e550: 61 69 6e 74 28 31 29 20 6f 70 5d 20 21 3d 20 5b  aint(1) op] != [
e560: 24 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 6f  $constraint(2) o
e570: 70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  p]} then {..    
e580: 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
e590: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
e5a0: 20 22 6f 70 20 61 74 20 69 6e 64 65 78 20 22 20   "op at index " 
e5b0: 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20 64  $iConstraint " d
e5c0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d  oes not match"].
e5d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66  .    }....    if
e5e0: 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 31   {[$constraint(1
e5f0: 29 20 75 73 61 62 6c 65 5d 20 21 3d 20 5b 24 63  ) usable] != [$c
e600: 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 75 73 61  onstraint(2) usa
e610: 62 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ble]} then {..  
e620: 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e      error [appen
e630: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
e640: 20 20 20 22 75 73 61 62 6c 65 20 61 74 20 69 6e     "usable at in
e650: 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69  dex " $iConstrai
e660: 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61  nt " does not ma
e670: 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tch"]..    }....
e680: 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72      if {[$constr
e690: 61 69 6e 74 28 31 29 20 69 54 65 72 6d 4f 66 66  aint(1) iTermOff
e6a0: 73 65 74 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72  set] != [$constr
e6b0: 61 69 6e 74 28 32 29 20 69 54 65 72 6d 4f 66 66  aint(2) iTermOff
e6c0: 73 65 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  set]} then {..  
e6d0: 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e      error [appen
e6e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
e6f0: 20 20 20 22 69 54 65 72 6d 4f 66 66 73 65 74 20     "iTermOffset 
e700: 61 74 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e  at index " $iCon
e710: 73 74 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e  straint " does n
e720: 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20  ot match"]..    
e730: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20  }..  }....  for 
e740: 7b 73 65 74 20 69 4f 72 64 65 72 42 79 20 30 7d  {set iOrderBy 0}
e750: 20 7b 24 69 4f 72 64 65 72 42 79 20 3c 20 24 6e   {$iOrderBy < $n
e760: 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63 72 20 69  OrderBy} {incr i
e770: 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20 20 20 20  OrderBy} {..    
e780: 73 65 74 20 6f 72 64 65 72 42 79 28 31 29 20 5b  set orderBy(1) [
e790: 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20 20  $index(1) \..   
e7a0: 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70 75       -alias Inpu
e7b0: 74 73 2e 4f 72 64 65 72 42 79 73 2e 47 65 74 56  ts.OrderBys.GetV
e7c0: 61 6c 75 65 20 24 69 4f 72 64 65 72 42 79 5d 0d  alue $iOrderBy].
e7d0: 0a 0d 0a 20 20 20 20 73 65 74 20 6f 72 64 65 72  ...    set order
e7e0: 42 79 28 32 29 20 5b 24 69 6e 64 65 78 28 32 29  By(2) [$index(2)
e7f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61 6c 69   \..        -ali
e800: 61 73 20 49 6e 70 75 74 73 2e 4f 72 64 65 72 42  as Inputs.OrderB
e810: 79 73 2e 47 65 74 56 61 6c 75 65 20 24 69 4f 72  ys.GetValue $iOr
e820: 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 20 20 69 66  derBy]....    if
e830: 20 7b 5b 24 6f 72 64 65 72 42 79 28 31 29 20 69   {[$orderBy(1) i
e840: 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24 6f 72 64  Column] != [$ord
e850: 65 72 42 79 28 32 29 20 69 43 6f 6c 75 6d 6e 5d  erBy(2) iColumn]
e860: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
e870: 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67  error [appendArg
e880: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
e890: 69 43 6f 6c 75 6d 6e 20 61 74 20 69 6e 64 65 78  iColumn at index
e8a0: 20 22 20 24 69 4f 72 64 65 72 42 79 20 22 20 64   " $iOrderBy " d
e8b0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d  oes not match"].
e8c0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66  .    }....    if
e8d0: 20 7b 5b 24 6f 72 64 65 72 42 79 28 31 29 20 64   {[$orderBy(1) d
e8e0: 65 73 63 5d 20 21 3d 20 5b 24 6f 72 64 65 72 42  esc] != [$orderB
e8f0: 79 28 32 29 20 64 65 73 63 5d 7d 20 74 68 65 6e  y(2) desc]} then
e900: 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20   {..      error 
e910: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
e920: 20 20 20 20 20 20 20 20 20 22 64 65 73 63 20 61           "desc a
e930: 74 20 69 6e 64 65 78 20 22 20 24 69 4f 72 64 65  t index " $iOrde
e940: 72 42 79 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d  rBy " does not m
e950: 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 20  atch"]..    }.. 
e960: 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74   }....  for {set
e970: 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20   iConstraint 0} 
e980: 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20  {$iConstraint < 
e990: 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69  $nConstraint} {i
e9a0: 6e 63 72 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d  ncr iConstraint}
e9b0: 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73   {..    set cons
e9c0: 74 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 5b  traintUsage(1) [
e9d0: 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20 20  $index(1) \..   
e9e0: 20 20 20 20 20 2d 61 6c 69 61 73 20 4f 75 74 70       -alias Outp
e9f0: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73  uts.ConstraintUs
ea00: 61 67 65 73 2e 47 65 74 56 61 6c 75 65 20 24 69  ages.GetValue $i
ea10: 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a 20  Constraint].... 
ea20: 20 20 20 73 65 74 20 63 6f 6e 73 74 72 61 69 6e     set constrain
ea30: 74 55 73 61 67 65 28 32 29 20 5b 24 69 6e 64 65  tUsage(2) [$inde
ea40: 78 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20  x(2) \..        
ea50: 2d 61 6c 69 61 73 20 4f 75 74 70 75 74 73 2e 43  -alias Outputs.C
ea60: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e  onstraintUsages.
ea70: 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74  GetValue $iConst
ea80: 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 69 66  raint]....    if
ea90: 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55 73   {[$constraintUs
eaa0: 61 67 65 28 31 29 20 61 72 67 76 49 6e 64 65 78  age(1) argvIndex
eab0: 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] != \..        
eac0: 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  [$constraintUsag
ead0: 65 28 32 29 20 61 72 67 76 49 6e 64 65 78 5d 7d  e(2) argvIndex]}
eae0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65   then {..      e
eaf0: 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
eb00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 61   \..          "a
eb10: 72 67 76 49 6e 64 65 78 20 61 74 20 69 6e 64 65  rgvIndex at inde
eb20: 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  x " $iConstraint
eb30: 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63   " does not matc
eb40: 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  h"]..    }....  
eb50: 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69    if {[$constrai
eb60: 6e 74 55 73 61 67 65 28 31 29 20 6f 6d 69 74 5d  ntUsage(1) omit]
eb70: 20 21 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74   != [$constraint
eb80: 55 73 61 67 65 28 32 29 20 6f 6d 69 74 5d 7d 20  Usage(2) omit]} 
eb90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72  then {..      er
eba0: 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ror [appendArgs 
ebb0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 6f 6d  \..          "om
ebc0: 69 74 20 61 74 20 69 6e 64 65 78 20 22 20 24 69  it at index " $i
ebd0: 43 6f 6e 73 74 72 61 69 6e 74 20 22 20 64 6f 65  Constraint " doe
ebe0: 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20  s not match"].. 
ebf0: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69     }..  }....  i
ec00: 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75  f {[$index(1) Ou
ec10: 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65  tputs.IndexNumbe
ec20: 72 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 5b  r] != \..      [
ec30: 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74  $index(2) Output
ec40: 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72 5d 7d 20  s.IndexNumber]} 
ec50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f  then {..    erro
ec60: 72 20 22 49 6e 64 65 78 4e 75 6d 62 65 72 20 64  r "IndexNumber d
ec70: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a  oes not match"..
ec80: 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69    }....  if {[$i
ec90: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
eca0: 49 6e 64 65 78 53 74 72 69 6e 67 5d 20 6e 65 20  IndexString] ne 
ecb0: 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65 78  \..      [$index
ecc0: 28 32 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65  (2) Outputs.Inde
ecd0: 78 53 74 72 69 6e 67 5d 7d 20 74 68 65 6e 20 7b  xString]} then {
ece0: 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 49 6e 64  ..    error "Ind
ecf0: 65 78 53 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f  exString does no
ed00: 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d  t match"..  }...
ed10: 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31  .  if {[$index(1
ed20: 29 20 4f 75 74 70 75 74 73 2e 4e 65 65 64 54 6f  ) Outputs.NeedTo
ed30: 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 5d  FreeIndexString]
ed40: 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69   != \..      [$i
ed50: 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e  ndex(2) Outputs.
ed60: 4e 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53  NeedToFreeIndexS
ed70: 74 72 69 6e 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tring]} then {..
ed80: 20 20 20 20 65 72 72 6f 72 20 22 4e 65 65 64 54      error "NeedT
ed90: 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67  oFreeIndexString
eda0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22   does not match"
edb0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b  ..  }....  if {[
edc0: 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74  $index(1) Output
edd0: 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65  s.OrderByConsume
ede0: 64 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 5b  d] != \..      [
edf0: 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74  $index(2) Output
ee00: 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65  s.OrderByConsume
ee10: 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..    
ee20: 65 72 72 6f 72 20 22 4f 72 64 65 72 42 79 43 6f  error "OrderByCo
ee30: 6e 73 75 6d 65 64 20 64 6f 65 73 20 6e 6f 74 20  nsumed does not 
ee40: 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20  match"..  }.... 
ee50: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
ee60: 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
ee70: 64 43 6f 73 74 5d 20 21 3d 20 5c 0d 0a 20 20 20  dCost] != \..   
ee80: 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75     [$index(2) Ou
ee90: 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 43  tputs.EstimatedC
eea0: 6f 73 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ost]} then {..  
eeb0: 20 20 65 72 72 6f 72 20 22 45 73 74 69 6d 61 74    error "Estimat
eec0: 65 64 43 6f 73 74 20 64 6f 65 73 20 6e 6f 74 20  edCost does not 
eed0: 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20  match"..  }.... 
eee0: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
eef0: 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 45 73  Outputs.CanUseEs
ef00: 74 69 6d 61 74 65 64 52 6f 77 73 5d 20 26 26 20  timatedRows] && 
ef10: 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65 78  \..      [$index
ef20: 28 32 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55  (2) Outputs.CanU
ef30: 73 65 45 73 74 69 6d 61 74 65 64 52 6f 77 73 5d  seEstimatedRows]
ef40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 69 66  } then {..    if
ef50: 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74   {[$index(1) Out
ef60: 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 52 6f  puts.EstimatedRo
ef70: 77 73 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20  ws] != \..      
ef80: 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74    [$index(2) Out
ef90: 70 75 74 73 2e 45 73 74 69 6d 61 74 65 64 52 6f  puts.EstimatedRo
efa0: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..   
efb0: 20 20 20 65 72 72 6f 72 20 22 45 73 74 69 6d 61     error "Estima
efc0: 74 65 64 52 6f 77 73 20 64 6f 65 73 20 6e 6f 74  tedRows does not
efd0: 20 6d 61 74 63 68 22 0d 0a 20 20 20 20 7d 0d 0a   match"..    }..
efe0: 0d 0a 20 20 20 20 74 70 75 74 73 20 24 74 65 73  ..    tputs $tes
eff0: 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20  t_channel "---- 
f000: 63 68 65 63 6b 65 64 20 45 73 74 69 6d 61 74 65  checked Estimate
f010: 64 52 6f 77 73 20 70 72 6f 70 65 72 74 79 5c 6e  dRows property\n
f020: 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  "..  }....  if {
f030: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
f040: 74 73 2e 43 61 6e 55 73 65 49 6e 64 65 78 46 6c  ts.CanUseIndexFl
f050: 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ags] && \..     
f060: 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70   [$index(2) Outp
f070: 75 74 73 2e 43 61 6e 55 73 65 49 6e 64 65 78 46  uts.CanUseIndexF
f080: 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lags]} then {.. 
f090: 20 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31     if {[$index(1
f0a0: 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 46  ) Outputs.IndexF
f0b0: 6c 61 67 73 5d 20 21 3d 20 5c 0d 0a 20 20 20 20  lags] != \..    
f0c0: 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f      [$index(2) O
f0d0: 75 74 70 75 74 73 2e 49 6e 64 65 78 46 6c 61 67  utputs.IndexFlag
f0e0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  s]} then {..    
f0f0: 20 20 65 72 72 6f 72 20 22 49 6e 64 65 78 46 6c    error "IndexFl
f100: 61 67 73 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ags does not mat
f110: 63 68 22 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ch"..    }....  
f120: 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68    tputs $test_ch
f130: 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63  annel "---- chec
f140: 6b 65 64 20 49 6e 64 65 78 46 6c 61 67 73 20 70  ked IndexFlags p
f150: 72 6f 70 65 72 74 79 5c 6e 22 0d 0a 20 20 7d 0d  roperty\n"..  }.
f160: 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78  ...  if {[$index
f170: 28 31 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55  (1) Outputs.CanU
f180: 73 65 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 20 26  seColumnsUsed] &
f190: 26 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64  & \..      [$ind
f1a0: 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 43 61  ex(2) Outputs.Ca
f1b0: 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73 65 64 5d  nUseColumnsUsed]
f1c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 69 66  } then {..    if
f1d0: 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74   {[$index(1) Out
f1e0: 70 75 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65 64  puts.ColumnsUsed
f1f0: 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] != \..        
f200: 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75  [$index(2) Outpu
f210: 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 7d  ts.ColumnsUsed]}
f220: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65   then {..      e
f230: 72 72 6f 72 20 22 43 6f 6c 75 6d 6e 73 55 73 65  rror "ColumnsUse
f240: 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  d does not match
f250: 22 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  "..    }....    
f260: 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61 6e  tputs $test_chan
f270: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 65  nel "---- checke
f280: 64 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 70 72  d ColumnsUsed pr
f290: 6f 70 65 72 74 79 5c 6e 22 0d 0a 20 20 7d 0d 0a  operty\n"..  }..
f2a0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
f2b0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 6f 62 6a  catch {..    obj
f2c0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
f2d0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
f2e0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
f2f0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
f300: 65 49 6e 64 65 78 20 46 72 65 65 4e 61 74 69 76  eIndex FreeNativ
f310: 65 20 24 70 49 6e 64 65 78 28 31 29 0d 0a 20 20  e $pIndex(1)..  
f320: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
f330: 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 73 74 72 61  complain constra
f340: 69 6e 74 55 73 61 67 65 0d 0a 20 20 75 6e 73 65  intUsage..  unse
f350: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 6f 72  t -nocomplain or
f360: 64 65 72 42 79 20 6e 4f 72 64 65 72 42 79 20 69  derBy nOrderBy i
f370: 4f 72 64 65 72 42 79 0d 0a 20 20 75 6e 73 65 74  OrderBy..  unset
f380: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e   -nocomplain con
f390: 73 74 72 61 69 6e 74 20 6e 43 6f 6e 73 74 72 61  straint nConstra
f3a0: 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 0d  int iConstraint.
f3b0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
f3c0: 6c 61 69 6e 20 70 49 6e 64 65 78 20 69 6e 64 65  lain pIndex inde
f3d0: 78 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  x..} -constraint
f3e0: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
f3f0: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
f400: 31 31 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  11 SQLite System
f410: 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64  .Data.SQLite\..d
f420: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
f430: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f440: 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c  .INTEROP_VIRTUAL
f450: 5f 54 41 42 4c 45 7d 20 2d 72 65 73 75 6c 74 20  _TABLE} -result 
f460: 7b 7d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23  {}}....#########
f470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4b0: 23 23 23 23 23 23 0d 0a 0d 0a 72 65 6e 61 6d 65  ######....rename
f4c0: 20 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65   normalizeVtabRe
f4d0: 73 75 6c 74 20 22 22 0d 0a 0d 0a 23 23 23 23 23  sult ""....#####
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f520: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
f530: 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f  nSQLiteTestEpilo
f540: 67 75 65 0d 0a 72 75 6e 54 65 73 74 45 70 69 6c  gue..runTestEpil
f550: 6f 67 75 65 0d 0a                                ogue..