System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 416abd63271d7cf8e3e0142584a067ec6ab64367:


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 66 61 6c 73 65 20 74 72 75 65   true false true
0b70: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
0b80: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0b90: 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73  te.dll]....  lis
0ba0: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
0bb0: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
0bc0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
0bd0: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
0be0: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
0bf0: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
0c00: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
0c10: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
0c20: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
0c30: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d  {id}.Test${id} M
0c40: 61 69 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73  ain..      } res
0c50: 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75  ult] : [set resu
0c60: 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c  lt ""]}] [normal
0c70: 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72  izeVtabResult $r
0c80: 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e  esult]..} -clean
0c90: 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44  up {..  cleanupD
0ca0: 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  b $fileName.... 
0cb0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
0cc0: 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  in result code r
0cd0: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71  esults errors sq
0ce0: 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20  l dataSource id 
0cf0: 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e  fileName..} -con
0d00: 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20  straints {eagle 
0d10: 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d  command.object m
0d20: 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61  onoBug28 monoCra
0d30: 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71  sh211 command.sq
0d40: 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41  l\..compile.DATA
0d50: 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44   SQLite System.D
0d60: 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74  ata.SQLite SQLit
0d70: 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e  eInterop\..defin
0d80: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
0d90: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
0da0: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
0db0: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
0dc0: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
0dd0: 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d  xp -result [norm
0de0: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
0df0: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
0e00: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
0e10: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
0e20: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 24 7d  d+ \{\} 0 \{\}$}
0e30: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e80: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
0e90: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 32 2e   {test vtab-1.2.
0ea0: 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76  1 {IEnumerable v
0eb0: 69 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73  irtual table} -s
0ec0: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
0ed0: 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 32 2e  leName vtab-1.2.
0ee0: 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  1.db..} -body {.
0ef0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
0f00: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
0f10: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
0f20: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
0f30: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
0f40: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
0f50: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
0f60: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
0f70: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
0f80: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0f90: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
0fa0: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
0fb0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
0fc0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
0fd0: 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  T * FROM t${id};
0fe0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
0ff0: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
1000: 20 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53   UPDATE t${id} S
1010: 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d  ET x = 1; \..  }
1020: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
1030: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
1040: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
1050: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
1060: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
1070: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
1080: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
1090: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
10a0: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
10b0: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
10c0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
10d0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
10e0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
10f0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1100: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
1110: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
1120: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1130: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
1140: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
1150: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
1160: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1170: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
1180: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
1190: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
11a0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
11b0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
11c0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
11d0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
11e0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
11f0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
1200: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
1210: 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65  getTestPropertie
1220: 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  s]"))..         
1230: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1240: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
1250: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1260: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
1270: 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51  ateModule(new SQ
1280: 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72  LiteModuleEnumer
1290: 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
12a0: 20 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c       "mod${id}",
12b0: 20 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20   strings));.... 
12c0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
12d0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
12e0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
12f0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
1300: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
1310: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1320: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
1330: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
1340: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1360: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
1370: 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
1380: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1390: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
13a0: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
13b0: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
13c0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
13d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
13e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
1400: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
1410: 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(2)}]";....  
1420: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1430: 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
1440: 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d  der dataReader =
1450: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
1460: 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20  Reader())..     
1470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1480: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c              whil
1490: 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65  e (dataReader.Re
14a0: 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ad())..         
14b0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
14c0: 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b  Add(dataReader\[
14d0: 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  0\].ToString());
14e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1510: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
1520: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
1530: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
1540: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
1550: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1560: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
1570: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
1580: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d  [subst ${sql(3)}
1590: 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]";....         
15a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
15b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15c0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
15d0: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
15e0: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
15f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1600: 20 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c        catch (SQL
1610: 69 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  iteException e).
1620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
1630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1640: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52    result.Add(e.R
1650: 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69  esultCode.ToStri
1660: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
1670: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
1680: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
1690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
16c0: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
16d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
16e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
16f0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
1700: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1710: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1760: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
1770: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
1780: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1790: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
17a0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
17b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
17c0: 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74   }] true false t
17d0: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
17e0: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
17f0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
1800: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
1810: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
1820: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
1830: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
1840: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
1850: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
1860: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
1870: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
1880: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
1890: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
18a0: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
18b0: 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74  d} GetList one t
18c0: 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a  wo three 4 5.0..
18d0: 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20        } result] 
18e0: 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22  : [set result ""
18f0: 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ]}] [normalizeVt
1900: 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74  abResult $result
1910: 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  ]..} -cleanup {.
1920: 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69  .  cleanupDb $fi
1930: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65  leName....  unse
1940: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
1950: 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74  sult code result
1960: 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74  s errors sql dat
1970: 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e  aSource id fileN
1980: 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69  ame..} -constrai
1990: 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61  nts {eagle comma
19a0: 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75  nd.object monoBu
19b0: 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31  g28 monoCrash211
19c0: 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63   command.sql\..c
19d0: 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69  ompile.DATA SQLi
19e0: 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  te System.Data.S
19f0: 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e 74 65  QLite SQLiteInte
1a00: 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  rop\..defineCons
1a10: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
1a20: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
1a30: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f  VIRTUAL_TABLE co
1a40: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
1a50: 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72  tch \..regexp -r
1a60: 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65  esult [normalize
1a70: 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c  VtabResult {^Ok\
1a80: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
1a90: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
1aa0: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
1ab0: 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74 77 6f 20 74  \} 0 \{one two t
1ac0: 68 72 65 65 20 34 20 35 5c 2e 30 20 45 72 72 6f  hree 4 5\.0 Erro
1ad0: 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  r\..\{SQL logic 
1ae0: 65 72 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e  error( or missin
1af0: 67 20 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20  g database)? -- 
1b00: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22 74  virtual table "t
1b10: 5c 64 2b 22 20 69 73 5c 0d 0a 72 65 61 64 2d 6f  \d+" is\..read-o
1b20: 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23  nly\}\}$}]}....#
1b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1b80: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
1b90: 76 74 61 62 2d 31 2e 32 2e 32 20 7b 49 45 6e 75  vtab-1.2.2 {IEnu
1ba0: 6d 65 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20  merable virtual 
1bb0: 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d  table} -setup {.
1bc0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
1bd0: 76 74 61 62 2d 31 2e 32 2e 32 2e 64 62 0d 0a 7d  vtab-1.2.2.db..}
1be0: 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20   -body {..  set 
1bf0: 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  id [object invok
1c00: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
1c10: 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d  tActive NextId].
1c20: 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63  .  set dataSourc
1c30: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
1c40: 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
1c50: 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ry] $fileName]..
1c60: 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b  ..  set sql(1) {
1c70: 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56   \..    CREATE V
1c80: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b  IRTUAL TABLE t${
1c90: 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69  id} USING mod${i
1ca0: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
1cb0: 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a  set sql(2) { \..
1cc0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1cd0: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
1ce0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29  ....  set sql(3)
1cf0: 20 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41 54 45   { \..    UPDATE
1d00: 20 74 24 7b 69 64 7d 20 53 45 54 20 78 20 3d 20   t${id} SET x = 
1d10: 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75  1; \..  }....  u
1d20: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1d30: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
1d40: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
1d50: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
1d60: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
1d70: 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20  sing System;..  
1d80: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
1d90: 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20  ata.SQLite;..   
1da0: 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f   using Eagle._Co
1db0: 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b  ntainers.Public;
1dc0: 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ....    namespac
1dd0: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d  e _Dynamic${id}.
1de0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
1df0: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
1e00: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
1e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
1e20: 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69  blic static Stri
1e30: 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70  ngList GetList(p
1e40: 61 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d  arams string\[\]
1e50: 20 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20   strings)..     
1e60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e70: 53 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c  StringList resul
1e80: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  t = new StringLi
1e90: 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
1ea0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
1eb0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
1ec0: 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69  ction = new SQLi
1ed0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20  teConnection(.. 
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61               "Da
1ef0: 74 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61  ta Source=${data
1f00: 53 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74  Source};[getTest
1f10: 50 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a  Properties]"))..
1f20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f30: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
1f40: 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20  ion.Open();.... 
1f50: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1f60: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d  eModule module =
1f70: 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c   new SQLiteModul
1f80: 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20  eEnumerable(..  
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
1fa0: 6f 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67  od${id}", string
1fb0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
1fc0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
1fd0: 65 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c  eateModule(modul
1fe0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1ff0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
2000: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
2010: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
2020: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
2030: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2040: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
2050: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
2060: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
2070: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
2080: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78        command.Ex
2090: 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
20a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
20c0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
20d0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
20e0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
20f0: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
2100: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2110: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
2120: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
2130: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
2140: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2150: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2160: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
2170: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
2180: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
2190: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21b0: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
21c0: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
21f0: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
2200: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
2210: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2220: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2230: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
2240: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
2250: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
2260: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
2270: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2290: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
22a0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
22b0: 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(3)}]";.... 
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
22d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22f0: 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75     command.Execu
2300: 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
2310: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2330: 74 63 68 20 28 53 51 4c 69 74 65 45 78 63 65 70  tch (SQLiteExcep
2340: 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
2350: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2360: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
2370: 2e 41 64 64 28 65 2e 52 65 73 75 6c 74 43 6f 64  .Add(e.ResultCod
2380: 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a0: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73  result.Add(e.Mes
23b0: 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  sage);..        
23c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23e0: 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69 73        module.Dis
23f0: 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  pose();..       
2400: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
2410: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
2420: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2430: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
2440: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2450: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24a0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
24b0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
24c0: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
24d0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
24e0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
24f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
2500: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
2510: 66 61 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c  false true resul
2520: 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20  ts errors [list 
2530: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
2540: 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c  te.dll Eagle.dll
2550: 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  ]]....  list $co
2560: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
2570: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
2580: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
2590: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
25a0: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
25b0: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
25c0: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
25d0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
25e0: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
25f0: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73  Test${id} GetLis
2600: 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20  t one two three 
2610: 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72  4 5.0..      } r
2620: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
2630: 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d  sult ""]}] [norm
2640: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
2650: 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65  $result]..} -cle
2660: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
2670: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
2680: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
2690: 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65  lain result code
26a0: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
26b0: 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69  sql dataSource i
26c0: 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  d fileName..} -c
26d0: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
26e0: 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
26f0: 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43   monoBug28 monoC
2700: 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e  rash211 command.
2710: 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
2720: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
2730: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
2740: 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66  iteInterop\..def
2750: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
2760: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
2770: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
2780: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
2790: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
27a0: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
27b0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
27c0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
27d0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
27e0: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
27f0: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e  #\d+ \{\} 0 \{on
2800: 65 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 5c  e two three 4 5\
2810: 2e 30 20 45 72 72 6f 72 5c 0d 0a 5c 7b 53 51 4c  .0 Error\..\{SQL
2820: 20 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72   logic error( or
2830: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
2840: 65 29 3f 20 2d 2d 20 76 69 72 74 75 61 6c 20 74  e)? -- virtual t
2850: 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73 5c 0d  able "t\d+" is\.
2860: 0a 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d  .read-only\}\}$}
2870: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
2880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28c0: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
28d0: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 33 2e   {test vtab-1.3.
28e0: 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 3c 54  1 {IEnumerable<T
28f0: 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 7d  > virtual table}
2900: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
2910: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
2920: 2e 33 2e 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  .3.1.db..} -body
2930: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
2940: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
2950: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
2960: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
2970: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
2980: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
2990: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
29a0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
29b0: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
29c0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
29d0: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
29e0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
29f0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
2a00: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
2a10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69  LECT * FROM t${i
2a20: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
2a30: 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a  set sql(3) { \..
2a40: 20 20 20 20 55 50 44 41 54 45 20 74 24 7b 69 64      UPDATE t${id
2a50: 7d 20 53 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a  } SET x = 1; \..
2a60: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
2a70: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
2a80: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
2a90: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
2aa0: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
2ab0: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
2ac0: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
2ad0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
2ae0: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
2af0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2b00: 69 74 65 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20  ite.Generic;..  
2b10: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
2b20: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
2b30: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
2b40: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
2b50: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
2b60: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
2b70: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
2b80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
2b90: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
2ba0: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
2bb0: 70 61 72 61 6d 73 20 69 6e 74 5c 5b 5c 5d 20 69  params int\[\] i
2bc0: 6e 74 65 67 65 72 73 29 0d 0a 20 20 20 20 20 20  ntegers)..      
2bd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
2be0: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
2bf0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
2c00: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
2c10: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
2c20: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
2c30: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
2c40: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
2c50: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
2c60: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
2c70: 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50  ource};[getTestP
2c80: 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20  roperties]")).. 
2c90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ca0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
2cb0: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
2cc0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
2cd0: 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c  tion.CreateModul
2ce0: 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75  e(new SQLiteModu
2cf0: 6c 65 45 6e 75 6d 65 72 61 62 6c 65 3c 69 6e 74  leEnumerable<int
2d00: 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
2d10: 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 69 6e    "mod${id}", in
2d20: 74 65 67 65 72 73 29 29 3b 0d 0a 0d 0a 20 20 20  tegers));....   
2d30: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2d40: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
2d50: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
2d60: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
2d70: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
2d80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d90: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
2da0: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
2db0: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
2dd0: 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75  and.ExecuteNonQu
2de0: 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ery();..        
2df0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e00: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
2e10: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
2e20: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
2e30: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
2e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2e60: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
2e70: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
2e80: 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20  l(2)}]";....    
2e90: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2ea0: 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  (SQLiteDataReade
2eb0: 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63  r dataReader = c
2ec0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65  ommand.ExecuteRe
2ed0: 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20  ader())..       
2ee0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ef0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
2f00: 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64  (dataReader.Read
2f10: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
2f20: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
2f30: 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c  d(dataReader\[0\
2f40: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ].ToString());..
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2f80: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
2f90: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
2fa0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
2fb0: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
2fc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fd0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
2fe0: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
2ff0: 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22  ubst ${sql(3)}]"
3000: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3010: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
3020: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3030: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
3040: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
3050: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
3060: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3070: 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69 74      catch (SQLit
3080: 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  eException e).. 
3090: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b0: 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65 73  result.Add(e.Res
30c0: 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e 67  ultCode.ToString
30d0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
30e0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
30f0: 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20  (e.Message);..  
3100: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3110: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3120: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
3130: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
3140: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
3150: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3160: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
3170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31d0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
31e0: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
31f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3200: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
3210: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
3220: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
3230: 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74 72 75  ] true false tru
3240: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
3250: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
3260: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
3270: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
3280: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
3290: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
32a0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
32b0: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
32c0: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
32d0: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
32e0: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
32f0: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
3300: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
3310: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
3320: 20 47 65 74 4c 69 73 74 20 31 20 32 20 33 20 34   GetList 1 2 3 4
3330: 20 35 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75   5..      } resu
3340: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
3350: 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69  t ""]}] [normali
3360: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65  zeVtabResult $re
3370: 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  sult]..} -cleanu
3380: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
3390: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
33a0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
33b0: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
33c0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
33d0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
33e0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
33f0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
3400: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
3410: 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73  noBug28 monoCras
3420: 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  h211 command.sql
3430: 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  \..compile.DATA 
3440: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
3450: 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65  ta.SQLite SQLite
3460: 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65  Interop\..define
3470: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
3480: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
3490: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
34a0: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
34b0: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
34c0: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
34d0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
34e0: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
34f0: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
3500: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
3510: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 31 20 32 20 33  + \{\} 0 \{1 2 3
3520: 20 34 20 35 20 45 72 72 6f 72 20 5c 7b 53 51 4c   4 5 Error \{SQL
3530: 5c 0d 0a 6c 6f 67 69 63 20 65 72 72 6f 72 28 20  \..logic error( 
3540: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
3550: 61 73 65 29 3f 20 2d 2d 20 76 69 72 74 75 61 6c  ase)? -- virtual
3560: 20 74 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73   table "t\d+" is
3570: 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d   read-only\}\}$}
3580: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
3590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
35d0: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
35e0: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 33 2e   {test vtab-1.3.
35f0: 32 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 3c 54  2 {IEnumerable<T
3600: 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 7d  > virtual table}
3610: 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74   -setup {..  set
3620: 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31   fileName vtab-1
3630: 2e 33 2e 32 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  .3.2.db..} -body
3640: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
3650: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
3660: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
3670: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
3680: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
3690: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
36a0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
36b0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
36c0: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
36d0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
36e0: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
36f0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
3700: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
3710: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
3720: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69  LECT * FROM t${i
3730: 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  d}; \..  }....  
3740: 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a  set sql(3) { \..
3750: 20 20 20 20 55 50 44 41 54 45 20 74 24 7b 69 64      UPDATE t${id
3760: 7d 20 53 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a  } SET x = 1; \..
3770: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
3780: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
3790: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
37a0: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
37b0: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
37c0: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
37d0: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
37e0: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
37f0: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
3800: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
3810: 69 74 65 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20  ite.Generic;..  
3820: 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43    using Eagle._C
3830: 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63  ontainers.Public
3840: 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61  ;....    namespa
3850: 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ce _Dynamic${id}
3860: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70  ..    {..      p
3870: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
3880: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
3890: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
38a0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
38b0: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
38c0: 70 61 72 61 6d 73 20 69 6e 74 5c 5b 5c 5d 20 69  params int\[\] i
38d0: 6e 74 65 67 65 72 73 29 0d 0a 20 20 20 20 20 20  ntegers)..      
38e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
38f0: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
3900: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
3910: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
3920: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
3930: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
3940: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
3950: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
3960: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
3970: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
3980: 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50  ource};[getTestP
3990: 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20  roperties]")).. 
39a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
39b0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
39c0: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
39d0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
39e0: 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20  Module module = 
39f0: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
3a00: 45 6e 75 6d 65 72 61 62 6c 65 3c 69 6e 74 3e 28  Enumerable<int>(
3a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a20: 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 69 6e    "mod${id}", in
3a30: 74 65 67 65 72 73 29 3b 0d 0a 0d 0a 20 20 20 20  tegers);....    
3a40: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
3a50: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
3a60: 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  module);....    
3a70: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
3a80: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
3a90: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
3aa0: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
3ab0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
3ac0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3ad0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
3ae0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
3af0: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
3b00: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
3b10: 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65  nd.ExecuteNonQue
3b20: 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ry();..         
3b30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3b40: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
3b50: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
3b60: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
3b70: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
3ba0: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
3bb0: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
3bc0: 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  (2)}]";....     
3bd0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
3be0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
3bf0: 20 64 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f   dataReader = co
3c00: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61  mmand.ExecuteRea
3c10: 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20  der())..        
3c20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3c30: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
3c40: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
3c50: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
3c60: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
3c70: 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c 5d  (dataReader\[0\]
3c80: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
3cc0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
3cd0: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
3ce0: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
3cf0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
3d00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3d10: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
3d20: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
3d30: 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b  bst ${sql(3)}]";
3d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3d50: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3d60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3d70: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
3d80: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
3d90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3da0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3db0: 20 20 20 63 61 74 63 68 20 28 53 51 4c 69 74 65     catch (SQLite
3dc0: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3df0: 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65 73 75  esult.Add(e.Resu
3e00: 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28  ltCode.ToString(
3e10: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
3e20: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
3e30: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
3e40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3e50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3e60: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
3e70: 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20  e.Dispose();..  
3e80: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
3e90: 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  tion.Close();.. 
3ea0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3eb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
3ec0: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
3ed0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
3ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3f30: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
3f40: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
3f50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3f60: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
3f70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f80: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
3f90: 74 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20  true false true 
3fa0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b  results errors [
3fb0: 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61  list System.Data
3fc0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c  .SQLite.dll Eagl
3fd0: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73  e.dll]]....  lis
3fe0: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
3ff0: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
4000: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
4010: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
4020: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
4030: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
4040: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
4050: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
4060: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
4070: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
4080: 65 74 4c 69 73 74 20 31 20 32 20 33 20 34 20 35  etList 1 2 3 4 5
4090: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
40a0: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
40b0: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
40c0: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
40d0: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
40e0: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
40f0: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
4100: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
4110: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
4120: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
4130: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
4140: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
4150: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
4160: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
4170: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
4180: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
4190: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
41a0: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
41b0: 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e  .SQLite SQLiteIn
41c0: 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f  terop\..defineCo
41d0: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
41e0: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
41f0: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE 
4200: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
4210: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
4220: 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69  -result [normali
4230: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f  zeVtabResult {^O
4240: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
4250: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
4260: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
4270: 5c 7b 5c 7d 20 30 20 5c 7b 31 20 32 20 33 20 34  \{\} 0 \{1 2 3 4
4280: 20 35 20 45 72 72 6f 72 20 5c 7b 53 51 4c 5c 0d   5 Error \{SQL\.
4290: 0a 6c 6f 67 69 63 20 65 72 72 6f 72 28 20 6f 72  .logic error( or
42a0: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
42b0: 65 29 3f 20 2d 2d 20 76 69 72 74 75 61 6c 20 74  e)? -- virtual t
42c0: 61 62 6c 65 20 22 74 5c 64 2b 22 20 69 73 20 72  able "t\d+" is r
42d0: 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d  ead-only\}\}$}]}
42e0: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
42f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4330: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
4340: 74 65 73 74 20 76 74 61 62 2d 31 2e 34 20 7b 76  test vtab-1.4 {v
4350: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e  irtual table fun
4360: 63 74 69 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d  ction support} -
4370: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
4380: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 34  ileName vtab-1.4
4390: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
43a0: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
43b0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
43c0: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
43d0: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
43e0: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
43f0: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
4400: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
4410: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
4420: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
4430: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
4440: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
4450: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
4460: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
4470: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
4480: 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54 28   Base64(x, CAST(
4490: 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20  'one' AS BLOB)) 
44a0: 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a  FROM t${id}; \..
44b0: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
44c0: 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (3) { \..    SEL
44d0: 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43 41  ECT Base64(x, CA
44e0: 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42  ST('one' AS BLOB
44f0: 29 2c 20 27 74 77 6f 27 29 20 46 52 4f 4d 20 74  ), 'two') FROM t
4500: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
4510: 0a 20 20 73 65 74 20 73 71 6c 28 34 29 20 7b 20  .  set sql(4) { 
4520: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
4530: 73 65 36 35 28 78 2c 20 43 41 53 54 28 27 6f 6e  se65(x, CAST('on
4540: 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f  e' AS BLOB)) FRO
4550: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
4560: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
4570: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
4580: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
4590: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
45a0: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
45b0: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
45c0: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
45d0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
45e0: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
45f0: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
4600: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
4610: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
4620: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
4630: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73       public clas
4640: 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  s SQLiteFunction
4650: 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75  ${id} : SQLiteFu
4660: 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d  nction..      {.
4670: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
4680: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
4690: 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 20  id}()..         
46a0: 20 3a 20 62 61 73 65 28 53 51 4c 69 74 65 44 61   : base(SQLiteDa
46b0: 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c  teFormats.Defaul
46c0: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  t, DateTimeKind.
46d0: 55 6e 73 70 65 63 69 66 69 65 64 2c 0d 0a 20 20  Unspecified,..  
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
46f0: 75 6c 6c 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20  ull, false)..   
4700: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4710: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
4720: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4730: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4780: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4790: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
47a0: 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20   Invoke(..      
47b0: 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61      object\[\] a
47c0: 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29  rgs..          )
47d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
47e0: 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20         if (args 
47f0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4800: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
4810: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
4820: 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20  if (args.Length 
4830: 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20  != 2)..         
4840: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72     return new Ar
4850: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
4860: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
4880: 65 65 64 20 65 78 61 63 74 6c 79 20 74 77 6f 20  eed exactly two 
4890: 61 72 67 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b  arguments, got {
48a0: 30 7d 22 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68  0}", args.Length
48b0: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
48c0: 20 6f 62 6a 65 63 74 20 61 72 67 20 3d 20 61 72   object arg = ar
48d0: 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20  gs\[1\];....    
48e0: 20 20 20 20 20 20 69 66 20 28 61 72 67 20 3d 3d        if (arg ==
48f0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4900: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
4910: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
4920: 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20        Type type 
4930: 3d 20 61 72 67 2e 47 65 74 54 79 70 65 28 29 3b  = arg.GetType();
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 3d 3d 20 74 79 70 65 6f 66   (type == typeof
4960: 28 44 42 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  (DBNull))..     
4970: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
4980: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
4990: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
49a0: 65 20 21 3d 20 74 79 70 65 6f 66 28 62 79 74 65  e != typeof(byte
49b0: 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20 20 20 20 20  \[\]))..        
49c0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41      return new A
49d0: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
49e0: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
49f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
4a00: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
4a10: 20 62 79 74 65 20 61 72 72 61 79 2c 20 67 6f 74   byte array, got
4a20: 20 7b 30 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a   {0}", type));..
4a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
4a40: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73  rn Convert.ToBas
4a50: 65 36 34 53 74 72 69 6e 67 28 28 62 79 74 65 5c  e64String((byte\
4a60: 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a 20 20 20 20  [\]) arg);..    
4a70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
4a80: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
4a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ad0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  /....      publi
4ae0: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
4af0: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
4b00: 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64  {id} : SQLiteMod
4b10: 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b  uleNoop..      {
4b20: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4b30: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
4b40: 74 24 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61  t${id}(string na
4b50: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a  me)..          :
4b60: 20 62 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20   base(name)..   
4b70: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4b80: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
4b90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4ba0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4bf0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
4c00: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
4c10: 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
4c20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  (..          SQL
4c30: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
4c40: 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  nnection,..     
4c50: 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69       IntPtr pCli
4c60: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
4c70: 20 20 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61      string\[\] a
4c80: 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20  rguments,..     
4c90: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
4ca0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
4cb0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
4cc0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
4cd0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4ce0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4cf0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
4d00: 65 20 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61  e rc = DeclareTa
4d10: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
4d20: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43    connection, "C
4d30: 52 45 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f  REATE TABLE igno
4d40: 72 65 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72  red(x);", ref er
4d50: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
4d60: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
4d70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
4d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
4d90: 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  turn rc;....    
4da0: 20 20 20 20 20 20 72 63 20 3d 20 44 65 63 6c 61        rc = Decla
4db0: 72 65 46 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65  reFunction(conne
4dc0: 63 74 69 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65  ction, -1, "Base
4dd0: 36 34 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  64", ref error);
4de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
4df0: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
4e00: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
4e10: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4e20: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
4e30: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
4e40: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
4e50: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
4e60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
4e70: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
4e80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
4e90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4ee0: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
4ef0: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
4f00: 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
4f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
4f20: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
4f30: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
4f40: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
4f50: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
4f60: 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
4f70: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
4f80: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d          cursor =
4f90: 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74 75   new SQLiteVirtu
4fa0: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61  alTableCursor(ta
4fb0: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
4fc0: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
4fd0: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
4fe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4ff0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5040: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
5050: 72 69 64 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75  ride bool FindFu
5060: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
5070: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
5080: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
5090: 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
50a0: 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
50b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
50c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
50d0: 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  f SQLiteFunction
50e0: 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20   function,..    
50f0: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
5100: 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20   pClientData..  
5110: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5120: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5130: 69 66 20 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e  if (argumentCoun
5140: 74 20 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20  t != 2)..       
5150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5160: 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
5170: 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f  table, String.Fo
5180: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
5190: 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c       "no \\"{0}\
51a0: 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 63  \" functions acc
51b0: 65 70 74 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74  ept {1} argument
51c0: 28 73 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  (s)",..         
51d0: 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20       base.Name, 
51e0: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b  argumentCount));
51f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5200: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
5210: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5220: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
5230: 69 6e 67 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c  ing.Equals(name,
5240: 20 22 42 61 73 65 36 34 22 2c 0d 0a 20 20 20 20   "Base64",..    
5250: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
5260: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
5270: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
5280: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5290: 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
52a0: 65 45 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74  eError(table, St
52b0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
52d0: 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69  \\"{0}\\" functi
52e0: 6f 6e 73 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c  ons are named \\
52f0: 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20  "{1}\\"",..     
5300: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
5310: 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  me, name));.... 
5320: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5330: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
5340: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5350: 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65     function = ne
5360: 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  w SQLiteFunction
5370: 24 7b 69 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20  ${id}();..      
5380: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
5390: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
53a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
53b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
53f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5400: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
5410: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
5420: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5430: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53   public static S
5440: 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73  tringList GetLis
5450: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
5460: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
5470: 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65  List result = ne
5480: 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
5490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  ...          usi
54a0: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
54b0: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
54c0: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
54d0: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
54e0: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
54f0: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
5500: 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72  };[getTestProper
5510: 74 69 65 73 20 4e 6f 42 69 6e 64 46 75 6e 63 74  ties NoBindFunct
5520: 69 6f 6e 73 5d 22 29 29 0d 0a 20 20 20 20 20 20  ions]"))..      
5530: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5540: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
5550: 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  en();..         
5560: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
5570: 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53  eateModule(new S
5580: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
5590: 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29  {id}("mod${id}")
55a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
55b0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
55c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
55d0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
55e0: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
55f0: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
5600: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5630: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
5640: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
5650: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
5670: 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46  ult.Add(String.F
5680: 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d  ormat("{0}", com
5690: 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c  mand.ExecuteScal
56a0: 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20  ar()));..       
56b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
56c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
56d0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
56e0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
56f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5700: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
5710: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
5720: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5730: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
5740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
5760: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
5770: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
5780: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
5790: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
57a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
57b0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
57c0: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
57d0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32   "[subst ${sql(2
57e0: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
57f0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
5800: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
5810: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
5820: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
5830: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
5840: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5850: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
5860: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
5870: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
5880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5890: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
58a0: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
58b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
58c0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
58d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
58e0: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
58f0: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
5900: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
5910: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
5920: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
5930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5940: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
5950: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
5960: 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d  st ${sql(3)}]";.
5970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5980: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
5990: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
59a0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
59b0: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
59c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
59d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
59e0: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
59f0: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
5a00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5a10: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
5a20: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
5a30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5a40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5a50: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
5a60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5a70: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
5a80: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
5a90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
5aa0: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
5ad0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
5ae0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
5af0: 71 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(4)}]";..     
5b00: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
5b10: 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72  t.Add(String.For
5b20: 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61  mat("{0}", comma
5b30: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
5b40: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
5b50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5b60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
5b70: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
5b80: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
5b90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5ba0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
5bb0: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
5bc0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5bd0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
5be0: 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  tion.Close();.. 
5bf0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5c00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
5c10: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
5c20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5c80: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
5c90: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
5ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5cb0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
5cc0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5cd0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
5ce0: 74 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20  true false true 
5cf0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b  results errors [
5d00: 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61  list System.Data
5d10: 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c  .SQLite.dll Eagl
5d20: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73  e.dll]]....  lis
5d30: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
5d40: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
5d50: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
5d60: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
5d70: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
5d80: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
5d90: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
5da0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
5db0: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
5dc0: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
5dd0: 65 74 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20  etList..      } 
5de0: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
5df0: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72  esult ""]}] [nor
5e00: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
5e10: 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c   $result]..} -cl
5e20: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
5e30: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
5e40: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
5e50: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
5e60: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
5e70: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
5e80: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
5e90: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
5ea0: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
5eb0: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f  t monoBug28 mono
5ec0: 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64  Crash211 command
5ed0: 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
5ee0: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
5ef0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51  m.Data.SQLite SQ
5f00: 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65  LiteInterop\..de
5f10: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
5f20: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
5f30: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
5f40: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
5f50: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
5f60: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e  egexp -result [n
5f70: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
5f80: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
5f90: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
5fa0: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
5fb0: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
5fc0: 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c  {\} b25l \{SQL l
5fd0: 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 28 20 6f 72  ogic\..error( or
5fe0: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
5ff0: 65 29 3f 20 2d 2d 20 75 6e 61 62 6c 65 20 74 6f  e)? -- unable to
6000: 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 42 61   use function Ba
6010: 73 65 36 34 20 69 6e 20 74 68 65 20 72 65 71 75  se64 in the requ
6020: 65 73 74 65 64 5c 0d 0a 63 6f 6e 74 65 78 74 5c  ested\..context\
6030: 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  } \{SQL logic er
6040: 72 6f 72 28 20 6f 72 20 6d 69 73 73 69 6e 67 20  ror( or missing 
6050: 64 61 74 61 62 61 73 65 29 3f 20 2d 2d 20 6e 6f  database)? -- no
6060: 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 5c   such function:\
6070: 0d 0a 42 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d  ..Base65\}\}$}]}
6080: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
6090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
60d0: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
60e0: 74 65 73 74 20 76 74 61 62 2d 31 2e 35 20 7b 76  test vtab-1.5 {v
60f0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e  irtual table fun
6100: 63 74 69 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d  ction support} -
6110: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
6120: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 35  ileName vtab-1.5
6130: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
6140: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
6150: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
6160: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
6170: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
6180: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
6190: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
61a0: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
61b0: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
61c0: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
61d0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
61e0: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
61f0: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
6200: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
6210: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
6220: 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54 28   Base64(x, CAST(
6230: 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20  'one' AS BLOB)) 
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 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c  (3) { \..    SEL
6270: 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43 41  ECT Base64(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 2c 20 27 74 77 6f 27 29 20 46 52 4f 4d 20 74  ), 'two') FROM t
62a0: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
62b0: 0a 20 20 73 65 74 20 73 71 6c 28 34 29 20 7b 20  .  set sql(4) { 
62c0: 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61  \..    SELECT Ba
62d0: 73 65 36 35 28 78 2c 20 43 41 53 54 28 27 6f 6e  se65(x, CAST('on
62e0: 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f  e' AS BLOB)) FRO
62f0: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
6300: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
6310: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
6320: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
6330: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
6340: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
6350: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
6360: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
6370: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
6380: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
6390: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
63a0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
63b0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
63c0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
63d0: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73       public clas
63e0: 73 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  s SQLiteFunction
63f0: 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75  ${id} : SQLiteFu
6400: 6e 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d  nction..      {.
6410: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
6420: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
6430: 69 64 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 20  id}()..         
6440: 20 3a 20 62 61 73 65 28 53 51 4c 69 74 65 44 61   : base(SQLiteDa
6450: 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c  teFormats.Defaul
6460: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  t, DateTimeKind.
6470: 55 6e 73 70 65 63 69 66 69 65 64 2c 0d 0a 20 20  Unspecified,..  
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
6490: 75 6c 6c 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20  ull, false)..   
64a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
64b0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
64c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
64d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6520: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6530: 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74   override object
6540: 20 49 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20   Invoke(..      
6550: 20 20 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61      object\[\] a
6560: 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29  rgs..          )
6570: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6580: 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73 20         if (args 
6590: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
65a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
65b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
65c0: 69 66 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20  if (args.Length 
65d0: 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20  != 2)..         
65e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72     return new Ar
65f0: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
6600: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
6620: 65 65 64 20 65 78 61 63 74 6c 79 20 74 77 6f 20  eed exactly two 
6630: 61 72 67 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b  arguments, got {
6640: 30 7d 22 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68  0}", args.Length
6650: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
6660: 20 6f 62 6a 65 63 74 20 61 72 67 20 3d 20 61 72   object arg = ar
6670: 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20  gs\[1\];....    
6680: 20 20 20 20 20 20 69 66 20 28 61 72 67 20 3d 3d        if (arg ==
6690: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
66a0: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
66b0: 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
66c0: 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20        Type type 
66d0: 3d 20 61 72 67 2e 47 65 74 54 79 70 65 28 29 3b  = arg.GetType();
66e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
66f0: 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
6700: 28 44 42 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  (DBNull))..     
6710: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
6720: 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20  ring.Empty;.... 
6730: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
6740: 65 20 21 3d 20 74 79 70 65 6f 66 28 62 79 74 65  e != typeof(byte
6750: 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20 20 20 20 20  \[\]))..        
6760: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41      return new A
6770: 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
6780: 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
6790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
67a0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
67b0: 20 62 79 74 65 20 61 72 72 61 79 2c 20 67 6f 74   byte array, got
67c0: 20 7b 30 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a   {0}", type));..
67d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
67e0: 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73  rn Convert.ToBas
67f0: 65 36 34 53 74 72 69 6e 67 28 28 62 79 74 65 5c  e64String((byte\
6800: 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a 20 20 20 20  [\]) arg);..    
6810: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
6820: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
6830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6870: 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69  /....      publi
6880: 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  c sealed class S
6890: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
68a0: 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64  {id} : SQLiteMod
68b0: 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b  uleNoop..      {
68c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
68d0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
68e0: 74 24 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61  t${id}(string na
68f0: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a  me)..          :
6900: 20 62 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20   base(name)..   
6910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6920: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
6930: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
6940: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6990: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
69a0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
69b0: 45 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65  ErrorCode Create
69c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  (..          SQL
69d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
69e0: 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  nnection,..     
69f0: 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69       IntPtr pCli
6a00: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
6a10: 20 20 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61      string\[\] a
6a20: 72 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20  rguments,..     
6a30: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
6a40: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
6a50: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
6a60: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
6a70: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
6a80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6a90: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
6aa0: 65 20 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61  e rc = DeclareTa
6ab0: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
6ac0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43    connection, "C
6ad0: 52 45 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f  REATE TABLE igno
6ae0: 72 65 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72  red(x);", ref er
6af0: 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
6b00: 20 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c     if (rc != SQL
6b10: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6b30: 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20  turn rc;....    
6b40: 20 20 20 20 20 20 72 63 20 3d 20 44 65 63 6c 61        rc = Decla
6b50: 72 65 46 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65  reFunction(conne
6b60: 63 74 69 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65  ction, -1, "Base
6b70: 36 34 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  64", ref error);
6b80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
6b90: 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72   (rc != SQLiteEr
6ba0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
6bb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
6bc0: 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rc;....         
6bd0: 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c   table = new SQL
6be0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28  iteVirtualTable(
6bf0: 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20  arguments);..   
6c00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
6c10: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
6c20: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
6c30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6c80: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
6c90: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
6ca0: 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28  eErrorCode Open(
6cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
6cc0: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
6cd0: 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  able,..         
6ce0: 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74 75   ref SQLiteVirtu
6cf0: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75  alTableCursor cu
6d00: 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
6d10: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
6d20: 20 20 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d          cursor =
6d30: 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72 74 75   new SQLiteVirtu
6d40: 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61  alTableCursor(ta
6d50: 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
6d60: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
6d70: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
6d80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6d90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6de0: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
6df0: 72 69 64 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75  ride bool FindFu
6e00: 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  nction(..       
6e10: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
6e20: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
6e30: 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
6e40: 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
6e50: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
6e60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  e,..          re
6e70: 66 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  f SQLiteFunction
6e80: 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20   function,..    
6e90: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
6ea0: 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20   pClientData..  
6eb0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6ec0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6ed0: 69 66 20 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e  if (argumentCoun
6ee0: 74 20 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20  t != 2)..       
6ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6f00: 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
6f10: 74 61 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f  table, String.Fo
6f20: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
6f30: 20 20 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c       "no \\"{0}\
6f40: 5c 22 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 63  \" functions acc
6f50: 65 70 74 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74  ept {1} argument
6f60: 28 73 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  (s)",..         
6f70: 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20       base.Name, 
6f80: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b  argumentCount));
6f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6fa0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
6fb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6fc0: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
6fd0: 69 6e 67 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c  ing.Equals(name,
6fe0: 20 22 42 61 73 65 36 34 22 2c 0d 0a 20 20 20 20   "Base64",..    
6ff0: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
7000: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
7010: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
7020: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7030: 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c           SetTabl
7040: 65 45 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74  eError(table, St
7050: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
7060: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
7070: 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69  \\"{0}\\" functi
7080: 6f 6e 73 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c  ons are named \\
7090: 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20  "{1}\\"",..     
70a0: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
70b0: 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  me, name));.... 
70c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
70d0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
70e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
70f0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65     function = ne
7100: 77 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  w SQLiteFunction
7110: 24 7b 69 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20  ${id}();..      
7120: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
7130: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7140: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
7150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7190: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
71a0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
71b0: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
71c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
71d0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53   public static S
71e0: 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73  tringList GetLis
71f0: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  t()..        {..
7200: 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
7210: 4c 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65  List result = ne
7220: 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
7230: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69  ...          usi
7240: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ng (SQLiteConnec
7250: 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  tion connection 
7260: 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e  = new SQLiteConn
7270: 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ection(..       
7280: 20 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75         "Data Sou
7290: 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65  rce=${dataSource
72a0: 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70 65 72  };[getTestProper
72b0: 74 69 65 73 5d 22 29 29 0d 0a 20 20 20 20 20 20  ties]"))..      
72c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
72d0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70     connection.Op
72e0: 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  en();..         
72f0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
7300: 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53  eateModule(new S
7310: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
7320: 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29  {id}("mod${id}")
7330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7340: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
7350: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7360: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
7370: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
7380: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
7390: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
73b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
73c0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
73d0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
73e0: 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20  {sql(1)}]";..   
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
7400: 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46  ult.Add(String.F
7410: 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d  ormat("{0}", com
7420: 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c  mand.ExecuteScal
7430: 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20  ar()));..       
7440: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7450: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7460: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
7470: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
7480: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7490: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
74a0: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
74b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
74d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
74f0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
7500: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
7510: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
7520: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
7530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7540: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
7550: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
7560: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32   "[subst ${sql(2
7570: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
7580: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
7590: 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  d(String.Format(
75a0: 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45  "{0}", command.E
75b0: 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29 29  xecuteScalar()))
75c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
75d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
75e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
75f0: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
7600: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
7610: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7620: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65   result.Add(e.Me
7630: 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ssage);..       
7640: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7650: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
7660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7670: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
7680: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
7690: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
76a0: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
76b0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
76c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
76d0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
76e0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
76f0: 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d  st ${sql(3)}]";.
7700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7710: 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69   result.Add(Stri
7720: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c  ng.Format("{0}",
7730: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
7740: 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20  Scalar()));..   
7750: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7760: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7770: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
7780: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
7790: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
77a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
77b0: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
77c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
77d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
77e0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
77f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7800: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
7810: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
7820: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
7830: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
7840: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7860: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
7870: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
7880: 71 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(4)}]";..     
7890: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
78a0: 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72  t.Add(String.For
78b0: 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61  mat("{0}", comma
78c0: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
78d0: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
78e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
78f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7900: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
7910: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
7920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7930: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
7940: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
7950: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7960: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
7970: 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  tion.Close();.. 
7980: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7990: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
79a0: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
79b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a00: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7a10: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
7a20: 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20  id Main()..     
7a30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7a40: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
7a50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7a60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
7a70: 74 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20  true false true 
7a80: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b  results errors [
7a90: 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61  list System.Data
7aa0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c  .SQLite.dll Eagl
7ab0: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73  e.dll]]....  lis
7ac0: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73  t $code $results
7ad0: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
7ae0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72  {[info exists er
7af0: 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20  rors] ? $errors 
7b00: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..      
7b10: 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20  [expr {$code eq 
7b20: 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d  "Ok" ? [catch {.
7b30: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
7b40: 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24  invoke _Dynamic$
7b50: 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47  {id}.Test${id} G
7b60: 65 74 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20  etList..      } 
7b70: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
7b80: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72  esult ""]}] [nor
7b90: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
7ba0: 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c   $result]..} -cl
7bb0: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
7bc0: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
7bd0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
7be0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
7bf0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
7c00: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
7c10: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
7c20: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
7c30: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
7c40: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f  t monoBug28 mono
7c50: 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64  Crash211 command
7c60: 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
7c70: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
7c80: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51  m.Data.SQLite SQ
7c90: 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65  LiteInterop\..de
7ca0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
7cb0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
7cc0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
7cd0: 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68  TABLE compileCSh
7ce0: 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72  arp} -match \..r
7cf0: 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e  egexp -result [n
7d00: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
7d10: 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d  lt {^Ok\..System
7d20: 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65  #CodeDom#Compile
7d30: 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74  r#CompilerResult
7d40: 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c  s#\d+ \{\} 0 \{\
7d50: 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c  {\} b25l \{SQL l
7d60: 6f 67 69 63 5c 0d 0a 65 72 72 6f 72 28 20 6f 72  ogic\..error( or
7d70: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
7d80: 65 29 3f 20 2d 2d 20 28 3f 3a 75 6e 61 62 6c 65  e)? -- (?:unable
7d90: 20 74 6f 20 75 73 65 20 66 75 6e 63 74 69 6f 6e   to use function
7da0: 20 42 61 73 65 36 34 20 69 6e 20 74 68 65 5c 0d   Base64 in the\.
7db0: 0a 72 65 71 75 65 73 74 65 64 20 63 6f 6e 74 65  .requested conte
7dc0: 78 74 7c 6e 65 65 64 20 65 78 61 63 74 6c 79 20  xt|need exactly 
7dd0: 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2c 20 67 6f  one argument, go
7de0: 74 20 33 29 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67  t 3)\} \{SQL log
7df0: 69 63 20 65 72 72 6f 72 28 20 6f 72 5c 0d 0a 6d  ic error( or\..m
7e00: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 29  issing database)
7e10: 3f 20 2d 2d 20 6e 6f 20 73 75 63 68 20 66 75 6e  ? -- no such fun
7e20: 63 74 69 6f 6e 3a 20 42 61 73 65 36 35 5c 7d 5c  ction: Base65\}\
7e30: 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23  }$}]}....#######
7e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e80: 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54  ########....runT
7e90: 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31  est {test vtab-1
7ea0: 2e 36 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c  .6 {virtual tabl
7eb0: 65 20 72 65 6e 61 6d 65 20 73 75 70 70 6f 72 74  e rename support
7ec0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
7ed0: 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d  t fileName vtab-
7ee0: 31 2e 36 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20  1.6.db..} -body 
7ef0: 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a  {..  set id [obj
7f00: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
7f10: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
7f20: 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20   NextId]..  set 
7f30: 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65  dataSource [file
7f40: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61   join [getDataba
7f50: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69  seDirectory] $fi
7f60: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74  leName]....  set
7f70: 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20   sql(1) { \..   
7f80: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
7f90: 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49  TABLE t${id} USI
7fa0: 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a  NG mod${id}; \..
7fb0: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
7fc0: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 41 4c 54  (2) { \..    ALT
7fd0: 45 52 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20  ER TABLE t${id} 
7fe0: 52 45 4e 41 4d 45 20 54 4f 20 78 24 7b 69 64 7d  RENAME TO x${id}
7ff0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
8000: 74 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20  t sql(3) { \..  
8010: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52    SELECT name FR
8020: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
8030: 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74   WHERE type = 't
8040: 61 62 6c 65 27 20 4f 52 44 45 52 20 42 59 20 6e  able' ORDER BY n
8050: 61 6d 65 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  ame; \..  }.... 
8060: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
8070: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
8080: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
8090: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
80a0: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
80b0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
80c0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
80d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20  .Data.SQLite;.. 
80e0: 20 20 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f     using Eagle._
80f0: 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69  Containers.Publi
8100: 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70  c;....    namesp
8110: 61 63 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64  ace _Dynamic${id
8120: 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  }..    {..      
8130: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
8140: 61 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ass SQLiteModule
8150: 54 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69  Test${id} : SQLi
8160: 74 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20  teModuleNoop..  
8170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
8180: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
8190: 6c 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69  leTest${id}(stri
81a0: 6e 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  ng name)..      
81b0: 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29      : base(name)
81c0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
81d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
81e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
81f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
8200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8240: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
8250: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
8260: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
8270: 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
8280: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
8290: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a  on connection,..
82a0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
82b0: 20 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20   pClientData,.. 
82c0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c           string\
82d0: 5b 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a  [\] arguments,..
82e0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
82f0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
8300: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
8310: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
8320: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29  ror..          )
8330: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8340: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
8350: 6f 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c  orCode rc = Decl
8360: 61 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  areTable(..     
8370: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
8380: 6e 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  n, "CREATE TABLE
8390: 20 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72   ignored(x);", r
83a0: 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ef error);....  
83b0: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
83c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
83d0: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
83e0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d     return rc;...
83f0: 0a 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65  .          table
8400: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72   = new SQLiteVir
8410: 74 75 61 6c 54 61 62 6c 65 28 61 72 67 75 6d 65  tualTable(argume
8420: 6e 74 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  nts);..         
8430: 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
8440: 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
8450: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8460: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
84b0: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
84c0: 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
84d0: 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20 20 20  Code Open(..    
84e0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
84f0: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
8500: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53  .          ref S
8510: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
8520: 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a  eCursor cursor..
8530: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8540: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8550: 20 20 63 75 72 73 6f 72 20 3d 20 6e 65 77 20 53    cursor = new S
8560: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
8570: 65 43 75 72 73 6f 72 28 74 61 62 6c 65 29 3b 0d  eCursor(table);.
8580: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
8590: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
85a0: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  e.Ok;..        }
85b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
85c0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
85d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8610: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
8620: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
8630: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
8640: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
8650: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
8660: 65 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  etList()..      
8670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
8680: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
8690: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
86a0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
86b0: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
86c0: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
86d0: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
86e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
8700: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
8710: 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50  ource};[getTestP
8720: 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20  roperties]")).. 
8730: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8740: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
8750: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20  on.Open();..    
8760: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
8770: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
8780: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
8790: 54 65 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b  Test${id}("mod${
87a0: 69 64 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  id}"));....     
87b0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
87c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
87d0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
87e0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
87f0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
8800: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
8810: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8830: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
8840: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
8850: 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b  bst ${sql(1)}]";
8860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8870: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72    result.Add(Str
8880: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22  ing.Format("{0}"
8890: 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  , command.Execut
88a0: 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20  eScalar()));..  
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
88c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
88d0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
88e0: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
88f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8900: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
8910: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
8920: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8930: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8940: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
8950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8960: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
8970: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
8980: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
8990: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89c0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
89d0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
89e0: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
89f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
8a00: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
8a10: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
8a20: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
8a30: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a60: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
8a70: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
8aa0: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
8ab0: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
8ac0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8ad0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8ae0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8af0: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
8b00: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
8b10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8b20: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
8b30: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
8b40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8b60: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
8b70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8b80: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
8b90: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
8ba0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
8bb0: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8be0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
8bf0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
8c00: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(2)}]";..     
8c10: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
8c20: 74 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72  t.Add(String.For
8c30: 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61  mat("{0}", comma
8c40: 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72  nd.ExecuteScalar
8c50: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
8c60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8c70: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8c80: 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
8c90: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
8ca0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8cb0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
8cc0: 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20  e.Message);..   
8cd0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8ce0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
8cf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
8d10: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
8d20: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
8d30: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
8d40: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
8d50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8d60: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
8d70: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
8d80: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d  [subst ${sql(3)}
8d90: 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]";....         
8da0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
8db0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64  LiteDataReader d
8dc0: 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d  ataReader = comm
8dd0: 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65  and.ExecuteReade
8de0: 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r())..          
8df0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8e00: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
8e10: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
8e20: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
8e30: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
8e40: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
8e50: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
8e60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8e80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8e90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8ea0: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
8eb0: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
8ec0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8ed0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
8ee0: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
8ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8f00: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
8f10: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
8f20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8f30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
8f40: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
8f50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fa0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
8fb0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
8fc0: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
8fd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
8fe0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8ff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9000: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
9010: 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20 72  rue false true r
9020: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c  esults errors [l
9030: 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ist System.Data.
9040: 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65  SQLite.dll Eagle
9050: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74  .dll]]....  list
9060: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
9070: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
9080: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
9090: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
90a0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
90b0: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
90c0: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
90d0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
90e0: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
90f0: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
9100: 74 4c 69 73 74 0d 0a 20 20 20 20 20 20 7d 20 72  tList..      } r
9110: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
9120: 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d  sult ""]}] [norm
9130: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
9140: 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65  $result]..} -cle
9150: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
9160: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
9170: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
9180: 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65  lain result code
9190: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
91a0: 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69  sql dataSource i
91b0: 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  d fileName..} -c
91c0: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
91d0: 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
91e0: 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43   monoBug28 monoC
91f0: 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e  rash211 command.
9200: 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
9210: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
9220: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
9230: 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66  iteInterop\..def
9240: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
9250: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
9260: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
9270: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
9280: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
9290: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
92a0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
92b0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
92c0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
92d0: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
92e0: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b  #\d+ \{\} 0 \{\{
92f0: 5c 7d 20 74 5c 64 2b 20 5c 7b 5c 7d 20 78 5c 64  \} t\d+ \{\} x\d
9300: 2b 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23  +\}$}]}....#####
9310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9350: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75  ##########....ru
9360: 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62  nTest {test vtab
9370: 2d 31 2e 37 20 7b 76 69 72 74 75 61 6c 20 74 61  -1.7 {virtual ta
9380: 62 6c 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d  ble xBestIndex m
9390: 61 72 73 68 61 6c 6c 69 6e 67 20 28 31 29 7d 20  arshalling (1)} 
93a0: 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20  -setup {..  set 
93b0: 66 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e  fileName vtab-1.
93c0: 37 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  7.db..} -body {.
93d0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
93e0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
93f0: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
9400: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
9410: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
9420: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
9430: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
9440: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
9450: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
9460: 52 45 41 54 45 20 54 41 42 4c 45 20 74 24 7b 69  REATE TABLE t${i
9470: 64 7d 28 79 20 43 48 41 52 28 31 30 29 20 4e 4f  d}(y CHAR(10) NO
9480: 54 20 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b  T NULL PRIMARY K
9490: 45 59 29 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41  EY); \..    CREA
94a0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
94b0: 20 75 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f   u${id} USING mo
94c0: 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  d${id}; \..  }..
94d0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b  ..  set sql(2) {
94e0: 20 5c 0d 0a 20 20 20 20 49 4e 53 45 52 54 20 49   \..    INSERT I
94f0: 4e 54 4f 20 74 24 7b 69 64 7d 20 53 45 4c 45 43  NTO t${id} SELEC
9500: 54 20 78 20 46 52 4f 4d 20 75 24 7b 69 64 7d 3b  T x FROM u${id};
9510: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
9520: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
9530: 20 53 45 4c 45 43 54 20 76 24 7b 69 64 7d 2e 79   SELECT v${id}.y
9540: 20 46 52 4f 4d 20 74 24 7b 69 64 7d 20 76 24 7b   FROM t${id} v${
9550: 69 64 7d 20 4c 45 46 54 20 4f 55 54 45 52 20 4a  id} LEFT OUTER J
9560: 4f 49 4e 20 5c 0d 0a 20 20 20 20 75 24 7b 69 64  OIN \..    u${id
9570: 7d 20 4f 4e 20 75 24 7b 69 64 7d 2e 78 20 3d 20  } ON u${id}.x = 
9580: 76 24 7b 69 64 7d 2e 79 20 57 48 45 52 45 20 75  v${id}.y WHERE u
9590: 24 7b 69 64 7d 2e 78 20 49 53 20 4e 4f 54 20 4e  ${id}.x IS NOT N
95a0: 55 4c 4c 20 5c 0d 0a 20 20 20 20 4f 52 44 45 52  ULL \..    ORDER
95b0: 20 42 59 20 76 24 7b 69 64 7d 2e 79 20 44 45 53   BY v${id}.y DES
95c0: 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75  C; \..  }....  u
95d0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
95e0: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d   results errors.
95f0: 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63  ...  set code [c
9600: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68  ompileCSharpWith
9610: 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75   [subst {..    u
9620: 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20  sing System;..  
9630: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 43    using System.C
9640: 6f 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20 20 20  ollections;..   
9650: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
9660: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
9670: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
9680: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
9690: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
96a0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
96b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
96c0: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
96d0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73   SQLiteModuleTes
96e0: 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65 4d  t${id} : SQLiteM
96f0: 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65 0d  oduleEnumerable.
9700: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
9710: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
9720: 52 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  Result;....     
9730: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9780: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
9790: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
97a0: 64 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 73  d}(..          s
97b0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
97c0: 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61 62         IEnumerab
97d0: 6c 65 20 65 6e 75 6d 65 72 61 62 6c 65 0d 0a 20  le enumerable.. 
97e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
97f0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 6e 61 6d        : base(nam
9800: 65 2c 20 65 6e 75 6d 65 72 61 62 6c 65 29 0d 0a  e, enumerable)..
9810: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9820: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
9830: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
9840: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
98a0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46  .        // BUGF
98b0: 49 58 3a 20 54 68 69 73 20 6d 65 74 68 6f 64 20  IX: This method 
98c0: 68 65 6c 70 73 20 76 65 72 69 66 79 20 74 69 63  helps verify tic
98d0: 6b 65 74 20 5c 5b 35 36 66 35 31 31 64 32 36 38  ket \[56f511d268
98e0: 5c 5d 20 69 73 20 66 69 78 65 64 2e 0d 0a 20 20  \] is fixed...  
98f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9900: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
9910: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
9920: 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  e BestIndex(..  
9930: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
9940: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
9950: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  ,..          SQL
9960: 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a  iteIndex index..
9970: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
9980: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9990: 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74 70    if (index.Outp
99a0: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73  uts.ConstraintUs
99b0: 61 67 65 73 2e 4c 65 6e 67 74 68 20 3e 20 30 29  ages.Length > 0)
99c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
99d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
99e0: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
99f0: 73 74 72 61 69 6e 74 55 73 61 67 65 73 5c 5b 30  straintUsages\[0
9a00: 5c 5d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  \] == null)..   
9a10: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9a20: 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
9a30: 65 70 74 69 6f 6e 28 22 43 6f 6e 73 74 72 61 69  eption("Constrai
9a40: 6e 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20 69 73  ntUsages\[0\] is
9a50: 20 6e 75 6c 6c 22 29 3b 0d 0a 20 20 20 20 20 20   null");..      
9a60: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
9a70: 20 20 20 20 20 20 20 20 20 20 52 65 73 75 6c 74            Result
9a80: 20 3d 20 22 43 6f 6e 73 74 72 61 69 6e 74 55 73   = "ConstraintUs
9a90: 61 67 65 73 20 69 73 20 4f 4b 22 3b 0d 0a 20 20  ages is OK";..  
9aa0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9ab0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 61         return ba
9ac0: 73 65 2e 42 65 73 74 49 6e 64 65 78 28 74 61 62  se.BestIndex(tab
9ad0: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
9ae0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
9af0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c  //....      publ
9b50: 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  ic static class 
9b60: 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20  Test${id}..     
9b70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c   {..        publ
9b80: 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67  ic static String
9b90: 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72  List GetList(par
9ba0: 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73  ams string\[\] s
9bb0: 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20  trings)..       
9bc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
9bd0: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
9be0: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
9bf0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9c00: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
9c10: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
9c20: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
9c30: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
9c40: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
9c50: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
9c60: 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72  urce};[getTestPr
9c70: 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20  operties]"))..  
9c80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9c90: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
9ca0: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
9cb0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
9cc0: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 6d  oduleTest${id} m
9cd0: 6f 64 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  odule = new SQLi
9ce0: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
9cf0: 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }(..            
9d00: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
9d10: 73 74 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20  strings);....   
9d20: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
9d30: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
9d40: 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20  (module);....   
9d50: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9d60: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
9d70: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
9d80: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
9d90: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
9da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9db0: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
9dc0: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
9dd0: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
9df0: 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45  lt.Add(command.E
9e00: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
9e10: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
9e20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
9e40: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
9e50: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
9e60: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
9e70: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
9e80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9e90: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
9ea0: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
9eb0: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
9ed0: 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e  esult.Add(comman
9ee0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
9ef0: 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  y().ToString());
9f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9f10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
9f20: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
9f30: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
9f40: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
9f50: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
9f60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9f70: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
9f80: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
9f90: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
9fa0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
9fb0: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
9fc0: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
9fd0: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
9fe0: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
9ff0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a010: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
a020: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
a030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a040: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
a050: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
a060: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
a070: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a090: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
a0a0: 64 64 28 6d 6f 64 75 6c 65 2e 52 65 73 75 6c 74  dd(module.Result
a0b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a0c0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
a0d0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
a0e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
a0f0: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
a100: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a110: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a160: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
a170: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
a180: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a190: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
a1a0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
a1b0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
a1c0: 0a 20 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65  .  }] true false
a1d0: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
a1e0: 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65  rors [list Syste
a1f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
a200: 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d  l Eagle.dll]]...
a210: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
a220: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
a230: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
a240: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
a250: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
a260: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
a270: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
a280: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
a290: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
a2a0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
a2b0: 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65  {id} GetList one
a2c0: 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30   two three 4 5.0
a2d0: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
a2e0: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
a2f0: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
a300: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
a310: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
a320: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
a330: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
a340: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
a350: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
a360: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
a370: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
a380: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
a390: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
a3a0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
a3b0: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
a3c0: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
a3d0: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
a3e0: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
a3f0: 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65 49 6e  .SQLite SQLiteIn
a400: 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65 43 6f  terop\..defineCo
a410: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61  nstant.System.Da
a420: 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f  ta.SQLite.INTERO
a430: 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE 
a440: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d  compileCSharp} -
a450: 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20  match \..regexp 
a460: 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69  -result [normali
a470: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f  zeVtabResult {^O
a480: 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44  k\..System#CodeD
a490: 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70  om#Compiler#Comp
a4a0: 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20  ilerResults#\d+ 
a4b0: 5c 7b 5c 7d 20 30 20 5c 7b 30 20 35 20 74 77 6f  \{\} 0 \{0 5 two
a4c0: 20 74 68 72 65 65 20 6f 6e 65 20 35 5c 2e 30 5c   three one 5\.0\
a4d0: 0d 0a 34 20 5c 7b 43 6f 6e 73 74 72 61 69 6e 74  ..4 \{Constraint
a4e0: 55 73 61 67 65 73 20 69 73 20 4f 4b 5c 7d 5c 7d  Usages is OK\}\}
a4f0: 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  $}]}....########
a500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a540: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
a550: 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e  st {test vtab-1.
a560: 38 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  8 {virtual table
a570: 20 78 42 65 73 74 49 6e 64 65 78 20 6d 61 72 73   xBestIndex mars
a580: 68 61 6c 6c 69 6e 67 20 28 32 29 7d 20 2d 73 65  halling (2)} -se
a590: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
a5a0: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 38 2e 64  eName vtab-1.8.d
a5b0: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
a5c0: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
a5d0: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
a5e0: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
a5f0: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
a600: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
a610: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
a620: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
a630: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
a640: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
a650: 54 45 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 28  TE TABLE t${id}(
a660: 79 20 43 48 41 52 28 31 30 29 20 4e 4f 54 20 4e  y CHAR(10) NOT N
a670: 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 29  ULL PRIMARY KEY)
a680: 3b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  ; \..    CREATE 
a690: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 75 24  VIRTUAL TABLE u$
a6a0: 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b  {id} USING mod${
a6b0: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
a6c0: 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
a6d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
a6e0: 20 74 24 7b 69 64 7d 20 53 45 4c 45 43 54 20 78   t${id} SELECT x
a6f0: 20 46 52 4f 4d 20 75 24 7b 69 64 7d 3b 20 5c 0d   FROM u${id}; \.
a700: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
a710: 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(3) { \..    SE
a720: 4c 45 43 54 20 76 24 7b 69 64 7d 2e 79 20 46 52  LECT v${id}.y FR
a730: 4f 4d 20 74 24 7b 69 64 7d 20 76 24 7b 69 64 7d  OM t${id} v${id}
a740: 20 4c 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e   LEFT OUTER JOIN
a750: 20 5c 0d 0a 20 20 20 20 75 24 7b 69 64 7d 20 4f   \..    u${id} O
a760: 4e 20 75 24 7b 69 64 7d 2e 78 20 3d 20 76 24 7b  N u${id}.x = v${
a770: 69 64 7d 2e 79 20 57 48 45 52 45 20 75 24 7b 69  id}.y WHERE u${i
a780: 64 7d 2e 78 20 49 53 20 4e 4f 54 20 4e 55 4c 4c  d}.x IS NOT NULL
a790: 20 5c 0d 0a 20 20 20 20 41 4e 44 20 75 24 7b 69   \..    AND u${i
a7a0: 64 7d 2e 78 20 42 45 54 57 45 45 4e 20 27 6f 6e  d}.x BETWEEN 'on
a7b0: 65 27 20 61 6e 64 20 27 74 68 72 65 65 27 20 4f  e' and 'three' O
a7c0: 52 44 45 52 20 42 59 20 75 24 7b 69 64 7d 2e 78  RDER BY u${id}.x
a7d0: 20 41 53 43 2c 20 5c 0d 0a 20 20 20 20 75 24 7b   ASC, \..    u${
a7e0: 69 64 7d 2e 78 20 44 45 53 43 3b 20 5c 0d 0a 20  id}.x DESC; \.. 
a7f0: 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e   }....  unset -n
a800: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
a810: 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65  s errors....  se
a820: 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43  t code [compileC
a830: 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74  SharpWith [subst
a840: 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79   {..    using Sy
a850: 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67  stem;..    using
a860: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
a870: 6f 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  ons;..    using 
a880: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
a890: 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  te;..    using E
a8a0: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
a8b0: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
a8c0: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
a8d0: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
a8e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61        public sea
a8f0: 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65  led class SQLite
a900: 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20  ModuleTest${id} 
a910: 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e  : SQLiteModuleEn
a920: 75 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20  umerable..      
a930: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
a940: 63 20 73 74 72 69 6e 67 20 52 65 73 75 6c 74 3b  c string Result;
a950: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
a9b0: 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75  ublic SQLiteModu
a9c0: 6c 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20  leTest${id}(..  
a9d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
a9e0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
a9f0: 49 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d  IEnumerable enum
aa00: 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  erable..        
aa10: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a    )..          :
aa20: 20 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d   base(name, enum
aa30: 65 72 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20  erable)..       
aa40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f   {..          //
aa50: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
aa60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
aa70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
aac0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
aad0: 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 54 68 69    // BUGFIX: Thi
aae0: 73 20 6d 65 74 68 6f 64 20 68 65 6c 70 73 20 76  s method helps v
aaf0: 65 72 69 66 79 20 74 69 63 6b 65 74 20 5c 5b 35  erify ticket \[5
ab00: 36 66 35 31 31 64 32 36 38 5c 5d 20 69 73 20 66  6f511d268\] is f
ab10: 69 78 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ixed...        /
ab20: 2f 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  /..        publi
ab30: 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74  c override SQLit
ab40: 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49  eErrorCode BestI
ab50: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
ab60: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
ab70: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
ab80: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65        SQLiteInde
ab90: 78 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20  x index..       
aba0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
abb0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69  .          if (i
abc0: 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
abd0: 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65  straintUsages.Le
abe0: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
abf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ac00: 20 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75      if (index.Ou
ac10: 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74  tputs.Constraint
ac20: 55 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e  Usages\[0\] == n
ac30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
ac40: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
ac50: 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
ac60: 22 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  "ConstraintUsage
ac70: 73 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29  s\[0\] is null")
ac80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ;..            e
ac90: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
aca0: 20 20 20 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e     Result = "Con
acb0: 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73  straintUsages is
acc0: 20 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20   OK";..         
acd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ace0: 72 65 74 75 72 6e 20 62 61 73 65 2e 42 65 73 74  return base.Best
acf0: 49 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e 64  Index(table, ind
ad00: 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex);..        }.
ad10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
ad20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ad70: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
ad80: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
ad90: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
ada0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
adb0: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
adc0: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
add0: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
ade0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
adf0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
ae00: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
ae10: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
ae20: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
ae30: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
ae40: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
ae50: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
ae60: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
ae70: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
ae80: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
ae90: 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65  getTestPropertie
aea0: 73 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  s]"))..         
aeb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aec0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
aed0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
aee0: 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65    SQLiteModuleTe
aef0: 73 74 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20 3d  st${id} module =
af00: 20 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c   new SQLiteModul
af10: 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20  eTest${id}(..   
af20: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f               "mo
af30: 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73  d${id}", strings
af40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
af50: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65    connection.Cre
af60: 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65  ateModule(module
af70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
af80: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
af90: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
afa0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
afb0: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
afc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
afd0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
afe0: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
aff0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
b000: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
b010: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
b020: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e  command.ExecuteN
b030: 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69  onQuery().ToStri
b040: 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng());..        
b050: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b060: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
b070: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
b080: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
b090: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b0c0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
b0d0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
b0e0: 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(2)}]";..      
b0f0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
b100: 64 64 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75  dd(command.Execu
b110: 74 65 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53  teNonQuery().ToS
b120: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
b130: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b140: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
b150: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d  QLiteCommand com
b160: 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f  mand = connectio
b170: 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  n.CreateCommand(
b180: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
b190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b1a0: 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64   command.Command
b1b0: 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24  Text = "[subst $
b1c0: 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20  {sql(3)}]";.... 
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
b1e0: 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65  ng (SQLiteDataRe
b1f0: 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72 20  ader dataReader 
b200: 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  = command.Execut
b210: 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20  eReader())..    
b220: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 69               whi
b240: 6c 65 20 28 64 61 74 61 52 65 61 64 65 72 2e 52  le (dataReader.R
b250: 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
b260: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
b270: 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72 5c  .Add(dataReader\
b280: 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29  [0\].ToString())
b290: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b2a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b2b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b2c0: 20 72 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64 75   result.Add(modu
b2d0: 6c 65 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20 20  le.Result);..   
b2e0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
b2f0: 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ion.Close();..  
b300: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
b320: 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
b330: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b380: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
b390: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
b3a0: 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20  d Main()..      
b3b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
b3c0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
b3d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b3e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74  }..    }..  }] t
b3f0: 72 75 65 20 66 61 6c 73 65 20 74 72 75 65 20 72  rue false true r
b400: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c  esults errors [l
b410: 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ist System.Data.
b420: 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65  SQLite.dll Eagle
b430: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74  .dll]]....  list
b440: 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20   $code $results 
b450: 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b  \..      [expr {
b460: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72  [info exists err
b470: 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a  ors] ? $errors :
b480: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b   ""}] \..      [
b490: 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22  expr {$code eq "
b4a0: 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a  Ok" ? [catch {..
b4b0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
b4c0: 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b  nvoke _Dynamic${
b4d0: 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 47 65  id}.Test${id} Ge
b4e0: 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f 20 74 68  tList one two th
b4f0: 72 65 65 20 34 20 35 2e 30 0d 0a 20 20 20 20 20  ree 4 5.0..     
b500: 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65   } result] : [se
b510: 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b  t result ""]}] [
b520: 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73  normalizeVtabRes
b530: 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20  ult $result]..} 
b540: 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c  -cleanup {..  cl
b550: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  eanupDb $fileNam
b560: 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  e....  unset -no
b570: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20  complain result 
b580: 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72 72  code results err
b590: 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72  ors sql dataSour
b5a0: 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a  ce id fileName..
b5b0: 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b  } -constraints {
b5c0: 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62  eagle command.ob
b5d0: 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d  ject monoBug28 m
b5e0: 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d  onoCrash211 comm
b5f0: 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c  and.sql\..compil
b600: 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79  e.DATA SQLite Sy
b610: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
b620: 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 5c 0d   SQLiteInterop\.
b630: 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e  .defineConstant.
b640: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b650: 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  te.INTEROP_VIRTU
b660: 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65  AL_TABLE compile
b670: 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c  CSharp} -match \
b680: 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74  ..regexp -result
b690: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
b6a0: 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73  esult {^Ok\..Sys
b6b0: 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70  tem#CodeDom#Comp
b6c0: 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73  iler#CompilerRes
b6d0: 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20  ults#\d+ \{\} 0 
b6e0: 5c 7b 30 20 35 20 6f 6e 65 20 74 68 72 65 65 5c  \{0 5 one three\
b6f0: 0d 0a 5c 7b 43 6f 6e 73 74 72 61 69 6e 74 55 73  ..\{ConstraintUs
b700: 61 67 65 73 20 69 73 20 4f 4b 5c 7d 5c 7d 24 7d  ages is OK\}\}$}
b710: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
b720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b750: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b760: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
b770: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 39 20   {test vtab-1.9 
b780: 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69 72  {IEnumerable vir
b790: 74 75 61 6c 20 74 61 62 6c 65 20 77 2f 6c 61 72  tual table w/lar
b7a0: 67 65 20 62 79 74 65 20 61 72 72 61 79 7d 20 2d  ge byte array} -
b7b0: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
b7c0: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 39  ileName vtab-1.9
b7d0: 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a  .db..} -body {..
b7e0: 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74    set id [object
b7f0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
b800: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65  ter.GetActive Ne
b810: 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74  xtId]..  set dat
b820: 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f  aSource [file jo
b830: 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44  in [getDatabaseD
b840: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN
b850: 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  ame]....  set sq
b860: 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52  l(1) { \..    CR
b870: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
b880: 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20  LE t${id} USING 
b890: 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  mod${id}; \..  }
b8a0: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29  ....  set sql(2)
b8b0: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
b8c0: 20 53 55 4d 28 78 29 20 46 52 4f 4d 20 74 24 7b   SUM(x) FROM t${
b8d0: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
b8e0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
b8f0: 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  in results error
b900: 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20  s....  set code 
b910: 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69  [compileCSharpWi
b920: 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20  th [subst {..   
b930: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a   using System;..
b940: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
b950: 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 0d  .Data.SQLite;...
b960: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
b970: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
b980: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
b990: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
b9a0: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
b9b0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
b9c0: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
b9d0: 47 65 74 53 75 6d 28 29 0d 0a 20 20 20 20 20 20  GetSum()..      
b9e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75    {..          u
b9f0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
ba00: 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
ba10: 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
ba20: 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
ba30: 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20 53           "Data S
ba40: 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75 72  ource=${dataSour
ba50: 63 65 7d 3b 5b 67 65 74 54 65 73 74 50 72 6f 70  ce};[getTestProp
ba60: 65 72 74 69 65 73 5d 22 29 29 0d 0a 20 20 20 20  erties]"))..    
ba70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ba80: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
ba90: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
baa0: 20 20 20 20 20 20 20 62 79 74 65 5c 5b 5c 5d 20         byte\[\] 
bab0: 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74 65  bytes = new byte
bac0: 5c 5b 31 30 34 38 35 37 36 5c 5d 3b 0d 0a 20 20  \[1048576\];..  
bad0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 52 61            new Ra
bae0: 6e 64 6f 6d 28 29 2e 4e 65 78 74 42 79 74 65 73  ndom().NextBytes
baf0: 28 62 79 74 65 73 29 3b 0d 0a 0d 0a 20 20 20 20  (bytes);....    
bb00: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
bb10: 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  on.CreateModule(
bb20: 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  new SQLiteModule
bb30: 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20  Enumerable(..   
bb40: 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24             "mod$
bb50: 7b 69 64 7d 22 2c 20 62 79 74 65 73 29 29 3b 0d  {id}", bytes));.
bb60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
bb70: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
bb80: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
bb90: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
bba0: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
bbb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bbc0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
bbd0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
bbe0: 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d  subst ${sql(1)}]
bbf0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
bc00: 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74    command.Execut
bc10: 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
bc20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bc30: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
bc40: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
bc50: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
bc60: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
bc70: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
bc80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bc90: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
bca0: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
bcb0: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bcd0: 74 75 72 6e 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  turn command.Exe
bce0: 63 75 74 65 53 63 61 6c 61 72 28 29 3b 0d 0a 20  cuteScalar();.. 
bcf0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
bd00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
bd10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
bd70: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
bd80: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
bd90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bda0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
bdb0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
bdc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
bdd0: 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74 72  }] true false tr
bde0: 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  ue results error
bdf0: 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
be00: 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c  Lite.dll]....  l
be10: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
be20: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
be30: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
be40: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
be50: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
be60: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
be70: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
be80: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
be90: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
bea0: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
beb0: 20 47 65 74 53 75 6d 0d 0a 20 20 20 20 20 20 7d   GetSum..      }
bec0: 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20   result] : [set 
bed0: 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f  result ""]}] [no
bee0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
bef0: 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63  t $result]..} -c
bf00: 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61  leanup {..  clea
bf10: 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d  nupDb $fileName.
bf20: 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f  ...  unset -noco
bf30: 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f  mplain result co
bf40: 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72  de results error
bf50: 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65  s sql dataSource
bf60: 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20   id fileName..} 
bf70: 2d 74 69 6d 65 20 74 72 75 65 20 2d 63 6f 6e 73  -time true -cons
bf80: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
bf90: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
bfa0: 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73  noBug28 monoCras
bfb0: 68 32 31 31 5c 0d 0a 63 6f 6d 6d 61 6e 64 2e 73  h211\..command.s
bfc0: 71 6c 20 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  ql compile.DATA 
bfd0: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
bfe0: 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65  ta.SQLite SQLite
bff0: 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65  Interop\..define
c000: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
c010: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
c020: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
c030: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
c040: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
c050: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
c060: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
c070: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
c080: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
c090: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
c0a0: 2b 20 5c 7b 5c 7d 20 30 20 28 3f 3a 2d 29 3f 5c  + \{\} 0 (?:-)?\
c0b0: 64 2b 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23  d+$}]}....######
c0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c0f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c100: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e  #########....run
c110: 54 65 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d  Test {test vtab-
c120: 31 2e 31 30 20 7b 76 69 72 74 75 61 6c 20 74 61  1.10 {virtual ta
c130: 62 6c 65 20 78 52 6f 77 49 64 20 75 6e 69 71 75  ble xRowId uniqu
c140: 65 6e 65 73 73 7d 20 2d 73 65 74 75 70 20 7b 0d  eness} -setup {.
c150: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
c160: 76 74 61 62 2d 31 2e 31 30 2e 64 62 0d 0a 7d 20  vtab-1.10.db..} 
c170: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
c180: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
c190: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
c1a0: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
c1b0: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
c1c0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
c1d0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
c1e0: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
c1f0: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
c200: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
c210: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
c220: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
c230: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
c240: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
c250: 20 20 20 53 45 4c 45 43 54 20 43 41 53 45 20 57     SELECT CASE W
c260: 48 45 4e 20 30 20 54 48 45 4e 20 72 6f 77 49 64  HEN 0 THEN rowId
c270: 20 45 4c 53 45 20 72 6f 77 49 64 20 45 4e 44 2c   ELSE rowId END,
c280: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 43   \..           C
c290: 41 53 45 20 57 48 45 4e 20 31 20 54 48 45 4e 20  ASE WHEN 1 THEN 
c2a0: 72 6f 77 49 64 20 45 4c 53 45 20 72 6f 77 49 64  rowId ELSE rowId
c2b0: 20 45 4e 44 20 46 52 4f 4d 20 74 24 7b 69 64 7d   END FROM t${id}
c2c0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e  ; \..  }....  un
c2d0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
c2e0: 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a  results errors..
c2f0: 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f  ..  set code [co
c300: 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20  mpileCSharpWith 
c310: 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73  [subst {..    us
c320: 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20  ing System;..   
c330: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
c340: 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20  ta.SQLite;..    
c350: 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e  using Eagle._Con
c360: 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d  tainers.Public;.
c370: 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ...    namespace
c380: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a   _Dynamic${id}..
c390: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62      {..      pub
c3a0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
c3b0: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
c3c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
c3d0: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
c3e0: 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61  gList GetList(pa
c3f0: 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20  rams string\[\] 
c400: 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20  strings)..      
c410: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
c420: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
c430: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
c440: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
c450: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
c460: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
c470: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
c480: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
c490: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
c4a0: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
c4b0: 6f 75 72 63 65 7d 3b 5b 67 65 74 54 65 73 74 50  ource};[getTestP
c4c0: 72 6f 70 65 72 74 69 65 73 5d 22 29 29 0d 0a 20  roperties]")).. 
c4d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c4e0: 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69          connecti
c4f0: 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20  on.Open();....  
c500: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63            connec
c510: 74 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c  tion.CreateModul
c520: 65 28 6e 65 77 20 53 51 4c 69 74 65 4d 6f 64 75  e(new SQLiteModu
c530: 6c 65 45 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20  leEnumerable(.. 
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f               "mo
c550: 64 24 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73  d${id}", strings
c560: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
c570: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
c580: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
c590: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
c5a0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
c5b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
c5d0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
c5e0: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
c5f0: 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  1)}]";..        
c600: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
c610: 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  (command.Execute
c620: 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72  NonQuery().ToStr
c630: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
c640: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c650: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
c660: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
c670: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
c680: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
c690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
c6b0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
c6c0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
c6d0: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(2)}]";....   
c6e0: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
c6f0: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
c700: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
c710: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
c720: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
c730: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c740: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c760: 2f 20 4e 4f 54 45 3a 20 4d 61 73 6b 20 6f 66 66  / NOTE: Mask off
c770: 20 74 68 65 20 68 61 73 68 20 63 6f 64 65 20 70   the hash code p
c780: 6f 72 74 69 6f 6e 20 62 65 63 61 75 73 65 20 69  ortion because i
c790: 74 20 64 69 66 66 65 72 73 0d 0a 20 20 20 20 20  t differs..     
c7a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c7b0: 20 20 20 20 62 65 74 77 65 65 6e 20 66 72 61 6d      between fram
c7c0: 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 2e 0d  ework versions..
c7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c7e0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c7f0: 20 20 20 20 20 6c 6f 6e 67 20 6d 61 73 6b 20 3d       long mask =
c800: 20 75 6e 63 68 65 63 6b 65 64 28 28 6c 6f 6e 67   unchecked((long
c810: 29 30 78 46 46 46 46 46 46 46 46 30 30 30 30 30  )0xFFFFFFFF00000
c820: 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  000);....       
c830: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
c840: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
c850: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
c860: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c870: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
c880: 41 64 64 28 28 64 61 74 61 52 65 61 64 65 72 2e  Add((dataReader.
c890: 47 65 74 49 6e 74 36 34 28 30 29 20 26 20 6d 61  GetInt64(0) & ma
c8a0: 73 6b 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  sk).ToString());
c8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8c0: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 28      result.Add((
c8d0: 64 61 74 61 52 65 61 64 65 72 2e 47 65 74 49 6e  dataReader.GetIn
c8e0: 74 36 34 28 31 29 20 26 20 6d 61 73 6b 29 2e 54  t64(1) & mask).T
c8f0: 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
c940: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
c950: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
c960: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
c970: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
c980: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c990: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c9e0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
c9f0: 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20  c void Main().. 
ca00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ca10: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
ca20: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
ca30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
ca40: 20 7d 5d 20 74 72 75 65 20 66 61 6c 73 65 20 74   }] true false t
ca50: 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  rue results erro
ca60: 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e  rs [list System.
ca70: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll 
ca80: 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  Eagle.dll]].... 
ca90: 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73   list $code $res
caa0: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ults \..      [e
cab0: 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  xpr {[info exist
cac0: 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72  s errors] ? $err
cad0: 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  ors : ""}] \..  
cae0: 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65      [expr {$code
caf0: 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63   eq "Ok" ? [catc
cb00: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
cb10: 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61  ect invoke _Dyna
cb20: 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69  mic${id}.Test${i
cb30: 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 6f  d} GetList one o
cb40: 6e 65 20 74 77 6f 20 6f 6e 65 20 74 77 6f 20 74  ne two one two t
cb50: 77 6f 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  wo..      } resu
cb60: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
cb70: 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69  t ""]}] [normali
cb80: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65  zeVtabResult $re
cb90: 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  sult]..} -cleanu
cba0: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
cbb0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
cbc0: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
cbd0: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
cbe0: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
cbf0: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
cc00: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
cc10: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
cc20: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
cc30: 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73  noBug28 monoCras
cc40: 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  h211 command.sql
cc50: 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  \..compile.DATA 
cc60: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
cc70: 74 61 2e 53 51 4c 69 74 65 20 53 51 4c 69 74 65  ta.SQLite SQLite
cc80: 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66 69 6e 65  Interop\..define
cc90: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
cca0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
ccb0: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
ccc0: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
ccd0: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
cce0: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
ccf0: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
cd00: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
cd10: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
cd20: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
cd30: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 30 20 34 32 39  + \{\} 0 \{0 429
cd40: 34 39 36 37 32 39 36 20 34 32 39 34 39 36 37 32  4967296 42949672
cd50: 39 36 5c 0d 0a 38 35 38 39 39 33 34 35 39 32 20  96\..8589934592 
cd60: 38 35 38 39 39 33 34 35 39 32 20 31 32 38 38 34  8589934592 12884
cd70: 39 30 31 38 38 38 20 31 32 38 38 34 39 30 31 38  901888 128849018
cd80: 38 38 20 31 37 31 37 39 38 36 39 31 38 34 20 31  88 17179869184 1
cd90: 37 31 37 39 38 36 39 31 38 34 5c 0d 0a 32 31 34  7179869184\..214
cda0: 37 34 38 33 36 34 38 30 20 32 31 34 37 34 38 33  74836480 2147483
cdb0: 36 34 38 30 20 32 35 37 36 39 38 30 33 37 37 36  6480 25769803776
cdc0: 20 32 35 37 36 39 38 30 33 37 37 36 5c 7d 24 7d   25769803776\}$}
cdd0: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
cde0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cdf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce20: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
ce30: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 31 31   {test vtab-1.11
ce40: 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76 69   {IEnumerable vi
ce50: 72 74 75 61 6c 20 74 61 62 6c 65 20 77 2f 6f 62  rtual table w/ob
ce60: 6a 65 63 74 20 69 64 65 6e 74 69 74 79 7d 20 2d  ject identity} -
ce70: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
ce80: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 31  ileName vtab-1.1
ce90: 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  1.db..} -body {.
cea0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
ceb0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
cec0: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
ced0: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
cee0: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
cef0: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
cf00: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
cf10: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
cf20: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
cf30: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
cf40: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
cf50: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
cf60: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
cf70: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
cf80: 54 20 72 6f 77 49 64 2c 20 2a 20 46 52 4f 4d 20  T rowId, * FROM 
cf90: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
cfa0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
cfb0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
cfc0: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
cfd0: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
cfe0: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
cff0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
d000: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
d010: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
d020: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
d030: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
d040: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
d050: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
d060: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
d070: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d080: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
d090: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
d0a0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d0b0: 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74 4c   StringList GetL
d0c0: 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69 6e  ist(params strin
d0d0: 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d 0a  g\[\] strings)..
d0e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d0f0: 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74 20       StringList 
d100: 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74 72  result = new Str
d110: 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
d120: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
d130: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
d140: 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
d150: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d160: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
d170: 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24    "Data Source=$
d180: 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65  {dataSource};[ge
d190: 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 5d  tTestProperties]
d1a0: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
d1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
d1c0: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
d1d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d1e0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
d1f0: 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69  eModule(new SQLi
d200: 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62  teModuleEnumerab
d210: 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le(..           
d220: 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 73     "mod${id}", s
d230: 74 72 69 6e 67 73 2c 20 74 72 75 65 29 29 3b 0d  trings, true));.
d240: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
d250: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
d260: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
d270: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
d280: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
d290: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d2a0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
d2b0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
d2c0: 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d  subst ${sql(1)}]
d2d0: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
d2e0: 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74    command.Execut
d2f0: 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
d300: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
d310: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
d320: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
d330: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
d340: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
d350: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
d360: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d370: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
d380: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
d390: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
d3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3b0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74  using (SQLiteDat
d3c0: 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64  aReader dataRead
d3d0: 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  er = command.Exe
d3e0: 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20  cuteReader()).. 
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65  while (dataReade
d420: 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  r.Read())..     
d430: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
d460: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
d470: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
d480: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
d490: 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65 72  t.Add(dataReader
d4a0: 5c 5b 31 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29  \[1\].ToString()
d4b0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
d4c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d4d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d4e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d4f0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
d500: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
d510: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d520: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
d530: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
d540: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d590: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
d5a0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
d5b0: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
d5c0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
d5d0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
d5e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
d5f0: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
d600: 66 61 6c 73 65 20 74 72 75 65 20 72 65 73 75 6c  false true resul
d610: 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20  ts errors [list 
d620: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
d630: 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c  te.dll Eagle.dll
d640: 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f  ]]....  list $co
d650: 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20  de $results \.. 
d660: 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66       [expr {[inf
d670: 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d  o exists errors]
d680: 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d   ? $errors : ""}
d690: 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  ] \..      [expr
d6a0: 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20   {$code eq "Ok" 
d6b0: 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  ? [catch {..    
d6c0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
d6d0: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e  e _Dynamic${id}.
d6e0: 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73  Test${id} GetLis
d6f0: 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20  t one two three 
d700: 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20 72  4 5.0..      } r
d710: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
d720: 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d  sult ""]}] [norm
d730: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
d740: 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65  $result]..} -cle
d750: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
d760: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
d770: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
d780: 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65  lain result code
d790: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
d7a0: 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69  sql dataSource i
d7b0: 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  d fileName..} -c
d7c0: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
d7d0: 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
d7e0: 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43   monoBug28 monoC
d7f0: 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e  rash211 command.
d800: 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
d810: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
d820: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 53 51 4c  .Data.SQLite SQL
d830: 69 74 65 49 6e 74 65 72 6f 70 5c 0d 0a 64 65 66  iteInterop\..def
d840: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
d850: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
d860: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
d870: 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61  ABLE compileCSha
d880: 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65  rp} -match \..re
d890: 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f  gexp -result [no
d8a0: 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c  rmalizeVtabResul
d8b0: 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23  t {^Ok\..System#
d8c0: 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72  CodeDom#Compiler
d8d0: 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73  #CompilerResults
d8e0: 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 2d 3f  #\d+ \{\} 0 \{-?
d8f0: 5c 64 2b 20 6f 6e 65 20 2d 3f 5c 64 2b 20 74 77  \d+ one -?\d+ tw
d900: 6f 20 2d 3f 5c 64 2b 5c 0d 0a 74 68 72 65 65 20  o -?\d+\..three 
d910: 2d 3f 5c 64 2b 20 34 20 2d 3f 5c 64 2b 20 35 5c  -?\d+ 4 -?\d+ 5\
d920: 2e 30 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23  .0\}$}]}....####
d930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d940: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d950: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d960: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d970: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
d980: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61  unTest {test vta
d990: 62 2d 31 2e 31 32 20 7b 53 51 4c 69 74 65 49 6e  b-1.12 {SQLiteIn
d9a0: 64 65 78 20 6d 61 6e 61 67 65 64 2d 74 6f 2d 6e  dex managed-to-n
d9b0: 61 74 69 76 65 2d 74 6f 2d 6d 61 6e 61 67 65 64  ative-to-managed
d9c0: 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73 65  } -setup {..  se
d9d0: 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 33 3b  t nConstraint 3;
d9e0: 20 73 65 74 20 6e 4f 72 64 65 72 42 79 20 33 0d   set nOrderBy 3.
d9f0: 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65  .} -body {..  se
da00: 74 20 69 6e 64 65 78 28 31 29 20 5b 6f 62 6a 65  t index(1) [obje
da10: 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
da20: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
da30: 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74  ic \..      Syst
da40: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
da50: 51 4c 69 74 65 49 6e 64 65 78 20 24 6e 43 6f 6e  QLiteIndex $nCon
da60: 73 74 72 61 69 6e 74 20 24 6e 4f 72 64 65 72 42  straint $nOrderB
da70: 79 5d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74  y]....  for {set
da80: 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20   iConstraint 0} 
da90: 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20  {$iConstraint < 
daa0: 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69  $nConstraint} {i
dab0: 6e 63 72 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d  ncr iConstraint}
dac0: 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73   {..    set cons
dad0: 74 72 61 69 6e 74 28 31 29 20 5b 6f 62 6a 65 63  traint(1) [objec
dae0: 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20  t create -alias 
daf0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
db00: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73  c \..        Sys
db10: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
db20: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
db30: 72 61 69 6e 74 20 30 20 30 20 30 20 30 5d 0d 0a  raint 0 0 0 0]..
db40: 0d 0a 20 20 20 20 24 69 6e 64 65 78 28 31 29 20  ..    $index(1) 
db50: 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  Inputs.Constrain
db60: 74 73 2e 53 65 74 56 61 6c 75 65 20 24 63 6f 6e  ts.SetValue $con
db70: 73 74 72 61 69 6e 74 28 31 29 20 24 69 43 6f 6e  straint(1) $iCon
db80: 73 74 72 61 69 6e 74 0d 0a 0d 0a 20 20 20 20 24  straint....    $
db90: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 69 43  constraint(1) iC
dba0: 6f 6c 75 6d 6e 20 5b 65 78 70 72 20 7b 69 6e 74  olumn [expr {int
dbb0: 28 30 78 30 31 32 33 34 35 36 37 20 2b 20 24 69  (0x01234567 + $i
dbc0: 43 6f 6e 73 74 72 61 69 6e 74 29 7d 5d 0d 0a 20  Constraint)}].. 
dbd0: 20 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 28 31     $constraint(1
dbe0: 29 20 6f 70 20 5b 65 78 70 72 20 7b 30 78 46 46  ) op [expr {0xFF
dbf0: 20 2d 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 7d   - $iConstraint}
dc00: 5d 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69  ]..    $constrai
dc10: 6e 74 28 31 29 20 75 73 61 62 6c 65 20 5b 65 78  nt(1) usable [ex
dc20: 70 72 20 7b 30 78 43 43 20 2b 20 24 69 43 6f 6e  pr {0xCC + $iCon
dc30: 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20 20 20 24  straint}]..    $
dc40: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 69 54  constraint(1) iT
dc50: 65 72 6d 4f 66 66 73 65 74 20 5b 65 78 70 72 20  ermOffset [expr 
dc60: 7b 69 6e 74 28 30 78 38 39 41 42 43 44 45 46 20  {int(0x89ABCDEF 
dc70: 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 29 7d  + $iConstraint)}
dc80: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20  ]..  }....  for 
dc90: 7b 73 65 74 20 69 4f 72 64 65 72 42 79 20 30 7d  {set iOrderBy 0}
dca0: 20 7b 24 69 4f 72 64 65 72 42 79 20 3c 20 24 6e   {$iOrderBy < $n
dcb0: 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63 72 20 69  OrderBy} {incr i
dcc0: 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20 20 20 20  OrderBy} {..    
dcd0: 73 65 74 20 6f 72 64 65 72 42 79 28 31 29 20 5b  set orderBy(1) [
dce0: 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
dcf0: 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  lias -flags +Non
dd00: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..      
dd10: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
dd20: 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78  Lite.SQLiteIndex
dd30: 4f 72 64 65 72 42 79 20 30 20 30 5d 0d 0a 0d 0a  OrderBy 0 0]....
dd40: 20 20 20 20 24 69 6e 64 65 78 28 31 29 20 49 6e      $index(1) In
dd50: 70 75 74 73 2e 4f 72 64 65 72 42 79 73 2e 53 65  puts.OrderBys.Se
dd60: 74 56 61 6c 75 65 20 24 6f 72 64 65 72 42 79 28  tValue $orderBy(
dd70: 31 29 20 24 69 4f 72 64 65 72 42 79 0d 0a 0d 0a  1) $iOrderBy....
dd80: 20 20 20 20 24 6f 72 64 65 72 42 79 28 31 29 20      $orderBy(1) 
dd90: 69 43 6f 6c 75 6d 6e 20 5b 65 78 70 72 20 7b 69  iColumn [expr {i
dda0: 6e 74 28 30 78 32 33 30 31 36 37 34 35 20 2b 20  nt(0x23016745 + 
ddb0: 24 69 4f 72 64 65 72 42 79 29 7d 5d 0d 0a 20 20  $iOrderBy)}]..  
ddc0: 20 20 24 6f 72 64 65 72 42 79 28 31 29 20 64 65    $orderBy(1) de
ddd0: 73 63 20 5b 65 78 70 72 20 7b 30 78 46 46 20 2d  sc [expr {0xFF -
dde0: 20 24 69 4f 72 64 65 72 42 79 7d 5d 0d 0a 20 20   $iOrderBy}]..  
ddf0: 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20  }....  for {set 
de00: 69 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20 7b  iConstraint 0} {
de10: 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 24  $iConstraint < $
de20: 6e 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69 6e  nConstraint} {in
de30: 63 72 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d 20  cr iConstraint} 
de40: 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74  {..    set const
de50: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 5b 6f  raintUsage(1) [o
de60: 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c  bject create -al
de70: 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  ias -flags +NonP
de80: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..       
de90: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
dea0: 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78 43  ite.SQLiteIndexC
deb0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 30  onstraintUsage 0
dec0: 20 30 5d 0d 0a 0d 0a 20 20 20 20 24 69 6e 64 65   0]....    $inde
ded0: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43 6f 6e  x(1) Outputs.Con
dee0: 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e 53 65  straintUsages.Se
def0: 74 56 61 6c 75 65 20 24 63 6f 6e 73 74 72 61 69  tValue $constrai
df00: 6e 74 55 73 61 67 65 28 31 29 20 5c 0d 0a 20 20  ntUsage(1) \..  
df10: 20 20 20 20 20 20 24 69 43 6f 6e 73 74 72 61 69        $iConstrai
df20: 6e 74 0d 0a 0d 0a 20 20 20 20 24 63 6f 6e 73 74  nt....    $const
df30: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 61 72  raintUsage(1) ar
df40: 67 76 49 6e 64 65 78 20 5b 65 78 70 72 20 7b 69  gvIndex [expr {i
df50: 6e 74 28 30 78 41 42 38 39 45 46 43 44 20 2b 20  nt(0xAB89EFCD + 
df60: 24 69 43 6f 6e 73 74 72 61 69 6e 74 29 7d 5d 0d  $iConstraint)}].
df70: 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69 6e 74  .    $constraint
df80: 55 73 61 67 65 28 31 29 20 6f 6d 69 74 20 5b 65  Usage(1) omit [e
df90: 78 70 72 20 7b 30 78 43 43 20 2b 20 24 69 43 6f  xpr {0xCC + $iCo
dfa0: 6e 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20 7d 0d  nstraint}]..  }.
dfb0: 0a 0d 0a 20 20 24 69 6e 64 65 78 28 31 29 20 4f  ...  $index(1) O
dfc0: 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62  utputs.IndexNumb
dfd0: 65 72 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78  er [expr {int(0x
dfe0: 41 41 41 41 41 41 41 41 29 7d 5d 0d 0a 20 20 24  AAAAAAAA)}]..  $
dff0: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
e000: 2e 49 6e 64 65 78 53 74 72 69 6e 67 20 22 5c 78  .IndexString "\x
e010: 30 31 74 65 73 74 20 69 6e 64 65 78 20 73 74 72  01test index str
e020: 69 6e 67 2e 5c 78 46 46 22 0d 0a 20 20 24 69 6e  ing.\xFF"..  $in
e030: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 4e  dex(1) Outputs.N
e040: 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74  eedToFreeIndexSt
e050: 72 69 6e 67 20 5b 65 78 70 72 20 7b 69 6e 74 28  ring [expr {int(
e060: 30 78 35 35 35 35 35 35 35 35 29 7d 5d 0d 0a 20  0x55555555)}].. 
e070: 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75   $index(1) Outpu
e080: 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d  ts.OrderByConsum
e090: 65 64 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78  ed [expr {int(0x
e0a0: 33 33 33 33 33 33 33 33 29 7d 5d 0d 0a 20 20 24  33333333)}]..  $
e0b0: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
e0c0: 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74 20 31  .EstimatedCost 1
e0d0: 2e 30 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e  .0....  if {[$in
e0e0: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43  dex(1) Outputs.C
e0f0: 61 6e 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f  anUseEstimatedRo
e100: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..   
e110: 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75   $index(1) Outpu
e120: 74 73 2e 45 73 74 69 6d 61 74 65 64 52 6f 77 73  ts.EstimatedRows
e130: 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 43 43   [expr {int(0xCC
e140: 43 43 43 43 43 43 29 7d 5d 0d 0a 20 20 7d 0d 0a  CCCCCC)}]..  }..
e150: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
e160: 31 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73  1) Outputs.CanUs
e170: 65 49 6e 64 65 78 46 6c 61 67 73 5d 7d 20 74 68  eIndexFlags]} th
e180: 65 6e 20 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78  en {..    $index
e190: 28 31 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65  (1) Outputs.Inde
e1a0: 78 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 69 6e  xFlags [expr {in
e1b0: 74 28 30 78 45 45 45 45 45 45 45 45 29 7d 5d 0d  t(0xEEEEEEEE)}].
e1c0: 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24  .  }....  if {[$
e1d0: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
e1e0: 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73  .CanUseColumnsUs
e1f0: 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ed]} then {..   
e200: 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75   $index(1) Outpu
e210: 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65 64 20 5b  ts.ColumnsUsed [
e220: 65 78 70 72 20 7b 77 69 64 65 28 30 78 42 41 44  expr {wide(0xBAD
e230: 43 30 46 46 45 45 38 37 35 36 32 31 41 29 7d 5d  C0FFEE875621A)}]
e240: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 70  ..  }....  set p
e250: 49 6e 64 65 78 28 31 29 20 5b 6f 62 6a 65 63 74  Index(1) [object
e260: 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20   invoke -create 
e270: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
e280: 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65  c \..      Syste
e290: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
e2a0: 4c 69 74 65 49 6e 64 65 78 20 41 6c 6c 6f 63 61  LiteIndex Alloca
e2b0: 74 65 41 6e 64 49 6e 69 74 69 61 6c 69 7a 65 4e  teAndInitializeN
e2c0: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 24  ative \..      $
e2d0: 6e 43 6f 6e 73 74 72 61 69 6e 74 20 24 6e 4f 72  nConstraint $nOr
e2e0: 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 6f 62 6a 65  derBy]....  obje
e2f0: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
e300: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \.. 
e310: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
e320: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e  .SQLite.SQLiteIn
e330: 64 65 78 20 54 6f 49 6e 74 50 74 72 20 24 69 6e  dex ToIntPtr $in
e340: 64 65 78 28 31 29 20 24 70 49 6e 64 65 78 28 31  dex(1) $pIndex(1
e350: 29 20 74 72 75 65 0d 0a 0d 0a 20 20 73 65 74 20  ) true....  set 
e360: 69 6e 64 65 78 28 32 29 20 5b 6f 62 6a 65 63 74  index(2) [object
e370: 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d   create -alias -
e380: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
e390: 20 5c 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d   \..      System
e3a0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
e3b0: 69 74 65 49 6e 64 65 78 20 24 6e 43 6f 6e 73 74  iteIndex $nConst
e3c0: 72 61 69 6e 74 20 24 6e 4f 72 64 65 72 42 79 5d  raint $nOrderBy]
e3d0: 0d 0a 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76  ....  object inv
e3e0: 6f 6b 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67  oke -alias -flag
e3f0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
e400: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
e410: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49  a.SQLite.SQLiteI
e420: 6e 64 65 78 20 46 72 6f 6d 49 6e 74 50 74 72 20  ndex FromIntPtr 
e430: 24 70 49 6e 64 65 78 28 31 29 20 74 72 75 65 20  $pIndex(1) true 
e440: 69 6e 64 65 78 28 32 29 0d 0a 0d 0a 20 20 66 6f  index(2)....  fo
e450: 72 20 7b 73 65 74 20 69 43 6f 6e 73 74 72 61 69  r {set iConstrai
e460: 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61  nt 0} {$iConstra
e470: 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69  int < $nConstrai
e480: 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74  nt} {incr iConst
e490: 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65  raint} {..    se
e4a0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20  t constraint(1) 
e4b0: 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a 20 20  [$index(1) \..  
e4c0: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70        -alias Inp
e4d0: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
e4e0: 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74  GetValue $iConst
e4f0: 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 73 65  raint]....    se
e500: 74 20 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20  t constraint(2) 
e510: 5b 24 69 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20  [$index(2) \..  
e520: 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 70        -alias Inp
e530: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 2e  uts.Constraints.
e540: 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74  GetValue $iConst
e550: 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 69 66  raint]....    if
e560: 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 31   {[$constraint(1
e570: 29 20 69 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24  ) iColumn] != [$
e580: 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20 69 43  constraint(2) iC
e590: 6f 6c 75 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a  olumn]} then {..
e5a0: 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70        error [app
e5b0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
e5c0: 20 20 20 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74       "iColumn at
e5d0: 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74   index " $iConst
e5e0: 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74  raint " does not
e5f0: 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d   match"]..    }.
e600: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e  ...    if {[$con
e610: 73 74 72 61 69 6e 74 28 31 29 20 6f 70 5d 20 21  straint(1) op] !
e620: 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 32  = [$constraint(2
e630: 29 20 6f 70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ) op]} then {.. 
e640: 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
e650: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
e660: 20 20 20 20 22 6f 70 20 61 74 20 69 6e 64 65 78      "op at index
e670: 20 22 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20   " $iConstraint 
e680: 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  " does not match
e690: 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  "]..    }....   
e6a0: 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e   if {[$constrain
e6b0: 74 28 31 29 20 75 73 61 62 6c 65 5d 20 21 3d 20  t(1) usable] != 
e6c0: 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28 32 29 20  [$constraint(2) 
e6d0: 75 73 61 62 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  usable]} then {.
e6e0: 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70  .      error [ap
e6f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
e700: 20 20 20 20 20 20 22 75 73 61 62 6c 65 20 61 74        "usable at
e710: 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74   index " $iConst
e720: 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74  raint " does not
e730: 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d   match"]..    }.
e740: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e  ...    if {[$con
e750: 73 74 72 61 69 6e 74 28 31 29 20 69 54 65 72 6d  straint(1) iTerm
e760: 4f 66 66 73 65 74 5d 20 21 3d 20 5b 24 63 6f 6e  Offset] != [$con
e770: 73 74 72 61 69 6e 74 28 32 29 20 69 54 65 72 6d  straint(2) iTerm
e780: 4f 66 66 73 65 74 5d 7d 20 74 68 65 6e 20 7b 0d  Offset]} then {.
e790: 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70  .      error [ap
e7a0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..    
e7b0: 20 20 20 20 20 20 22 69 54 65 72 6d 4f 66 66 73        "iTermOffs
e7c0: 65 74 20 61 74 20 69 6e 64 65 78 20 22 20 24 69  et at index " $i
e7d0: 43 6f 6e 73 74 72 61 69 6e 74 20 22 20 64 6f 65  Constraint " doe
e7e0: 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20  s not match"].. 
e7f0: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66     }..  }....  f
e800: 6f 72 20 7b 73 65 74 20 69 4f 72 64 65 72 42 79  or {set iOrderBy
e810: 20 30 7d 20 7b 24 69 4f 72 64 65 72 42 79 20 3c   0} {$iOrderBy <
e820: 20 24 6e 4f 72 64 65 72 42 79 7d 20 7b 69 6e 63   $nOrderBy} {inc
e830: 72 20 69 4f 72 64 65 72 42 79 7d 20 7b 0d 0a 20  r iOrderBy} {.. 
e840: 20 20 20 73 65 74 20 6f 72 64 65 72 42 79 28 31     set orderBy(1
e850: 29 20 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a  ) [$index(1) \..
e860: 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49          -alias I
e870: 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 2e 47  nputs.OrderBys.G
e880: 65 74 56 61 6c 75 65 20 24 69 4f 72 64 65 72 42  etValue $iOrderB
e890: 79 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 6f 72  y]....    set or
e8a0: 64 65 72 42 79 28 32 29 20 5b 24 69 6e 64 65 78  derBy(2) [$index
e8b0: 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d  (2) \..        -
e8c0: 61 6c 69 61 73 20 49 6e 70 75 74 73 2e 4f 72 64  alias Inputs.Ord
e8d0: 65 72 42 79 73 2e 47 65 74 56 61 6c 75 65 20 24  erBys.GetValue $
e8e0: 69 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 20  iOrderBy]....   
e8f0: 20 69 66 20 7b 5b 24 6f 72 64 65 72 42 79 28 31   if {[$orderBy(1
e900: 29 20 69 43 6f 6c 75 6d 6e 5d 20 21 3d 20 5b 24  ) iColumn] != [$
e910: 6f 72 64 65 72 42 79 28 32 29 20 69 43 6f 6c 75  orderBy(2) iColu
e920: 6d 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  mn]} then {..   
e930: 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
e940: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..        
e950: 20 20 22 69 43 6f 6c 75 6d 6e 20 61 74 20 69 6e    "iColumn at in
e960: 64 65 78 20 22 20 24 69 4f 72 64 65 72 42 79 20  dex " $iOrderBy 
e970: 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  " does not match
e980: 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  "]..    }....   
e990: 20 69 66 20 7b 5b 24 6f 72 64 65 72 42 79 28 31   if {[$orderBy(1
e9a0: 29 20 64 65 73 63 5d 20 21 3d 20 5b 24 6f 72 64  ) desc] != [$ord
e9b0: 65 72 42 79 28 32 29 20 64 65 73 63 5d 7d 20 74  erBy(2) desc]} t
e9c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72  hen {..      err
e9d0: 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  or [appendArgs \
e9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 64 65 73  ..          "des
e9f0: 63 20 61 74 20 69 6e 64 65 78 20 22 20 24 69 4f  c at index " $iO
ea00: 72 64 65 72 42 79 20 22 20 64 6f 65 73 20 6e 6f  rderBy " does no
ea10: 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d  t match"]..    }
ea20: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b  ..  }....  for {
ea30: 73 65 74 20 69 43 6f 6e 73 74 72 61 69 6e 74 20  set iConstraint 
ea40: 30 7d 20 7b 24 69 43 6f 6e 73 74 72 61 69 6e 74  0} {$iConstraint
ea50: 20 3c 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 7d   < $nConstraint}
ea60: 20 7b 69 6e 63 72 20 69 43 6f 6e 73 74 72 61 69   {incr iConstrai
ea70: 6e 74 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 63  nt} {..    set c
ea80: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31  onstraintUsage(1
ea90: 29 20 5b 24 69 6e 64 65 78 28 31 29 20 5c 0d 0a  ) [$index(1) \..
eaa0: 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 4f          -alias O
eab0: 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e  utputs.Constrain
eac0: 74 55 73 61 67 65 73 2e 47 65 74 56 61 6c 75 65  tUsages.GetValue
ead0: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a   $iConstraint]..
eae0: 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72  ..    set constr
eaf0: 61 69 6e 74 55 73 61 67 65 28 32 29 20 5b 24 69  aintUsage(2) [$i
eb00: 6e 64 65 78 28 32 29 20 5c 0d 0a 20 20 20 20 20  ndex(2) \..     
eb10: 20 20 20 2d 61 6c 69 61 73 20 4f 75 74 70 75 74     -alias Output
eb20: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s.ConstraintUsag
eb30: 65 73 2e 47 65 74 56 61 6c 75 65 20 24 69 43 6f  es.GetValue $iCo
eb40: 6e 73 74 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20  nstraint]....   
eb50: 20 69 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e   if {[$constrain
eb60: 74 55 73 61 67 65 28 31 29 20 61 72 67 76 49 6e  tUsage(1) argvIn
eb70: 64 65 78 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20  dex] != \..     
eb80: 20 20 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55     [$constraintU
eb90: 73 61 67 65 28 32 29 20 61 72 67 76 49 6e 64 65  sage(2) argvInde
eba0: 78 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  x]} then {..    
ebb0: 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
ebc0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..         
ebd0: 20 22 61 72 67 76 49 6e 64 65 78 20 61 74 20 69   "argvIndex at i
ebe0: 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61  ndex " $iConstra
ebf0: 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d  int " does not m
ec00: 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0d  atch"]..    }...
ec10: 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73 74  .    if {[$const
ec20: 72 61 69 6e 74 55 73 61 67 65 28 31 29 20 6f 6d  raintUsage(1) om
ec30: 69 74 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72 61  it] != [$constra
ec40: 69 6e 74 55 73 61 67 65 28 32 29 20 6f 6d 69 74  intUsage(2) omit
ec50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
ec60: 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
ec70: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
ec80: 22 6f 6d 69 74 20 61 74 20 69 6e 64 65 78 20 22  "omit at index "
ec90: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20   $iConstraint " 
eca0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
ecb0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a  ..    }..  }....
ecc0: 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29    if {[$index(1)
ecd0: 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75   Outputs.IndexNu
ece0: 6d 62 65 72 5d 20 21 3d 20 5c 0d 0a 20 20 20 20  mber] != \..    
ecf0: 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74    [$index(2) Out
ed00: 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62 65 72  puts.IndexNumber
ed10: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65  ]} then {..    e
ed20: 72 72 6f 72 20 22 49 6e 64 65 78 4e 75 6d 62 65  rror "IndexNumbe
ed30: 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  r does not match
ed40: 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  "..  }....  if {
ed50: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
ed60: 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 5d 20  ts.IndexString] 
ed70: 6e 65 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e  ne \..      [$in
ed80: 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 49  dex(2) Outputs.I
ed90: 6e 64 65 78 53 74 72 69 6e 67 5d 7d 20 74 68 65  ndexString]} the
eda0: 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22  n {..    error "
edb0: 49 6e 64 65 78 53 74 72 69 6e 67 20 64 6f 65 73  IndexString does
edc0: 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d   not match"..  }
edd0: 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65  ....  if {[$inde
ede0: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 4e 65 65  x(1) Outputs.Nee
edf0: 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69  dToFreeIndexStri
ee00: 6e 67 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20  ng] != \..      
ee10: 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75  [$index(2) Outpu
ee20: 74 73 2e 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  ts.NeedToFreeInd
ee30: 65 78 53 74 72 69 6e 67 5d 7d 20 74 68 65 6e 20  exString]} then 
ee40: 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 4e 65  {..    error "Ne
ee50: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
ee60: 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ing does not mat
ee70: 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66  ch"..  }....  if
ee80: 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74   {[$index(1) Out
ee90: 70 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73  puts.OrderByCons
eea0: 75 6d 65 64 5d 20 21 3d 20 5c 0d 0a 20 20 20 20  umed] != \..    
eeb0: 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75 74    [$index(2) Out
eec0: 70 75 74 73 2e 4f 72 64 65 72 42 79 43 6f 6e 73  puts.OrderByCons
eed0: 75 6d 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  umed]} then {.. 
eee0: 20 20 20 65 72 72 6f 72 20 22 4f 72 64 65 72 42     error "OrderB
eef0: 79 43 6f 6e 73 75 6d 65 64 20 64 6f 65 73 20 6e  yConsumed does n
ef00: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a  ot match"..  }..
ef10: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
ef20: 31 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d  1) Outputs.Estim
ef30: 61 74 65 64 43 6f 73 74 5d 20 21 3d 20 5c 0d 0a  atedCost] != \..
ef40: 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29        [$index(2)
ef50: 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74   Outputs.Estimat
ef60: 65 64 43 6f 73 74 5d 7d 20 74 68 65 6e 20 7b 0d  edCost]} then {.
ef70: 0a 20 20 20 20 65 72 72 6f 72 20 22 45 73 74 69  .    error "Esti
ef80: 6d 61 74 65 64 43 6f 73 74 20 64 6f 65 73 20 6e  matedCost does n
ef90: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a  ot match"..  }..
efa0: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
efb0: 31 29 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73  1) Outputs.CanUs
efc0: 65 45 73 74 69 6d 61 74 65 64 52 6f 77 73 5d 20  eEstimatedRows] 
efd0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e  && \..      [$in
efe0: 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 43  dex(2) Outputs.C
eff0: 61 6e 55 73 65 45 73 74 69 6d 61 74 65 64 52 6f  anUseEstimatedRo
f000: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..   
f010: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
f020: 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
f030: 64 52 6f 77 73 5d 20 21 3d 20 5c 0d 0a 20 20 20  dRows] != \..   
f040: 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20       [$index(2) 
f050: 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74 65  Outputs.Estimate
f060: 64 52 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  dRows]} then {..
f070: 20 20 20 20 20 20 65 72 72 6f 72 20 22 45 73 74        error "Est
f080: 69 6d 61 74 65 64 52 6f 77 73 20 64 6f 65 73 20  imatedRows does 
f090: 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 20 20  not match"..    
f0a0: 7d 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24  }....    tputs $
f0b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d  test_channel "--
f0c0: 2d 2d 20 63 68 65 63 6b 65 64 20 45 73 74 69 6d  -- checked Estim
f0d0: 61 74 65 64 52 6f 77 73 20 70 72 6f 70 65 72 74  atedRows propert
f0e0: 79 5c 6e 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69  y\n"..  }....  i
f0f0: 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75  f {[$index(1) Ou
f100: 74 70 75 74 73 2e 43 61 6e 55 73 65 49 6e 64 65  tputs.CanUseInde
f110: 78 46 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20  xFlags] && \..  
f120: 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f      [$index(2) O
f130: 75 74 70 75 74 73 2e 43 61 6e 55 73 65 49 6e 64  utputs.CanUseInd
f140: 65 78 46 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b  exFlags]} then {
f150: 0d 0a 20 20 20 20 69 66 20 7b 5b 24 69 6e 64 65  ..    if {[$inde
f160: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 49 6e 64  x(1) Outputs.Ind
f170: 65 78 46 6c 61 67 73 5d 20 21 3d 20 5c 0d 0a 20  exFlags] != \.. 
f180: 20 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32         [$index(2
f190: 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 46  ) Outputs.IndexF
f1a0: 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lags]} then {.. 
f1b0: 20 20 20 20 20 65 72 72 6f 72 20 22 49 6e 64 65       error "Inde
f1c0: 78 46 6c 61 67 73 20 64 6f 65 73 20 6e 6f 74 20  xFlags does not 
f1d0: 6d 61 74 63 68 22 0d 0a 20 20 20 20 7d 0d 0a 0d  match"..    }...
f1e0: 0a 20 20 20 20 74 70 75 74 73 20 24 74 65 73 74  .    tputs $test
f1f0: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  _channel "---- c
f200: 68 65 63 6b 65 64 20 49 6e 64 65 78 46 6c 61 67  hecked IndexFlag
f210: 73 20 70 72 6f 70 65 72 74 79 5c 6e 22 0d 0a 20  s property\n".. 
f220: 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e   }....  if {[$in
f230: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43  dex(1) Outputs.C
f240: 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73 65 64  anUseColumnsUsed
f250: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ] && \..      [$
f260: 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73  index(2) Outputs
f270: 2e 43 61 6e 55 73 65 43 6f 6c 75 6d 6e 73 55 73  .CanUseColumnsUs
f280: 65 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ed]} then {..   
f290: 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20   if {[$index(1) 
f2a0: 4f 75 74 70 75 74 73 2e 43 6f 6c 75 6d 6e 73 55  Outputs.ColumnsU
f2b0: 73 65 64 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20  sed] != \..     
f2c0: 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f 75     [$index(2) Ou
f2d0: 74 70 75 74 73 2e 43 6f 6c 75 6d 6e 73 55 73 65  tputs.ColumnsUse
f2e0: 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..    
f2f0: 20 20 65 72 72 6f 72 20 22 43 6f 6c 75 6d 6e 73    error "Columns
f300: 55 73 65 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61  Used does not ma
f310: 74 63 68 22 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  tch"..    }.... 
f320: 20 20 20 74 70 75 74 73 20 24 74 65 73 74 5f 63     tputs $test_c
f330: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65  hannel "---- che
f340: 63 6b 65 64 20 43 6f 6c 75 6d 6e 73 55 73 65 64  cked ColumnsUsed
f350: 20 70 72 6f 70 65 72 74 79 5c 6e 22 0d 0a 20 20   property\n"..  
f360: 7d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d  }..} -cleanup {.
f370: 0a 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  .  catch {..    
f380: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
f390: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
f3a0: 5c 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65  \..        Syste
f3b0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
f3c0: 4c 69 74 65 49 6e 64 65 78 20 46 72 65 65 4e 61  LiteIndex FreeNa
f3d0: 74 69 76 65 20 24 70 49 6e 64 65 78 28 31 29 0d  tive $pIndex(1).
f3e0: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
f3f0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 6f 6e 73  -nocomplain cons
f400: 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 75  traintUsage..  u
f410: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
f420: 20 6f 72 64 65 72 42 79 20 6e 4f 72 64 65 72 42   orderBy nOrderB
f430: 79 20 69 4f 72 64 65 72 42 79 0d 0a 20 20 75 6e  y iOrderBy..  un
f440: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
f450: 63 6f 6e 73 74 72 61 69 6e 74 20 6e 43 6f 6e 73  constraint nCons
f460: 74 72 61 69 6e 74 20 69 43 6f 6e 73 74 72 61 69  traint iConstrai
f470: 6e 74 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  nt..  unset -noc
f480: 6f 6d 70 6c 61 69 6e 20 70 49 6e 64 65 78 20 69  omplain pIndex i
f490: 6e 64 65 78 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  ndex..} -constra
f4a0: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
f4b0: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
f4c0: 75 67 32 31 31 20 53 51 4c 69 74 65 20 53 79 73  ug211 SQLite Sys
f4d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
f4e0: 0d 0a 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20  ..SQLiteInterop 
f4f0: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
f500: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
f510: 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  e.INTEROP_VIRTUA
f520: 4c 5f 54 41 42 4c 45 7d 20 5c 0d 0a 2d 72 65 73  L_TABLE} \..-res
f530: 75 6c 74 20 7b 7d 7d 0d 0a 0d 0a 23 23 23 23 23  ult {}}....#####
f540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f580: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72 65  ##########....re
f590: 6e 61 6d 65 20 6e 6f 72 6d 61 6c 69 7a 65 56 74  name normalizeVt
f5a0: 61 62 52 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 23  abResult ""....#
f5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f5f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
f600: 0d 0a 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45  ..runSQLiteTestE
f610: 70 69 6c 6f 67 75 65 0d 0a 72 75 6e 54 65 73 74  pilogue..runTest
f620: 45 70 69 6c 6f 67 75 65 0d 0a                    Epilogue..