System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d5f9072e087732f146333218b3c9f7eadcc30f53:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 76 74 61 62 2e 65 61 67 6c 65  .#..# vtab.eagle
0060: 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74 74 65   --..#..# Writte
0070: 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61 63 68  n by Joe Mistach
0080: 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73 65 64  kin...# Released
0090: 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64   to the public d
00a0: 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20 79 6f  omain, use at yo
00b0: 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a 23 0d  ur own risk!..#.
00c0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 0d 0a 0d 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ....package requ
0120: 69 72 65 20 45 61 67 6c 65 0d 0a 70 61 63 6b 61  ire Eagle..packa
0130: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
0140: 2e 4c 69 62 72 61 72 79 0d 0a 70 61 63 6b 61 67  .Library..packag
0150: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
0160: 54 65 73 74 0d 0a 0d 0a 72 75 6e 54 65 73 74 50  Test....runTestP
0170: 72 6f 6c 6f 67 75 65 0d 0a 0d 0a 23 23 23 23 23  rologue....#####
0180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0190: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 70 61  ##########....pa
01d0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 53 79  ckage require Sy
01e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
01f0: 2e 54 65 73 74 0d 0a 72 75 6e 53 51 4c 69 74 65  .Test..runSQLite
0200: 54 65 73 74 50 72 6f 6c 6f 67 75 65 0d 0a 0d 0a  TestPrologue....
0210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0260: 0a 0d 0a 70 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a  ...proc normaliz
0270: 65 56 74 61 62 52 65 73 75 6c 74 20 7b 20 76 61  eVtabResult { va
0280: 6c 75 65 20 7d 20 7b 0d 0a 20 20 73 65 74 20 72  lue } {..  set r
0290: 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 0d 0a  esult $value....
02a0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 66 69    if {[string fi
02b0: 72 73 74 20 5c 72 20 24 72 65 73 75 6c 74 5d 20  rst \r $result] 
02c0: 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {.. 
02d0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 73     set result [s
02e0: 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list 
02f0: 5c 72 5c 6e 20 5c 6e 5d 20 24 72 65 73 75 6c 74  \r\n \n] $result
0300: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 72 65 74 75  ]..  }....  retu
0310: 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b  rn [string map [
0320: 6c 69 73 74 20 5c 6e 20 22 20 2d 2d 20 22 5d 20  list \n " -- "] 
0330: 24 72 65 73 75 6c 74 5d 0d 0a 7d 0d 0a 0d 0a 23  $result]..}....#
0340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0350: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
0390: 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20  ..runTest {test 
03a0: 76 74 61 62 2d 31 2e 31 20 7b 62 61 73 69 63 20  vtab-1.1 {basic 
03b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
03c0: 70 70 6f 72 74 7d 20 2d 73 65 74 75 70 20 7b 0d  pport} -setup {.
03d0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
03e0: 76 74 61 62 2d 31 2e 31 2e 64 62 0d 0a 7d 20 2d  vtab-1.1.db..} -
03f0: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
0400: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
0410: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
0420: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
0430: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
0440: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
0450: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
0460: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
0470: 20 20 73 65 74 20 73 71 6c 20 7b 20 5c 0d 0a 20    set sql { \.. 
0480: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
0490: 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55  L TABLE t${id} U
04a0: 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c  SING mod${id}; \
04b0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74  ..  }....  unset
04c0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
04d0: 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  ults errors.... 
04e0: 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69   set code [compi
04f0: 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75  leCSharpWith [su
0500: 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67  bst {..    using
0510: 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73   System;..    us
0520: 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ing System.Data.
0530: 53 51 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e  SQLite;....    n
0540: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
0550: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
0560: 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c       public seal
0570: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
0580: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a  oduleTest${id} :
0590: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 4e 6f 6f   SQLiteModuleNoo
05a0: 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  p..      {..    
05b0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
05c0: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
05d0: 28 73 74 72 69 6e 67 20 6e 61 6d 65 29 0d 0a 20  (string name).. 
05e0: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
05f0: 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  name)..        {
0600: 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64  ..          // d
0610: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
0620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
0630: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
0680: 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
0690: 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
06a0: 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20 20  ode Create(..   
06b0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
06c0: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
06d0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49  on,..          I
06e0: 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
06f0: 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  a,..          st
0700: 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75 6d 65 6e  ring\[\] argumen
0710: 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  ts,..          r
0720: 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
0730: 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20  Table table,..  
0740: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
0750: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
0760: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
0770: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
0780: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
0790: 20 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d 0a   DeclareTable(..
07a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
07b0: 65 63 74 69 6f 6e 2c 20 22 43 52 45 41 54 45 20  ection, "CREATE 
07c0: 54 41 42 4c 45 20 69 67 6e 6f 72 65 64 28 78 29  TABLE ignored(x)
07d0: 3b 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  ;", ref error);.
07e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
07f0: 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
0800: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
0810: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
0820: 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  c;....          
0830: 74 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  table = new SQLi
0840: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61  teVirtualTable(a
0850: 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20  rguments);..    
0860: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
0870: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b  iteErrorCode.Ok;
0880: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0890: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
08a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
08f0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 63   public static c
0900: 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a  lass Test${id}..
0910: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0920: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
0930: 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20 20  oid Main()..    
0940: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0950: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
0960: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
0970: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
0980: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
0990: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
09a0: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
09b0: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
09c0: 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20  roperty]"))..   
09d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
09e0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
09f0: 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20  .Open();..      
0a00: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
0a10: 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65  .CreateModule(ne
0a20: 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65  w SQLiteModuleTe
0a30: 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64  st${id}("mod${id
0a40: 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  }"));....       
0a50: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
0a60: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
0a70: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
0a80: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
0a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
0ab0: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
0ac0: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
0ad0: 6c 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  l}]";..         
0ae0: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
0af0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
0b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
0b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
0b20: 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29  nnection.Close()
0b30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
0b40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
0b50: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20   }..    }..  }] 
0b60: 74 72 75 65 20 74 72 75 65 20 74 72 75 65 20 72  true true true r
0b70: 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20 53 79  esults errors Sy
0b80: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
0b90: 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20  .dll]....  list 
0ba0: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c  $code $results \
0bb0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b  ..      [expr {[
0bc0: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f  info exists erro
0bd0: 72 73 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20  rs] ? $errors : 
0be0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65  ""}] \..      [e
0bf0: 78 70 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f  xpr {$code eq "O
0c00: 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20  k" ? [catch {.. 
0c10: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
0c20: 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69  voke _Dynamic${i
0c30: 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20 4d 61 69  d}.Test${id} Mai
0c40: 6e 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c  n..      } resul
0c50: 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74  t] : [set result
0c60: 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a   ""]}] [normaliz
0c70: 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73  eVtabResult $res
0c80: 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70  ult]..} -cleanup
0c90: 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20   {..  cleanupDb 
0ca0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75  $fileName....  u
0cb0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
0cc0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73   result code res
0cd0: 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20  ults errors sql 
0ce0: 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69  dataSource id fi
0cf0: 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74  leName..} -const
0d00: 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f  raints {eagle co
0d10: 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e  mmand.object mon
0d20: 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68  oBug28 monoCrash
0d30: 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c  211 command.sql\
0d40: 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53  ..compile.DATA S
0d50: 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74  QLite System.Dat
0d60: 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e  a.SQLite\..defin
0d70: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
0d80: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54  .Data.SQLite.INT
0d90: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
0da0: 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  LE compileCSharp
0db0: 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65  } -match \..rege
0dc0: 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d  xp -result [norm
0dd0: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
0de0: 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f  {^Ok\..System#Co
0df0: 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43  deDom#Compiler#C
0e00: 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c  ompilerResults#\
0e10: 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7d 24 7d  d+ \{\} 0 \{\}$}
0e20: 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ]}....##########
0e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0e70: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74  #####....runTest
0e80: 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e 32 2e   {test vtab-1.2.
0e90: 31 20 7b 49 45 6e 75 6d 65 72 61 62 6c 65 20 76  1 {IEnumerable v
0ea0: 69 72 74 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73  irtual table} -s
0eb0: 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69  etup {..  set fi
0ec0: 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 32 2e  leName vtab-1.2.
0ed0: 31 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  1.db..} -body {.
0ee0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
0ef0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
0f00: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
0f10: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
0f20: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
0f30: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
0f40: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
0f50: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
0f60: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
0f70: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0f80: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
0f90: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
0fa0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
0fb0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
0fc0: 54 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  T * FROM t${id};
0fd0: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
0fe0: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
0ff0: 20 55 50 44 41 54 45 20 74 24 7b 69 64 7d 20 53   UPDATE t${id} S
1000: 45 54 20 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d  ET x = 1; \..  }
1010: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
1020: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
1030: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
1040: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
1050: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
1060: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
1070: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
1080: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1090: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
10a0: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
10b0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
10c0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
10d0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
10e0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
10f0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
1100: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
1110: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1120: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
1130: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
1140: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
1150: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1160: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
1170: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
1180: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
1190: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
11a0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
11b0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
11c0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
11d0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
11e0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
11f0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
1200: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
1210: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
1220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
1230: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
1240: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1250: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
1260: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
1270: 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61  iteModuleEnumera
1280: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
1290: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
12a0: 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20  strings));....  
12b0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
12c0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
12d0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
12e0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
12f0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
1300: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1310: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
1320: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
1330: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
1350: 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51  mand.ExecuteNonQ
1360: 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  uery();..       
1370: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1380: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
1390: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
13a0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
13b0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
13c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
13e0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
13f0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
1400: 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(2)}]";....   
1410: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
1420: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
1430: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
1440: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
1450: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
1460: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1470: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
1480: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
1490: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
14a0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
14b0: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
14c0: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
14d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
14e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
1500: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
1510: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
1520: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
1530: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
1540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1550: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
1560: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
1570: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
1580: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1590: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15b0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
15c0: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
15d0: 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
15e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15f0: 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69       catch (SQLi
1600: 74 65 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a  teException e)..
1610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1630: 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 52 65   result.Add(e.Re
1640: 73 75 6c 74 43 6f 64 65 2e 54 6f 53 74 72 69 6e  sultCode.ToStrin
1650: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1660: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
1670: 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20  d(e.Message);.. 
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1690: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
16b0: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
16c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
16d0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
16e0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
16f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1740: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1750: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1760: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
1770: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1780: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1790: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
17a0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
17b0: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
17c0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
17d0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
17e0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
17f0: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
1800: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
1810: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
1820: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
1830: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
1840: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
1850: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
1860: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
1870: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
1880: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
1890: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
18a0: 20 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f   GetList one two
18b0: 20 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20 20   three 4 5.0..  
18c0: 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20      } result] : 
18d0: 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d  [set result ""]}
18e0: 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  ] [normalizeVtab
18f0: 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d  Result $result].
1900: 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20  .} -cleanup {.. 
1910: 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65   cleanupDb $file
1920: 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  Name....  unset 
1930: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
1940: 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20  lt code results 
1950: 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53  errors sql dataS
1960: 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d  ource id fileNam
1970: 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74  e..} -constraint
1980: 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64  s {eagle command
1990: 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32  .object monoBug2
19a0: 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63  8 monoCrash211 c
19b0: 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d  ommand.sql\..com
19c0: 70 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65  pile.DATA SQLite
19d0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
19e0: 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73  ite\..defineCons
19f0: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
1a00: 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
1a10: 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f  VIRTUAL_TABLE co
1a20: 6d 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61  mpileCSharp} -ma
1a30: 74 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72  tch \..regexp -r
1a40: 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65  esult [normalize
1a50: 56 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c  VtabResult {^Ok\
1a60: 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d  ..System#CodeDom
1a70: 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c  #Compiler#Compil
1a80: 65 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b  erResults#\d+ \{
1a90: 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74 77 6f 20 74  \} 0 \{one two t
1aa0: 68 72 65 65 20 34 20 35 5c 2e 30 20 45 72 72 6f  hree 4 5\.0 Erro
1ab0: 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f 67 69 63 20  r\..\{SQL logic 
1ac0: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
1ad0: 20 64 61 74 61 62 61 73 65 20 2d 2d 20 76 69 72   database -- vir
1ae0: 74 75 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b  tual table "t\d+
1af0: 22 20 69 73 5c 0d 0a 72 65 61 64 2d 6f 6e 6c 79  " is\..read-only
1b00: 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23  \}\}$}]}....####
1b10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1b50: 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 72  ###########....r
1b60: 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74 61  unTest {test vta
1b70: 62 2d 31 2e 32 2e 32 20 7b 49 45 6e 75 6d 65 72  b-1.2.2 {IEnumer
1b80: 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74 61 62  able virtual tab
1b90: 6c 65 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20  le} -setup {..  
1ba0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61  set fileName vta
1bb0: 62 2d 31 2e 32 2e 32 2e 64 62 0d 0a 7d 20 2d 62  b-1.2.2.db..} -b
1bc0: 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20  ody {..  set id 
1bd0: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
1be0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
1bf0: 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20  tive NextId]..  
1c00: 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b  set dataSource [
1c10: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
1c20: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
1c30: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 
1c40: 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d   set sql(1) { \.
1c50: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
1c60: 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64 7d  UAL TABLE t${id}
1c70: 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b   USING mod${id};
1c80: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
1c90: 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20   sql(2) { \..   
1ca0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1cb0: 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  ${id}; \..  }...
1cc0: 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20  .  set sql(3) { 
1cd0: 5c 0d 0a 20 20 20 20 55 50 44 41 54 45 20 74 24  \..    UPDATE t$
1ce0: 7b 69 64 7d 20 53 45 54 20 78 20 3d 20 31 3b 20  {id} SET x = 1; 
1cf0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
1d00: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
1d10: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
1d20: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
1d30: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
1d40: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
1d50: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
1d60: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
1d70: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73  .SQLite;..    us
1d80: 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61  ing Eagle._Conta
1d90: 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d  iners.Public;...
1da0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
1db0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
1dc0: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
1dd0: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
1de0: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
1df0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
1e00: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  c static StringL
1e10: 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72 61  ist GetList(para
1e20: 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74  ms string\[\] st
1e30: 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20 20  rings)..        
1e40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72  {..          Str
1e50: 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d  ingList result =
1e60: 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
1e70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e80: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
1e90: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
1ea0: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
1eb0: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
1ec0: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
1ed0: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
1ee0: 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72  rce};[getFlagsPr
1ef0: 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20  operty]"))..    
1f00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f10: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
1f20: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
1f30: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
1f40: 75 6c 65 20 6d 6f 64 75 6c 65 20 3d 20 6e 65 77  ule module = new
1f50: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75   SQLiteModuleEnu
1f60: 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  merable(..      
1f70: 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b            "mod${
1f80: 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29 3b 0d  id}", strings);.
1f90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
1fa0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
1fb0: 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29 3b 0d  Module(module);.
1fc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
1fd0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
1fe0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
1ff0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
2000: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
2010: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2020: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
2030: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
2040: 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d  subst ${sql(1)}]
2050: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2060: 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74    command.Execut
2070: 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
2080: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2090: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
20a0: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
20b0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
20c0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
20d0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
20e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20f0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
2100: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
2110: 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a  t ${sql(2)}]";..
2120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2130: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74  using (SQLiteDat
2140: 61 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64  aReader dataRead
2150: 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65  er = command.Exe
2160: 63 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20  cuteReader()).. 
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65  while (dataReade
21a0: 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  r.Read())..     
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
21c0: 75 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61 64  ult.Add(dataRead
21d0: 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67  er\[0\].ToString
21e0: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
21f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2200: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2210: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
2220: 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64  eCommand command
2230: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72   = connection.Cr
2240: 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
2250: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
2270: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
2280: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
2290: 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20  (3)}]";....     
22a0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22d0: 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f  ommand.ExecuteNo
22e0: 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
22f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2300: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
2310: 28 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e  (SQLiteException
2320: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
2330: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2340: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
2350: 28 65 2e 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f  (e.ResultCode.To
2360: 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20  String());..    
2370: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2380: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
2390: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
23b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23c0: 20 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65    module.Dispose
23d0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
23e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73   connection.Clos
23f0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
2400: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  }....          r
2410: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
2420: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2430: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2480: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2490: 61 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29  atic void Main()
24a0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24b0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
24c0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
24d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
24e0: 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65  ..  }] true true
24f0: 20 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72   true results er
2500: 72 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65  rors [list Syste
2510: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
2520: 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d  l Eagle.dll]]...
2530: 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72  .  list $code $r
2540: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20  esults \..      
2550: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
2560: 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65  sts errors] ? $e
2570: 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a  rrors : ""}] \..
2580: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f        [expr {$co
2590: 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61  de eq "Ok" ? [ca
25a0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
25b0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79  bject invoke _Dy
25c0: 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24  namic${id}.Test$
25d0: 7b 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65  {id} GetList one
25e0: 20 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30   two three 4 5.0
25f0: 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
2600: 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20  ] : [set result 
2610: 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65  ""]}] [normalize
2620: 56 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75  VtabResult $resu
2630: 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20  lt]..} -cleanup 
2640: 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24  {..  cleanupDb $
2650: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e  fileName....  un
2660: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
2670: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75  result code resu
2680: 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64  lts errors sql d
2690: 61 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c  ataSource id fil
26a0: 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72  eName..} -constr
26b0: 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d  aints {eagle com
26c0: 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f  mand.object mono
26d0: 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32  Bug28 monoCrash2
26e0: 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d  11 command.sql\.
26f0: 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51  .compile.DATA SQ
2700: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
2710: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
2720: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
2730: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
2740: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
2750: 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d  E compileCSharp}
2760: 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78   -match \..regex
2770: 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61  p -result [norma
2780: 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b  lizeVtabResult {
2790: 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64  ^Ok\..System#Cod
27a0: 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f  eDom#Compiler#Co
27b0: 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64  mpilerResults#\d
27c0: 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 6f 6e 65 20 74  + \{\} 0 \{one t
27d0: 77 6f 20 74 68 72 65 65 20 34 20 35 5c 2e 30 20  wo three 4 5\.0 
27e0: 45 72 72 6f 72 5c 0d 0a 5c 7b 53 51 4c 20 6c 6f  Error\..\{SQL lo
27f0: 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73  gic error or mis
2800: 73 69 6e 67 20 64 61 74 61 62 61 73 65 20 2d 2d  sing database --
2810: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22   virtual table "
2820: 74 5c 64 2b 22 20 69 73 5c 0d 0a 72 65 61 64 2d  t\d+" is\..read-
2830: 6f 6e 6c 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  only\}\}$}]}....
2840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
2890: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
28a0: 20 76 74 61 62 2d 31 2e 33 2e 31 20 7b 49 45 6e   vtab-1.3.1 {IEn
28b0: 75 6d 65 72 61 62 6c 65 3c 54 3e 20 76 69 72 74  umerable<T> virt
28c0: 75 61 6c 20 74 61 62 6c 65 7d 20 2d 73 65 74 75  ual table} -setu
28d0: 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e  p {..  set fileN
28e0: 61 6d 65 20 76 74 61 62 2d 31 2e 33 2e 31 2e 64  ame vtab-1.3.1.d
28f0: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
2900: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
2910: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
2920: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
2930: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
2940: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
2950: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
2960: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
2970: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
2980: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
2990: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
29a0: 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f   t${id} USING mo
29b0: 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  d${id}; \..  }..
29c0: 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b  ..  set sql(2) {
29d0: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 2a   \..    SELECT *
29e0: 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d   FROM t${id}; \.
29f0: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
2a00: 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20 20 55 50  l(3) { \..    UP
2a10: 44 41 54 45 20 74 24 7b 69 64 7d 20 53 45 54 20  DATE t${id} SET 
2a20: 78 20 3d 20 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d  x = 1; \..  }...
2a30: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
2a40: 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72 72  lain results err
2a50: 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64  ors....  set cod
2a60: 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70  e [compileCSharp
2a70: 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20  With [subst {.. 
2a80: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b     using System;
2a90: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
2aa0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d  em.Data.SQLite;.
2ab0: 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65  .    using Syste
2ac0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 47 65  m.Data.SQLite.Ge
2ad0: 6e 65 72 69 63 3b 0d 0a 20 20 20 20 75 73 69 6e  neric;..    usin
2ae0: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
2af0: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
2b00: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
2b10: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
2b20: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
2b30: 73 74 61 74 69 63 20 63 6c 61 73 73 20 54 65 73  static class Tes
2b40: 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d  t${id}..      {.
2b50: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2b60: 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73  static StringLis
2b70: 74 20 47 65 74 4c 69 73 74 28 70 61 72 61 6d 73  t GetList(params
2b80: 20 69 6e 74 5c 5b 5c 5d 20 69 6e 74 65 67 65 72   int\[\] integer
2b90: 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  s)..        {.. 
2ba0: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c           StringL
2bb0: 69 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  ist result = new
2bc0: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
2bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e  ..          usin
2be0: 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  g (SQLiteConnect
2bf0: 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  ion connection =
2c00: 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65   new SQLiteConne
2c10: 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
2c20: 20 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72        "Data Sour
2c30: 63 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d  ce=${dataSource}
2c40: 3b 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72  ;[getFlagsProper
2c50: 74 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ty]"))..        
2c60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e   connection.Open
2c80: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2c90: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72     connection.Cr
2ca0: 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53  eateModule(new S
2cb0: 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65  QLiteModuleEnume
2cc0: 72 61 62 6c 65 3c 69 6e 74 3e 28 0d 0a 20 20 20  rable<int>(..   
2cd0: 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24             "mod$
2ce0: 7b 69 64 7d 22 2c 20 69 6e 74 65 67 65 72 73 29  {id}", integers)
2cf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d00: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
2d10: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
2d20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
2d30: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
2d40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d50: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
2d60: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
2d70: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31   "[subst ${sql(1
2d80: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
2d90: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65       command.Exe
2da0: 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
2db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2dd0: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
2de0: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
2df0: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
2e00: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
2e10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e20: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
2e30: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
2e40: 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22  ubst ${sql(2)}]"
2e50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e60: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
2e70: 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52  DataReader dataR
2e80: 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e  eader = command.
2e90: 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29  ExecuteReader())
2ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ec0: 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65     while (dataRe
2ed0: 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20  ader.Read())..  
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef0: 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61 52  result.Add(dataR
2f00: 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72  eader\[0\].ToStr
2f10: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
2f20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2f30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f40: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
2f50: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
2f60: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
2f70: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
2f80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
2fb0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
2fc0: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
2fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
2ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3000: 20 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74    command.Execut
3010: 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
3020: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
3040: 63 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74  ch (SQLiteExcept
3050: 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
3060: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3070: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
3080: 41 64 64 28 65 2e 52 65 73 75 6c 74 43 6f 64 65  Add(e.ResultCode
3090: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30b0: 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73  esult.Add(e.Mess
30c0: 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  age);..         
30d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
30e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30f0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
3100: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
3110: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
3120: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
3130: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
3140: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3190: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
31a0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
31b0: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
31c0: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
31d0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
31e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
31f0: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
3200: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
3210: 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53  s errors [list S
3220: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
3230: 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d  e.dll Eagle.dll]
3240: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
3250: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
3260: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
3270: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
3280: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
3290: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
32a0: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
32b0: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
32c0: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
32d0: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
32e0: 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74  est${id} GetList
32f0: 20 31 20 32 20 33 20 34 20 35 0d 0a 20 20 20 20   1 2 3 4 5..    
3300: 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73    } result] : [s
3310: 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20  et result ""]}] 
3320: 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65  [normalizeVtabRe
3330: 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d  sult $result]..}
3340: 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63   -cleanup {..  c
3350: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa
3360: 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e  me....  unset -n
3370: 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74  ocomplain result
3380: 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72   code results er
3390: 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75  rors sql dataSou
33a0: 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d  rce id fileName.
33b0: 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20  .} -constraints 
33c0: 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f  {eagle command.o
33d0: 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20  bject monoBug28 
33e0: 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f 6d  monoCrash211 com
33f0: 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69  mand.sql\..compi
3400: 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53  le.DATA SQLite S
3410: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
3420: 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61  e\..defineConsta
3430: 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
3440: 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49  QLite.INTEROP_VI
3450: 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70  RTUAL_TABLE comp
3460: 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63  ileCSharp} -matc
3470: 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73  h \..regexp -res
3480: 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74  ult [normalizeVt
3490: 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a  abResult {^Ok\..
34a0: 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43  System#CodeDom#C
34b0: 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72  ompiler#Compiler
34c0: 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d  Results#\d+ \{\}
34d0: 20 30 20 5c 7b 31 20 32 20 33 20 34 20 35 20 45   0 \{1 2 3 4 5 E
34e0: 72 72 6f 72 20 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67  rror \{SQL\..log
34f0: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
3500: 69 6e 67 20 64 61 74 61 62 61 73 65 20 2d 2d 20  ing database -- 
3510: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 22 74  virtual table "t
3520: 5c 64 2b 22 20 69 73 20 72 65 61 64 2d 6f 6e 6c  \d+" is read-onl
3530: 79 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23 23  y\}\}$}]}....###
3540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3580: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
3590: 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76 74  runTest {test vt
35a0: 61 62 2d 31 2e 33 2e 32 20 7b 49 45 6e 75 6d 65  ab-1.3.2 {IEnume
35b0: 72 61 62 6c 65 3c 54 3e 20 76 69 72 74 75 61 6c  rable<T> virtual
35c0: 20 74 61 62 6c 65 7d 20 2d 73 65 74 75 70 20 7b   table} -setup {
35d0: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
35e0: 20 76 74 61 62 2d 31 2e 33 2e 32 2e 64 62 0d 0a   vtab-1.3.2.db..
35f0: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
3600: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
3610: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
3620: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
3630: 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
3640: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
3650: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
3660: 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ory] $fileName].
3670: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20  ...  set sql(1) 
3680: 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  { \..    CREATE 
3690: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24  VIRTUAL TABLE t$
36a0: 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b  {id} USING mod${
36b0: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
36c0: 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
36d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
36e0: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
36f0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33  }....  set sql(3
3700: 29 20 7b 20 5c 0d 0a 20 20 20 20 55 50 44 41 54  ) { \..    UPDAT
3710: 45 20 74 24 7b 69 64 7d 20 53 45 54 20 78 20 3d  E t${id} SET x =
3720: 20 31 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20   1; \..  }....  
3730: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
3740: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
3750: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
3760: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
3770: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
3780: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20  using System;.. 
3790: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
37a0: 44 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20  Data.SQLite;..  
37b0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
37c0: 61 74 61 2e 53 51 4c 69 74 65 2e 47 65 6e 65 72  ata.SQLite.Gener
37d0: 69 63 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45  ic;..    using E
37e0: 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73  agle._Containers
37f0: 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20  .Public;....    
3800: 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d  namespace _Dynam
3810: 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a  ic${id}..    {..
3820: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3830: 74 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b  tic class Test${
3840: 69 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  id}..      {..  
3850: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3860: 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47  tic StringList G
3870: 65 74 4c 69 73 74 28 70 61 72 61 6d 73 20 69 6e  etList(params in
3880: 74 5c 5b 5c 5d 20 69 6e 74 65 67 65 72 73 29 0d  t\[\] integers).
3890: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
38a0: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
38b0: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
38c0: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
38d0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
38e0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
38f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
3900: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
3910: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
3920: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
3930: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
3940: 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d  etFlagsProperty]
3950: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
3960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
3970: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
3980: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3990: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
39a0: 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ule = new SQLite
39b0: 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65  ModuleEnumerable
39c0: 3c 69 6e 74 3e 28 0d 0a 20 20 20 20 20 20 20 20  <int>(..        
39d0: 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b 69 64          "mod${id
39e0: 7d 22 2c 20 69 6e 74 65 67 65 72 73 29 3b 0d 0a  }", integers);..
39f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
3a00: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 4d  nnection.CreateM
3a10: 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29 3b 0d 0a  odule(module);..
3a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
3a30: 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
3a40: 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e  nd command = con
3a50: 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f  nection.CreateCo
3a60: 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
3a70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3a80: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
3a90: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
3aa0: 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22  ubst ${sql(1)}]"
3ab0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3ac0: 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65   command.Execute
3ad0: 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20  NonQuery();..   
3ae0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3af0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
3b00: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
3b10: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
3b20: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
3b30: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
3b40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3b50: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
3b60: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
3b70: 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d 0a 0d   ${sql(2)}]";...
3b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
3b90: 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61  sing (SQLiteData
3ba0: 52 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65  Reader dataReade
3bb0: 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  r = command.Exec
3bc0: 75 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20  uteReader())..  
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
3bf0: 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65 72  hile (dataReader
3c00: 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3c20: 6c 74 2e 41 64 64 28 64 61 74 61 52 65 61 64 65  lt.Add(dataReade
3c30: 72 5c 5b 30 5c 5d 2e 54 6f 53 74 72 69 6e 67 28  r\[0\].ToString(
3c40: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
3c50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
3c60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
3c70: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
3c80: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
3c90: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
3ca0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
3cb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3cc0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
3cd0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
3ce0: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
3cf0: 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  3)}]";....      
3d00: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
3d10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
3d30: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
3d40: 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
3d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3d60: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
3d70: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20  SQLiteException 
3d80: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
3d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3da0: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
3db0: 65 2e 52 65 73 75 6c 74 43 6f 64 65 2e 54 6f 53  e.ResultCode.ToS
3dc0: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
3dd0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
3de0: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
3df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3e00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3e10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3e20: 20 6d 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28   module.Dispose(
3e30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3e40: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
3e50: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
3e60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
3e70: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
3e80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3e90: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3ee0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3ef0: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
3f00: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3f10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
3f20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
3f30: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3f40: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
3f50: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
3f60: 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d  ors [list System
3f70: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
3f80: 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a   Eagle.dll]]....
3f90: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
3fa0: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
3fb0: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
3fc0: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
3fd0: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
3fe0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
3ff0: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
4000: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
4010: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
4020: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
4030: 69 64 7d 20 47 65 74 4c 69 73 74 20 31 20 32 20  id} GetList 1 2 
4040: 33 20 34 20 35 0d 0a 20 20 20 20 20 20 7d 20 72  3 4 5..      } r
4050: 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65  esult] : [set re
4060: 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d  sult ""]}] [norm
4070: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
4080: 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65  $result]..} -cle
4090: 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75  anup {..  cleanu
40a0: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d  pDb $fileName...
40b0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
40c0: 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64 65  lain result code
40d0: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
40e0: 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20 69  sql dataSource i
40f0: 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63  d fileName..} -c
4100: 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67 6c  onstraints {eagl
4110: 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74  e command.object
4120: 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43   monoBug28 monoC
4130: 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e  rash211 command.
4140: 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41  sql\..compile.DA
4150: 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65 6d  TA SQLite System
4160: 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64  .Data.SQLite\..d
4170: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79  efineConstant.Sy
4180: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
4190: 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c  .INTEROP_VIRTUAL
41a0: 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53  _TABLE compileCS
41b0: 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a  harp} -match \..
41c0: 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20 5b  regexp -result [
41d0: 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73  normalizeVtabRes
41e0: 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65  ult {^Ok\..Syste
41f0: 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c  m#CodeDom#Compil
4200: 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c  er#CompilerResul
4210: 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b  ts#\d+ \{\} 0 \{
4220: 31 20 32 20 33 20 34 20 35 20 45 72 72 6f 72 20  1 2 3 4 5 Error 
4230: 5c 7b 53 51 4c 5c 0d 0a 6c 6f 67 69 63 20 65 72  \{SQL\..logic er
4240: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
4250: 61 74 61 62 61 73 65 20 2d 2d 20 76 69 72 74 75  atabase -- virtu
4260: 61 6c 20 74 61 62 6c 65 20 22 74 5c 64 2b 22 20  al table "t\d+" 
4270: 69 73 20 72 65 61 64 2d 6f 6e 6c 79 5c 7d 5c 7d  is read-only\}\}
4280: 24 7d 5d 7d 0d 0a 0d 0a 23 23 23 23 23 23 23 23  $}]}....########
4290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
42d0: 23 23 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 54 65  #######....runTe
42e0: 73 74 20 7b 74 65 73 74 20 76 74 61 62 2d 31 2e  st {test vtab-1.
42f0: 34 20 7b 76 69 72 74 75 61 6c 20 74 61 62 6c 65  4 {virtual table
4300: 20 66 75 6e 63 74 69 6f 6e 20 73 75 70 70 6f 72   function suppor
4310: 74 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20 20 73  t} -setup {..  s
4320: 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74 61 62  et fileName vtab
4330: 2d 31 2e 34 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79  -1.4.db..} -body
4340: 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b 6f 62   {..  set id [ob
4350: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
4360: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
4370: 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73 65 74  e NextId]..  set
4380: 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66 69 6c   dataSource [fil
4390: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
43a0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 66  aseDirectory] $f
43b0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65  ileName]....  se
43c0: 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20  t sql(1) { \..  
43d0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
43e0: 20 54 41 42 4c 45 20 74 24 7b 69 64 7d 20 55 53   TABLE t${id} US
43f0: 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d  ING mod${id}; \.
4400: 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71  .  }....  set sq
4410: 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45  l(2) { \..    SE
4420: 4c 45 43 54 20 42 61 73 65 36 34 28 78 2c 20 43  LECT Base64(x, C
4430: 41 53 54 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f  AST('one' AS BLO
4440: 42 29 29 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b  B)) FROM t${id};
4450: 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74   \..  }....  set
4460: 20 73 71 6c 28 33 29 20 7b 20 5c 0d 0a 20 20 20   sql(3) { \..   
4470: 20 53 45 4c 45 43 54 20 42 61 73 65 36 34 28 78   SELECT Base64(x
4480: 2c 20 43 41 53 54 28 27 6f 6e 65 27 20 41 53 20  , CAST('one' AS 
4490: 42 4c 4f 42 29 2c 20 27 74 77 6f 27 29 20 46 52  BLOB), 'two') FR
44a0: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
44b0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 34  }....  set sql(4
44c0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
44d0: 54 20 42 61 73 65 36 35 28 78 2c 20 43 41 53 54  T Base65(x, CAST
44e0: 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 29  ('one' AS BLOB))
44f0: 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d   FROM t${id}; \.
4500: 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20  .  }....  unset 
4510: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75  -nocomplain resu
4520: 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  lts errors....  
4530: 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c  set code [compil
4540: 65 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62  eCSharpWith [sub
4550: 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20  st {..    using 
4560: 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69  System;..    usi
4570: 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ng System.Data.S
4580: 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e  QLite;..    usin
4590: 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e  g Eagle._Contain
45a0: 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20  ers.Public;.... 
45b0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79     namespace _Dy
45c0: 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20  namic${id}..    
45d0: 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  {..      public 
45e0: 63 6c 61 73 73 20 53 51 4c 69 74 65 46 75 6e 63  class SQLiteFunc
45f0: 74 69 6f 6e 24 7b 69 64 7d 20 3a 20 53 51 4c 69  tion${id} : SQLi
4600: 74 65 46 75 6e 63 74 69 6f 6e 0d 0a 20 20 20 20  teFunction..    
4610: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
4620: 6c 69 63 20 53 51 4c 69 74 65 46 75 6e 63 74 69  lic SQLiteFuncti
4630: 6f 6e 24 7b 69 64 7d 28 29 0d 0a 20 20 20 20 20  on${id}()..     
4640: 20 20 20 20 20 3a 20 62 61 73 65 28 53 51 4c 69       : base(SQLi
4650: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65  teDateFormats.De
4660: 66 61 75 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b  fault, DateTimeK
4670: 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65 64 2c  ind.Unspecified,
4680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4690: 20 20 20 6e 75 6c 6c 2c 20 66 61 6c 73 65 29 0d     null, false).
46a0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
46b0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
46c0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
46d0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
46e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4720: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
4730: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 6f 62  blic override ob
4740: 6a 65 63 74 20 49 6e 76 6f 6b 65 28 0d 0a 20 20  ject Invoke(..  
4750: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 5c 5b          object\[
4760: 5c 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20  \] args..       
4770: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
4780: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61  .          if (a
4790: 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
47a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
47b0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
47c0: 20 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e      if (args.Len
47d0: 67 74 68 20 21 3d 20 32 29 0d 0a 20 20 20 20 20  gth != 2)..     
47e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
47f0: 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
4800: 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ion(String.Forma
4810: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
4820: 20 20 22 6e 65 65 64 20 65 78 61 63 74 6c 79 20    "need exactly 
4830: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 2c 20 67  two arguments, g
4840: 6f 74 20 7b 30 7d 22 2c 20 61 72 67 73 2e 4c 65  ot {0}", args.Le
4850: 6e 67 74 68 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ngth));....     
4860: 20 20 20 20 20 6f 62 6a 65 63 74 20 61 72 67 20       object arg 
4870: 3d 20 61 72 67 73 5c 5b 31 5c 5d 3b 0d 0a 0d 0a  = args\[1\];....
4880: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
4890: 67 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  g == null)..    
48a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
48b0: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a  tring.Empty;....
48c0: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
48d0: 79 70 65 20 3d 20 61 72 67 2e 47 65 74 54 79 70  ype = arg.GetTyp
48e0: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
48f0: 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79    if (type == ty
4900: 70 65 6f 66 28 44 42 4e 75 6c 6c 29 29 0d 0a 20  peof(DBNull)).. 
4910: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4920: 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
4930: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
4940: 28 74 79 70 65 20 21 3d 20 74 79 70 65 6f 66 28  (type != typeof(
4950: 62 79 74 65 5c 5b 5c 5d 29 29 0d 0a 20 20 20 20  byte\[\]))..    
4960: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4970: 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
4980: 74 69 6f 6e 28 53 74 72 69 6e 67 2e 46 6f 72 6d  tion(String.Form
4990: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
49a0: 20 20 20 22 61 72 67 75 6d 65 6e 74 20 6d 75 73     "argument mus
49b0: 74 20 62 65 20 62 79 74 65 20 61 72 72 61 79 2c  t be byte array,
49c0: 20 67 6f 74 20 7b 30 7d 22 2c 20 74 79 70 65 29   got {0}", type)
49d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
49e0: 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54  return Convert.T
49f0: 6f 42 61 73 65 36 34 53 74 72 69 6e 67 28 28 62  oBase64String((b
4a00: 79 74 65 5c 5b 5c 5d 29 20 61 72 67 29 3b 0d 0a  yte\[\]) arg);..
4a10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4a20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
4a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a70: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
4a80: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
4a90: 73 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ss SQLiteModuleT
4aa0: 65 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74  est${id} : SQLit
4ab0: 65 4d 6f 64 75 6c 65 4e 6f 6f 70 0d 0a 20 20 20  eModuleNoop..   
4ac0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
4ad0: 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
4ae0: 65 54 65 73 74 24 7b 69 64 7d 28 73 74 72 69 6e  eTest${id}(strin
4af0: 67 20 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  g name)..       
4b00: 20 20 20 3a 20 62 61 73 65 28 6e 61 6d 65 29 0d     : base(name).
4b10: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4b20: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
4b30: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
4b40: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
4ba0: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51  blic override SQ
4bb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
4bc0: 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20  eate(..         
4bd0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
4be0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20  n connection,.. 
4bf0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4c00: 70 43 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20  pClientData,..  
4c10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5c 5b          string\[
4c20: 5c 5d 20 61 72 67 75 6d 65 6e 74 73 2c 0d 0a 20  \] arguments,.. 
4c30: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
4c40: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
4c50: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
4c60: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
4c70: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  or..          ).
4c80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4c90: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
4ca0: 72 43 6f 64 65 20 72 63 20 3d 20 44 65 63 6c 61  rCode rc = Decla
4cb0: 72 65 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20  reTable(..      
4cc0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
4cd0: 2c 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  , "CREATE TABLE 
4ce0: 69 67 6e 6f 72 65 64 28 78 29 3b 22 2c 20 72 65  ignored(x);", re
4cf0: 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  f error);....   
4d00: 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21 3d         if (rc !=
4d10: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
4d20: 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
4d30: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 0d 0a    return rc;....
4d40: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 44            rc = D
4d50: 65 63 6c 61 72 65 46 75 6e 63 74 69 6f 6e 28 63  eclareFunction(c
4d60: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 2d 31 2c 20 22  onnection, -1, "
4d70: 42 61 73 65 36 34 22 2c 20 72 65 66 20 65 72 72  Base64", ref err
4d80: 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
4d90: 20 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69    if (rc != SQLi
4da0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
4db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4dc0: 75 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  urn rc;....     
4dd0: 20 20 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77       table = new
4de0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
4df0: 62 6c 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d  ble(arguments);.
4e00: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
4e10: 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
4e20: 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d  e.Ok;..        }
4e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
4e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
4e90: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53  ublic override S
4ea0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f  QLiteErrorCode O
4eb0: 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
4ec0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
4ed0: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
4ee0: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56       ref SQLiteV
4ef0: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
4f00: 72 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20  r cursor..      
4f10: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
4f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 75 72 73  ..          curs
4f30: 6f 72 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56  or = new SQLiteV
4f40: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
4f50: 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20  r(table);..     
4f60: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4f70: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
4f80: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
4f90: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4fe0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
4ff0: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 46 69  override bool Fi
5000: 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20  ndFunction(..   
5010: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
5020: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
5030: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
5040: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a  argumentCount,..
5050: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5060: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
5070: 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e 63    ref SQLiteFunc
5080: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 0d 0a  tion function,..
5090: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
50a0: 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74 61  tPtr pClientData
50b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20  ..          ).. 
50c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
50d0: 20 20 20 20 69 66 20 28 61 72 67 75 6d 65 6e 74      if (argument
50e0: 43 6f 75 6e 74 20 21 3d 20 32 29 0d 0a 20 20 20  Count != 2)..   
50f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5100: 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
5110: 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69 6e  ror(table, Strin
5120: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
5130: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c 22           "no \\"
5140: 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e 73  {0}\\" functions
5150: 20 61 63 63 65 70 74 20 7b 31 7d 20 61 72 67 75   accept {1} argu
5160: 6d 65 6e 74 28 73 29 22 2c 0d 0a 20 20 20 20 20  ment(s)",..     
5170: 20 20 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61           base.Na
5180: 6d 65 2c 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e  me, argumentCoun
5190: 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
51a0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
51b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
51c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
51d0: 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 6e  !String.Equals(n
51e0: 61 6d 65 2c 20 22 42 61 73 65 36 34 22 2c 0d 0a  ame, "Base64",..
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
5200: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
5210: 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
5220: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  ))..          {.
5230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
5240: 54 61 62 6c 65 45 72 72 6f 72 28 74 61 62 6c 65  TableError(table
5250: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
5260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5270: 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22 20 66 75  "no \\"{0}\\" fu
5280: 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 61 6d 65  nctions are name
5290: 64 20 5c 5c 22 7b 31 7d 5c 5c 22 22 2c 0d 0a 20  d \\"{1}\\"",.. 
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73               bas
52b0: 65 2e 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 3b 0d  e.Name, name));.
52c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
52d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
52e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
52f0: 20 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20         function 
5300: 3d 20 6e 65 77 20 53 51 4c 69 74 65 46 75 6e 63  = new SQLiteFunc
5310: 74 69 6f 6e 24 7b 69 64 7d 28 29 3b 0d 0a 20 20  tion${id}();..  
5320: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
5330: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
5340: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
5350: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
53a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
53b0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
53c0: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
53d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
53e0: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
53f0: 74 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  tList()..       
5400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74   {..          St
5410: 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20  ringList result 
5420: 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
5430: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
5440: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
5450: 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
5460: 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  ion = new SQLite
5470: 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20  Connection(..   
5480: 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
5490: 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f   Source=${dataSo
54a0: 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50  urce};[getFlagsP
54b0: 72 6f 70 65 72 74 79 20 4e 6f 42 69 6e 64 46 75  roperty NoBindFu
54c0: 6e 63 74 69 6f 6e 73 5d 22 29 29 0d 0a 20 20 20  nctions]"))..   
54d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
54e0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
54f0: 2e 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20 20 20  .Open();..      
5500: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
5510: 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e 65  .CreateModule(ne
5520: 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65  w SQLiteModuleTe
5530: 73 74 24 7b 69 64 7d 28 22 6d 6f 64 24 7b 69 64  st${id}("mod${id
5540: 7d 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  }"));....       
5550: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
5560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5570: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
5580: 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d  LiteCommand comm
5590: 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  and = connection
55a0: 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29  .CreateCommand()
55b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
55c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
55d0: 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d      command.Comm
55e0: 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73  andText = "[subs
55f0: 74 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a  t ${sql(1)}]";..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e  result.Add(Strin
5620: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20  g.Format("{0}", 
5630: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53  command.ExecuteS
5640: 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20  calar()));..    
5650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5660: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5670: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
5680: 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
5690: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
56a0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
56b0: 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b  .Add(e.Message);
56c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
56d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
56e0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
56f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5700: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
5710: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
5720: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
5730: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
5740: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
5760: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
5770: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
5780: 6c 28 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(2)}]";..      
5790: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
57a0: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
57b0: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
57c0: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
57d0: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
57e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
57f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5800: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
5810: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
5820: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5830: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
5840: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
5850: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5860: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
5870: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5880: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
5890: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
58a0: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
58b0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
58c0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
58d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
58e0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
58f0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
5900: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
5910: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
5920: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53      result.Add(S
5930: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
5940: 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  }", command.Exec
5950: 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a  uteScalar()));..
5960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
5990: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
59a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
59c0: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
59d0: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
59e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
59f0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
5a00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5a10: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
5a20: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
5a30: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
5a40: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
5a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
5a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a70: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
5a80: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
5a90: 24 7b 73 71 6c 28 34 29 7d 5d 22 3b 0d 0a 20 20  ${sql(4)}]";..  
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5ab0: 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e  sult.Add(String.
5ac0: 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f  Format("{0}", co
5ad0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61  mmand.ExecuteSca
5ae0: 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20  lar()));..      
5af0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5b00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5b10: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
5b20: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
5b30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5b40: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
5b50: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e  .            con
5b80: 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b  nection.Close();
5b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
5ba0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
5bb0: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
5bc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5c20: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
5c30: 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20   void Main()..  
5c40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5c50: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
5c60: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
5c70: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20      }..    }..  
5c80: 7d 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75  }] true true tru
5c90: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
5ca0: 20 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61   [list System.Da
5cb0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61  ta.SQLite.dll Ea
5cc0: 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c  gle.dll]]....  l
5cd0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code $resul
5ce0: 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  ts \..      [exp
5cf0: 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  r {[info exists 
5d00: 65 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72  errors] ? $error
5d10: 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20  s : ""}] \..    
5d20: 20 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65    [expr {$code e
5d30: 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20  q "Ok" ? [catch 
5d40: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
5d50: 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69  t invoke _Dynami
5d60: 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d  c${id}.Test${id}
5d70: 20 47 65 74 4c 69 73 74 0d 0a 20 20 20 20 20 20   GetList..      
5d80: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
5d90: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e   result ""]}] [n
5da0: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
5db0: 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d  lt $result]..} -
5dc0: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
5dd0: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
5de0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
5df0: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63  omplain result c
5e00: 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ode results erro
5e10: 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63  rs sql dataSourc
5e20: 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  e id fileName..}
5e30: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
5e40: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
5e50: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f  ect monoBug28 mo
5e60: 6e 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61  noCrash211 comma
5e70: 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65  nd.sql\..compile
5e80: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
5e90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
5ea0: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
5eb0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
5ec0: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
5ed0: 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c  UAL_TABLE compil
5ee0: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
5ef0: 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c  \..regexp -resul
5f00: 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  t [normalizeVtab
5f10: 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  Result {^Ok\..Sy
5f20: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
5f30: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
5f40: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
5f50: 20 5c 7b 5c 7b 5c 7d 20 62 32 35 6c 20 5c 7b 53   \{\{\} b25l \{S
5f60: 51 4c 20 6c 6f 67 69 63 5c 0d 0a 65 72 72 6f 72  QL logic\..error
5f70: 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61   or missing data
5f80: 62 61 73 65 20 2d 2d 20 75 6e 61 62 6c 65 20 74  base -- unable t
5f90: 6f 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 20 42  o use function B
5fa0: 61 73 65 36 34 20 69 6e 20 74 68 65 20 72 65 71  ase64 in the req
5fb0: 75 65 73 74 65 64 5c 0d 0a 63 6f 6e 74 65 78 74  uested\..context
5fc0: 5c 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65  \} \{SQL logic e
5fd0: 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
5fe0: 64 61 74 61 62 61 73 65 20 2d 2d 20 6e 6f 20 73  database -- no s
5ff0: 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 5c 0d 0a  uch function:\..
6000: 42 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a  Base65\}\}$}]}..
6010: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
6020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6060: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
6070: 73 74 20 76 74 61 62 2d 31 2e 35 20 7b 76 69 72  st vtab-1.5 {vir
6080: 74 75 61 6c 20 74 61 62 6c 65 20 66 75 6e 63 74  tual table funct
6090: 69 6f 6e 20 73 75 70 70 6f 72 74 7d 20 2d 73 65  ion support} -se
60a0: 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c  tup {..  set fil
60b0: 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 35 2e 64  eName vtab-1.5.d
60c0: 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20  b..} -body {..  
60d0: 73 65 74 20 69 64 20 5b 6f 62 6a 65 63 74 20 69  set id [object i
60e0: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
60f0: 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74  r.GetActive Next
6100: 49 64 5d 0d 0a 20 20 73 65 74 20 64 61 74 61 53  Id]..  set dataS
6110: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
6120: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
6130: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam
6140: 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28  e]....  set sql(
6150: 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41  1) { \..    CREA
6160: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
6170: 20 74 24 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f   t${id} USING mo
6180: 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  d${id}; \..  }..
6190: 0d 0a 20 20 73 65 74 20 73 71 6c 28 32 29 20 7b  ..  set sql(2) {
61a0: 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 42   \..    SELECT B
61b0: 61 73 65 36 34 28 78 2c 20 43 41 53 54 28 27 6f  ase64(x, CAST('o
61c0: 6e 65 27 20 41 53 20 42 4c 4f 42 29 29 20 46 52  ne' AS BLOB)) FR
61d0: 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20  OM t${id}; \..  
61e0: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33  }....  set sql(3
61f0: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
6200: 54 20 42 61 73 65 36 34 28 78 2c 20 43 41 53 54  T Base64(x, CAST
6210: 28 27 6f 6e 65 27 20 41 53 20 42 4c 4f 42 29 2c  ('one' AS BLOB),
6220: 20 27 74 77 6f 27 29 20 46 52 4f 4d 20 74 24 7b   'two') FROM t${
6230: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
6240: 20 73 65 74 20 73 71 6c 28 34 29 20 7b 20 5c 0d   set sql(4) { \.
6250: 0a 20 20 20 20 53 45 4c 45 43 54 20 42 61 73 65  .    SELECT Base
6260: 36 35 28 78 2c 20 43 41 53 54 28 27 6f 6e 65 27  65(x, CAST('one'
6270: 20 41 53 20 42 4c 4f 42 29 29 20 46 52 4f 4d 20   AS BLOB)) FROM 
6280: 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a  t${id}; \..  }..
6290: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
62a0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20 65 72  plain results er
62b0: 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20 63 6f  rors....  set co
62c0: 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  de [compileCShar
62d0: 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b 0d 0a  pWith [subst {..
62e0: 20 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d      using System
62f0: 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  ;..    using Sys
6300: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 3b  tem.Data.SQLite;
6310: 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61 67 6c  ..    using Eagl
6320: 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e 50 75  e._Containers.Pu
6330: 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  blic;....    nam
6340: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
6350: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
6360: 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20     public class 
6370: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
6380: 69 64 7d 20 3a 20 53 51 4c 69 74 65 46 75 6e 63  id} : SQLiteFunc
6390: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  tion..      {.. 
63a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
63b0: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b 69 64  LiteFunction${id
63c0: 7d 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a  }()..          :
63d0: 20 62 61 73 65 28 53 51 4c 69 74 65 44 61 74 65   base(SQLiteDate
63e0: 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c 74 2c  Formats.Default,
63f0: 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e   DateTimeKind.Un
6400: 73 70 65 63 69 66 69 65 64 2c 0d 0a 20 20 20 20  specified,..    
6410: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c               nul
6420: 6c 2c 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  l, false)..     
6430: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6440: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
6450: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6460: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
64b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
64c0: 76 65 72 72 69 64 65 20 6f 62 6a 65 63 74 20 49  verride object I
64d0: 6e 76 6f 6b 65 28 0d 0a 20 20 20 20 20 20 20 20  nvoke(..        
64e0: 20 20 6f 62 6a 65 63 74 5c 5b 5c 5d 20 61 72 67    object\[\] arg
64f0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  s..          )..
6500: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6510: 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
6520: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
6530: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
6540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
6550: 20 28 61 72 67 73 2e 4c 65 6e 67 74 68 20 21 3d   (args.Length !=
6560: 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   2)..           
6570: 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67 75   return new Argu
6580: 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53 74  mentException(St
6590: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 65 65              "nee
65b0: 64 20 65 78 61 63 74 6c 79 20 74 77 6f 20 61 72  d exactly two ar
65c0: 67 75 6d 65 6e 74 73 2c 20 67 6f 74 20 7b 30 7d  guments, got {0}
65d0: 22 2c 20 61 72 67 73 2e 4c 65 6e 67 74 68 29 29  ", args.Length))
65e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  ;....          o
65f0: 62 6a 65 63 74 20 61 72 67 20 3d 20 61 72 67 73  bject arg = args
6600: 5c 5b 31 5c 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  \[1\];....      
6610: 20 20 20 20 69 66 20 28 61 72 67 20 3d 3d 20 6e      if (arg == n
6620: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6630: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
6640: 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  Empty;....      
6650: 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
6660: 61 72 67 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  arg.GetType();..
6670: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
6680: 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 44  type == typeof(D
6690: 42 4e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20  BNull))..       
66a0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
66b0: 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20  ng.Empty;....   
66c0: 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20         if (type 
66d0: 21 3d 20 74 79 70 65 6f 66 28 62 79 74 65 5c 5b  != typeof(byte\[
66e0: 5c 5d 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  \]))..          
66f0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 41 72 67    return new Arg
6700: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 53  umentException(S
6710: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 72               "ar
6730: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 62  gument must be b
6740: 79 74 65 20 61 72 72 61 79 2c 20 67 6f 74 20 7b  yte array, got {
6750: 30 7d 22 2c 20 74 79 70 65 29 29 3b 0d 0a 0d 0a  0}", type));....
6760: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6770: 20 43 6f 6e 76 65 72 74 2e 54 6f 42 61 73 65 36   Convert.ToBase6
6780: 34 53 74 72 69 6e 67 28 28 62 79 74 65 5c 5b 5c  4String((byte\[\
6790: 5d 29 20 61 72 67 29 3b 0d 0a 20 20 20 20 20 20  ]) arg);..      
67a0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
67b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
67c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6800: 0a 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  ...      public 
6810: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c  sealed class SQL
6820: 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69  iteModuleTest${i
6830: 64 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c  d} : SQLiteModul
6840: 65 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a  eNoop..      {..
6850: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
6860: 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24  QLiteModuleTest$
6870: 7b 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65  {id}(string name
6880: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62  )..          : b
6890: 61 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20  ase(name)..     
68a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
68b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
68c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
68d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
68e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6920: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
6930: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
6940: 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d  rorCode Create(.
6950: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
6960: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
6970: 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ection,..       
6980: 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e     IntPtr pClien
6990: 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
69a0: 20 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67    string\[\] arg
69b0: 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20  uments,..       
69c0: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
69d0: 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c  tualTable table,
69e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
69f0: 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
6a00: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6a10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6a20: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6a30: 72 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c  rc = DeclareTabl
6a40: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
6a50: 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45  connection, "CRE
6a60: 41 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65  ATE TABLE ignore
6a70: 64 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f  d(x);", ref erro
6a80: 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
6a90: 20 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74   if (rc != SQLit
6aa0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
6ab0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6ac0: 72 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20  rn rc;....      
6ad0: 20 20 20 20 72 63 20 3d 20 44 65 63 6c 61 72 65      rc = Declare
6ae0: 46 75 6e 63 74 69 6f 6e 28 63 6f 6e 6e 65 63 74  Function(connect
6af0: 69 6f 6e 2c 20 2d 31 2c 20 22 42 61 73 65 36 34  ion, -1, "Base64
6b00: 22 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  ", ref error);..
6b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
6b20: 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  rc != SQLiteErro
6b30: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
6b40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 63         return rc
6b50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74  ;....          t
6b60: 61 62 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74  able = new SQLit
6b70: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 28 61 72  eVirtualTable(ar
6b80: 67 75 6d 65 6e 74 73 29 3b 0d 0a 20 20 20 20 20  guments);..     
6b90: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
6ba0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
6bb0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
6bc0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6c10: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
6c20: 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
6c30: 72 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a  rrorCode Open(..
6c40: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
6c50: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
6c60: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 72  le,..          r
6c70: 65 66 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ef SQLiteVirtual
6c80: 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
6c90: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  or..          ).
6ca0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6cb0: 20 20 20 20 20 20 63 75 72 73 6f 72 20 3d 20 6e        cursor = n
6cc0: 65 77 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ew SQLiteVirtual
6cd0: 54 61 62 6c 65 43 75 72 73 6f 72 28 74 61 62 6c  TableCursor(tabl
6ce0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  e);..          r
6cf0: 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
6d00: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
6d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6d70: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
6d80: 64 65 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63  de bool FindFunc
6d90: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
6da0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
6db0: 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20  ble table,..    
6dc0: 20 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65        int argume
6dd0: 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  ntCount,..      
6de0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20  ..          ref 
6e00: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66  SQLiteFunction f
6e10: 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  unction,..      
6e20: 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
6e30: 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20 20  ClientData..    
6e40: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
6e50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
6e60: 20 28 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 20   (argumentCount 
6e70: 21 3d 20 32 29 0d 0a 20 20 20 20 20 20 20 20 20  != 2)..         
6e80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6e90: 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 74 61  SetTableError(ta
6ea0: 62 6c 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ble, String.Form
6eb0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
6ec0: 20 20 20 22 6e 6f 20 5c 5c 22 7b 30 7d 5c 5c 22     "no \\"{0}\\"
6ed0: 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 63 65 70   functions accep
6ee0: 74 20 7b 31 7d 20 61 72 67 75 6d 65 6e 74 28 73  t {1} argument(s
6ef0: 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )",..           
6f00: 20 20 20 62 61 73 65 2e 4e 61 6d 65 2c 20 61 72     base.Name, ar
6f10: 67 75 6d 65 6e 74 43 6f 75 6e 74 29 29 3b 0d 0a  gumentCount));..
6f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
6f30: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
6f40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6f50: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
6f60: 67 2e 45 71 75 61 6c 73 28 6e 61 6d 65 2c 20 22  g.Equals(name, "
6f70: 42 61 73 65 36 34 22 2c 0d 0a 20 20 20 20 20 20  Base64",..      
6f80: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f          StringCo
6f90: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
6fa0: 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
6fb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6fc0: 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
6fd0: 72 72 6f 72 28 74 61 62 6c 65 2c 20 53 74 72 69  rror(table, Stri
6fe0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
6ff0: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 5c 5c            "no \\
7000: 22 7b 30 7d 5c 5c 22 20 66 75 6e 63 74 69 6f 6e  "{0}\\" function
7010: 73 20 61 72 65 20 6e 61 6d 65 64 20 5c 5c 22 7b  s are named \\"{
7020: 31 7d 5c 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20  1}\\"",..       
7030: 20 20 20 20 20 20 20 62 61 73 65 2e 4e 61 6d 65         base.Name
7040: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  , name));....   
7050: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7060: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
7070: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7080: 20 66 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20   function = new 
7090: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 24 7b  SQLiteFunction${
70a0: 69 64 7d 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  id}();..        
70b0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
70c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
70d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70  /////....      p
7130: 75 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61  ublic static cla
7140: 73 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20  ss Test${id}..  
7150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70      {..        p
7160: 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72  ublic static Str
7170: 69 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28  ingList GetList(
7180: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
7190: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69          StringLi
71a0: 73 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  st result = new 
71b0: 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
71c0: 0a 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67  .          using
71d0: 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69   (SQLiteConnecti
71e0: 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20  on connection = 
71f0: 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  new SQLiteConnec
7200: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
7210: 20 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63       "Data Sourc
7220: 65 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b  e=${dataSource};
7230: 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74  [getFlagsPropert
7240: 79 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  y]"))..         
7250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7260: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28  connection.Open(
7270: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7280: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
7290: 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69  eModule(new SQLi
72a0: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
72b0: 7d 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d  }("mod${id}"));.
72c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ...            t
72d0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
72e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
72f0: 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f   using (SQLiteCo
7300: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20  mmand command = 
7310: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
7320: 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20  eCommand())..   
7330: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
7350: 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78  mmand.CommandTex
7360: 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71  t = "[subst ${sq
7370: 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20  l(1)}]";..      
7380: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
7390: 2e 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d  .Add(String.Form
73a0: 61 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e  at("{0}", comman
73b0: 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28  d.ExecuteScalar(
73c0: 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  )));..          
73d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
73e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
73f0: 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
7400: 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
7410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7420: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65      result.Add(e
7430: 2e 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20  .Message);..    
7440: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7450: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
7460: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7470: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
7480: 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20   (SQLiteCommand 
7490: 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63  command = connec
74a0: 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61  tion.CreateComma
74b0: 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nd())..         
74c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
74d0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
74e0: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
74f0: 73 75 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d  subst ${sql(2)}]
7500: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
7510: 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53      result.Add(S
7520: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
7530: 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63  }", command.Exec
7540: 75 74 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a  uteScalar()));..
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7570: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
7580: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
7590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
75b0: 73 75 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61  sult.Add(e.Messa
75c0: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
75d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
75e0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
75f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7600: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
7610: 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e  teCommand comman
7620: 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43  d = connection.C
7630: 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d  reateCommand()).
7640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
7650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7660: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
7670: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
7680: 24 7b 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 20 20  ${sql(3)}]";..  
7690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
76a0: 73 75 6c 74 2e 41 64 64 28 53 74 72 69 6e 67 2e  sult.Add(String.
76b0: 46 6f 72 6d 61 74 28 22 7b 30 7d 22 2c 20 63 6f  Format("{0}", co
76c0: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61  mmand.ExecuteSca
76d0: 6c 61 72 28 29 29 29 3b 0d 0a 20 20 20 20 20 20  lar()));..      
76e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
76f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7700: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
7710: 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
7720: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7730: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
7740: 64 64 28 65 2e 4d 65 73 73 61 67 65 29 3b 0d 0a  dd(e.Message);..
7750: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
7790: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
77a0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
77b0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
77c0: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
77d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
77f0: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
7800: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
7810: 34 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  4)}]";..        
7820: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
7830: 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  dd(String.Format
7840: 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64 2e  ("{0}", command.
7850: 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29 29  ExecuteScalar())
7860: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7870: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
7880: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7890: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
78a0: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
78b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
78c0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
78d0: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
78e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
78f0: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
7900: 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  n.Close();..    
7910: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7920: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
7930: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
7940: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
7950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
79a0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
79b0: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
79c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
79d0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
79e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
79f0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
7a00: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
7a10: 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74  lts errors [list
7a20: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
7a30: 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c  ite.dll Eagle.dl
7a40: 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  l]]....  list $c
7a50: 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a  ode $results \..
7a60: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e        [expr {[in
7a70: 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73  fo exists errors
7a80: 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22  ] ? $errors : ""
7a90: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
7aa0: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
7ab0: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
7ac0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
7ad0: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
7ae0: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69  .Test${id} GetLi
7af0: 73 74 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75  st..      } resu
7b00: 6c 74 5d 20 3a 20 5b 73 65 74 20 72 65 73 75 6c  lt] : [set resul
7b10: 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69  t ""]}] [normali
7b20: 7a 65 56 74 61 62 52 65 73 75 6c 74 20 24 72 65  zeVtabResult $re
7b30: 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75  sult]..} -cleanu
7b40: 70 20 7b 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62  p {..  cleanupDb
7b50: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName....  
7b60: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
7b70: 6e 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65  n result code re
7b80: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 73 71 6c  sults errors sql
7b90: 20 64 61 74 61 53 6f 75 72 63 65 20 69 64 20 66   dataSource id f
7ba0: 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73  ileName..} -cons
7bb0: 74 72 61 69 6e 74 73 20 7b 65 61 67 6c 65 20 63  traints {eagle c
7bc0: 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f  ommand.object mo
7bd0: 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73  noBug28 monoCras
7be0: 68 32 31 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c  h211 command.sql
7bf0: 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20  \..compile.DATA 
7c00: 53 51 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61  SQLite System.Da
7c10: 74 61 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69  ta.SQLite\..defi
7c20: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
7c30: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
7c40: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
7c50: 42 4c 45 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  BLE compileCShar
7c60: 70 7d 20 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67  p} -match \..reg
7c70: 65 78 70 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72  exp -result [nor
7c80: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
7c90: 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43   {^Ok\..System#C
7ca0: 6f 64 65 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23  odeDom#Compiler#
7cb0: 43 6f 6d 70 69 6c 65 72 52 65 73 75 6c 74 73 23  CompilerResults#
7cc0: 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c 7b 5c 7b 5c  \d+ \{\} 0 \{\{\
7cd0: 7d 20 62 32 35 6c 20 5c 7b 53 51 4c 20 6c 6f 67  } b25l \{SQL log
7ce0: 69 63 5c 0d 0a 65 72 72 6f 72 20 6f 72 20 6d 69  ic\..error or mi
7cf0: 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 20 2d  ssing database -
7d00: 2d 20 28 3f 3a 75 6e 61 62 6c 65 20 74 6f 20 75  - (?:unable to u
7d10: 73 65 20 66 75 6e 63 74 69 6f 6e 20 42 61 73 65  se function Base
7d20: 36 34 20 69 6e 20 74 68 65 20 72 65 71 75 65 73  64 in the reques
7d30: 74 65 64 5c 0d 0a 63 6f 6e 74 65 78 74 7c 6e 65  ted\..context|ne
7d40: 65 64 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 61  ed exactly one a
7d50: 72 67 75 6d 65 6e 74 2c 20 67 6f 74 20 33 29 5c  rgument, got 3)\
7d60: 7d 20 5c 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  } \{SQL logic er
7d70: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 5c 0d  ror or missing\.
7d80: 0a 64 61 74 61 62 61 73 65 20 2d 2d 20 6e 6f 20  .database -- no 
7d90: 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 3a 20 42  such function: B
7da0: 61 73 65 36 35 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d  ase65\}\}$}]}...
7db0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
7dc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7de0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7df0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7e00: 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73  ....runTest {tes
7e10: 74 20 76 74 61 62 2d 31 2e 36 20 7b 76 69 72 74  t vtab-1.6 {virt
7e20: 75 61 6c 20 74 61 62 6c 65 20 72 65 6e 61 6d 65  ual table rename
7e30: 20 73 75 70 70 6f 72 74 7d 20 2d 73 65 74 75 70   support} -setup
7e40: 20 7b 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61   {..  set fileNa
7e50: 6d 65 20 76 74 61 62 2d 31 2e 36 2e 64 62 0d 0a  me vtab-1.6.db..
7e60: 7d 20 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74  } -body {..  set
7e70: 20 69 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f   id [object invo
7e80: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
7e90: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
7ea0: 0d 0a 20 20 73 65 74 20 64 61 74 61 53 6f 75 72  ..  set dataSour
7eb0: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  ce [file join [g
7ec0: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74  etDatabaseDirect
7ed0: 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ory] $fileName].
7ee0: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20  ...  set sql(1) 
7ef0: 7b 20 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20  { \..    CREATE 
7f00: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24  VIRTUAL TABLE t$
7f10: 7b 69 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b  {id} USING mod${
7f20: 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20  id}; \..  }.... 
7f30: 20 73 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d   set sql(2) { \.
7f40: 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45  .    ALTER TABLE
7f50: 20 74 24 7b 69 64 7d 20 52 45 4e 41 4d 45 20 54   t${id} RENAME T
7f60: 4f 20 78 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  O x${id}; \..  }
7f70: 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29  ....  set sql(3)
7f80: 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54   { \..    SELECT
7f90: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
7fa0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
7fb0: 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 4f 52  ype = 'table' OR
7fc0: 44 45 52 20 42 59 20 6e 61 6d 65 3b 20 5c 0d 0a  DER BY name; \..
7fd0: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
7fe0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
7ff0: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
8000: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
8010: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
8020: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
8030: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
8040: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
8050: 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67  Lite;..    using
8060: 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65   Eagle._Containe
8070: 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20  rs.Public;....  
8080: 20 20 6e 61 6d 65 73 70 61 63 65 20 5f 44 79 6e    namespace _Dyn
8090: 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b  amic${id}..    {
80a0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 73  ..      public s
80b0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
80c0: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
80d0: 7d 20 3a 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65  } : SQLiteModule
80e0: 4e 6f 6f 70 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  Noop..      {.. 
80f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
8100: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
8110: 69 64 7d 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  id}(string name)
8120: 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61  ..          : ba
8130: 73 65 28 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  se(name)..      
8140: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
8150: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8160: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8170: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
81c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
81d0: 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
81e0: 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a  orCode Create(..
81f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8200: 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
8210: 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ction,..        
8220: 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74    IntPtr pClient
8230: 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
8240: 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 61 72 67 75   string\[\] argu
8250: 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20  ments,..        
8260: 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
8270: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
8280: 0a 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73  .          ref s
8290: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
82a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
82b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
82c0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
82d0: 63 20 3d 20 44 65 63 6c 61 72 65 54 61 62 6c 65  c = DeclareTable
82e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  (..            c
82f0: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 22 43 52 45 41  onnection, "CREA
8300: 54 45 20 54 41 42 4c 45 20 69 67 6e 6f 72 65 64  TE TABLE ignored
8310: 28 78 29 3b 22 2c 20 72 65 66 20 65 72 72 6f 72  (x);", ref error
8320: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8330: 69 66 20 28 72 63 20 21 3d 20 53 51 4c 69 74 65  if (rc != SQLite
8340: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
8350: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8360: 6e 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n rc;....       
8370: 20 20 20 74 61 62 6c 65 20 3d 20 6e 65 77 20 53     table = new S
8380: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
8390: 65 28 61 72 67 75 6d 65 6e 74 73 29 3b 0d 0a 20  e(arguments);.. 
83a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
83b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
83c0: 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  Ok;..        }..
83d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
83e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
8430: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 53 51 4c  lic override SQL
8440: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f 70 65  iteErrorCode Ope
8450: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  n(..          SQ
8460: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
8470: 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20   table,..       
8480: 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72     ref SQLiteVir
8490: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20  tualTableCursor 
84a0: 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  cursor..        
84b0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
84c0: 20 20 20 20 20 20 20 20 20 20 63 75 72 73 6f 72            cursor
84d0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 69 72   = new SQLiteVir
84e0: 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 28  tualTableCursor(
84f0: 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  table);..       
8500: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
8510: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
8520: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8530: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
8540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8580: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75  ////....      pu
8590: 62 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73  blic static clas
85a0: 73 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20  s Test${id}..   
85b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75     {..        pu
85c0: 62 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69  blic static Stri
85d0: 6e 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 29  ngList GetList()
85e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
85f0: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
8600: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
8610: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
8620: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
8630: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
8640: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
8650: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
8660: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
8670: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
8680: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
8690: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
86a0: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
86b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
86c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
86d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
86e0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
86f0: 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74  Module(new SQLit
8700: 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d  eModuleTest${id}
8710: 28 22 6d 6f 64 24 7b 69 64 7d 22 29 29 3b 0d 0a  ("mod${id}"));..
8720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
8730: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8750: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
8760: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
8770: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
8780: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
8790: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
87a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d               com
87b0: 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74  mand.CommandText
87c0: 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c   = "[subst ${sql
87d0: 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20  (1)}]";..       
87e0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
87f0: 41 64 64 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  Add(String.Forma
8800: 74 28 22 7b 30 7d 22 2c 20 63 6f 6d 6d 61 6e 64  t("{0}", command
8810: 2e 45 78 65 63 75 74 65 53 63 61 6c 61 72 28 29  .ExecuteScalar()
8820: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
8830: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8840: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8850: 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
8860: 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
8870: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8880: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e     result.Add(e.
8890: 4d 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20  Message);..     
88a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
88b0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
88c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
88d0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
88e0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
88f0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
8900: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
8910: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
8920: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8930: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43         command.C
8940: 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73  ommandText = "[s
8950: 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d 22  ubst ${sql(3)}]"
8960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8970: 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
8980: 74 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74  teDataReader dat
8990: 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e  aReader = comman
89a0: 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  d.ExecuteReader(
89b0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
89c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
89d0: 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20 28           while (
89e0: 64 61 74 61 52 65 61 64 65 72 2e 52 65 61 64 28  dataReader.Read(
89f0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
8a00: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
8a10: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
8a20: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
8a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8a50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
8a60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8a70: 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
8a80: 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
8a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8aa0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 65 2e 4d    result.Add(e.M
8ab0: 65 73 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  essage);..      
8ac0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8ad0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
8ae0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8af0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
8b00: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
8b10: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
8b20: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
8b30: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8b40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8b50: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
8b60: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
8b70: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
8b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8b90: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 53 74 72    result.Add(Str
8ba0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 22  ing.Format("{0}"
8bb0: 2c 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74  , command.Execut
8bc0: 65 53 63 61 6c 61 72 28 29 29 29 3b 0d 0a 20 20  eScalar()));..  
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8be0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8bf0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
8c00: 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
8c10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
8c30: 6c 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65  lt.Add(e.Message
8c40: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8c50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8c60: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
8c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8c80: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
8c90: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
8ca0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
8cb0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54  command.CommandT
8cf0: 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b  ext = "[subst ${
8d00: 73 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20  sql(3)}]";....  
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
8d20: 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61 52  ing (SQLiteDataR
8d30: 65 61 64 65 72 20 64 61 74 61 52 65 61 64 65 72  eader dataReader
8d40: 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75   = command.Execu
8d50: 74 65 52 65 61 64 65 72 28 29 29 0d 0a 20 20 20  teReader())..   
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d80: 20 20 77 68 69 6c 65 20 28 64 61 74 61 52 65 61    while (dataRea
8d90: 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20  der.Read())..   
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8db0: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
8dc0: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
8dd0: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
8de0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8df0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8e00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8e10: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
8e20: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
8e30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8e40: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
8e50: 74 2e 41 64 64 28 65 2e 4d 65 73 73 61 67 65 29  t.Add(e.Message)
8e60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8e70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8e80: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
8e90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
8ea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
8eb0: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
8ec0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8ed0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8f20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
8f30: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
8f40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8f50: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
8f60: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
8f70: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
8f80: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
8f90: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
8fa0: 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d  ors [list System
8fb0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
8fc0: 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a   Eagle.dll]]....
8fd0: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
8fe0: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
8ff0: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
9000: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
9010: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
9020: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
9030: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
9040: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
9050: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
9060: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
9070: 69 64 7d 20 47 65 74 4c 69 73 74 0d 0a 20 20 20  id} GetList..   
9080: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
9090: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
90a0: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
90b0: 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a  esult $result]..
90c0: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
90d0: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
90e0: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
90f0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
9100: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
9110: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
9120: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
9130: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
9140: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
9150: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
9160: 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f   monoCrash211 co
9170: 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70  mmand.sql\..comp
9180: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
9190: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
91a0: 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  te\..defineConst
91b0: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
91c0: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
91d0: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
91e0: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
91f0: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
9200: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  sult [normalizeV
9210: 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  tabResult {^Ok\.
9220: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
9230: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
9240: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
9250: 7d 20 30 20 5c 7b 5c 7b 5c 7d 20 74 5c 64 2b 20  } 0 \{\{\} t\d+ 
9260: 5c 7b 5c 7d 20 78 5c 64 2b 5c 7d 24 7d 5d 7d 0d  \{\} x\d+\}$}]}.
9270: 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ...#############
9280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92c0: 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74  ##....runTest {t
92d0: 65 73 74 20 76 74 61 62 2d 31 2e 37 20 7b 76 69  est vtab-1.7 {vi
92e0: 72 74 75 61 6c 20 74 61 62 6c 65 20 78 42 65 73  rtual table xBes
92f0: 74 49 6e 64 65 78 20 6d 61 72 73 68 61 6c 6c 69  tIndex marshalli
9300: 6e 67 20 28 31 29 7d 20 2d 73 65 74 75 70 20 7b  ng (1)} -setup {
9310: 0d 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65  ..  set fileName
9320: 20 76 74 61 62 2d 31 2e 37 2e 64 62 0d 0a 7d 20   vtab-1.7.db..} 
9330: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
9340: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
9350: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
9360: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
9370: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
9380: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
9390: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
93a0: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
93b0: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
93c0: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  \..    CREATE TA
93d0: 42 4c 45 20 74 24 7b 69 64 7d 28 79 20 43 48 41  BLE t${id}(y CHA
93e0: 52 28 31 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50  R(10) NOT NULL P
93f0: 52 49 4d 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a  RIMARY KEY); \..
9400: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
9410: 41 4c 20 54 41 42 4c 45 20 75 24 7b 69 64 7d 20  AL TABLE u${id} 
9420: 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20  USING mod${id}; 
9430: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20  \..  }....  set 
9440: 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20  sql(2) { \..    
9450: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 24 7b 69  INSERT INTO t${i
9460: 64 7d 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d  d} SELECT x FROM
9470: 20 75 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d   u${id}; \..  }.
9480: 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 33 29 20  ...  set sql(3) 
9490: 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43 54 20  { \..    SELECT 
94a0: 76 24 7b 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24  v${id}.y FROM t$
94b0: 7b 69 64 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54  {id} v${id} LEFT
94c0: 20 4f 55 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20   OUTER JOIN \.. 
94d0: 20 20 20 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b     u${id} ON u${
94e0: 69 64 7d 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79  id}.x = v${id}.y
94f0: 20 57 48 45 52 45 20 75 24 7b 69 64 7d 2e 78 20   WHERE u${id}.x 
9500: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20  IS NOT NULL \.. 
9510: 20 20 20 4f 52 44 45 52 20 42 59 20 76 24 7b 69     ORDER BY v${i
9520: 64 7d 2e 79 20 44 45 53 43 3b 20 5c 0d 0a 20 20  d}.y DESC; \..  
9530: 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  }....  unset -no
9540: 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73  complain results
9550: 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74   errors....  set
9560: 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53   code [compileCS
9570: 68 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20  harpWith [subst 
9580: 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73  {..    using Sys
9590: 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20  tem;..    using 
95a0: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
95b0: 6e 73 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  ns;..    using S
95c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
95d0: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
95e0: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
95f0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
9600: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
9610: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
9620: 20 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c       public seal
9630: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ed class SQLiteM
9640: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 3a  oduleTest${id} :
9650: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45 6e 75   SQLiteModuleEnu
9660: 6d 65 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 7b  merable..      {
9670: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9680: 20 73 74 72 69 6e 67 20 52 65 73 75 6c 74 3b 0d   string Result;.
9690: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
96f0: 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64 75 6c  blic SQLiteModul
9700: 65 54 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20  eTest${id}(..   
9710: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
9720: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 49  me,..          I
9730: 45 6e 75 6d 65 72 61 62 6c 65 20 65 6e 75 6d 65  Enumerable enume
9740: 72 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  rable..         
9750: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20   )..          : 
9760: 62 61 73 65 28 6e 61 6d 65 2c 20 65 6e 75 6d 65  base(name, enume
9770: 72 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  rable)..        
9780: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
9790: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
97a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
97b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9800: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9810: 20 2f 2f 20 42 55 47 46 49 58 3a 20 54 68 69 73   // BUGFIX: This
9820: 20 6d 65 74 68 6f 64 20 68 65 6c 70 73 20 76 65   method helps ve
9830: 72 69 66 79 20 74 69 63 6b 65 74 20 5c 5b 35 36  rify ticket \[56
9840: 66 35 31 31 64 32 36 38 5c 5d 20 69 73 20 66 69  f511d268\] is fi
9850: 78 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  xed...        //
9860: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
9870: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
9880: 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74 49 6e  ErrorCode BestIn
9890: 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
98a0: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
98b0: 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
98c0: 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65 78       SQLiteIndex
98d0: 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
98e0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
98f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
9900: 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
9910: 74 72 61 69 6e 74 55 73 61 67 65 73 2e 4c 65 6e  traintUsages.Len
9920: 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  gth > 0)..      
9930: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9940: 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74     if (index.Out
9950: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
9960: 73 61 67 65 73 5c 5b 30 5c 5d 20 3d 3d 20 6e 75  sages\[0\] == nu
9970: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9980: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
9990: 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28 22  umentException("
99a0: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
99b0: 5c 5b 30 5c 5d 20 69 73 20 6e 75 6c 6c 22 29 3b  \[0\] is null");
99c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
99d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
99e0: 20 20 52 65 73 75 6c 74 20 3d 20 22 43 6f 6e 73    Result = "Cons
99f0: 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73 20  traintUsages is 
9a00: 4f 4b 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  OK";..          
9a10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  }....          r
9a20: 65 74 75 72 6e 20 62 61 73 65 2e 42 65 73 74 49  eturn base.BestI
9a30: 6e 64 65 78 28 74 61 62 6c 65 2c 20 69 6e 64 65  ndex(table, inde
9a40: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x);..        }..
9a50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9a60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9ab0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9ac0: 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64  c class Test${id
9ad0: 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  }..      {..    
9ae0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9af0: 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65 74  c StringList Get
9b00: 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72 69  List(params stri
9b10: 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29 0d  ng\[\] strings).
9b20: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9b30: 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73 74        StringList
9b40: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
9b50: 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
9b60: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
9b70: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
9b80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65   connection = ne
9b90: 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
9ba0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
9bb0: 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d     "Data Source=
9bc0: 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67  ${dataSource};[g
9bd0: 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d  etFlagsProperty]
9be0: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b  "))..          {
9bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
9c00: 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b  nnection.Open();
9c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c20: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74  SQLiteModuleTest
9c30: 24 7b 69 64 7d 20 6d 6f 64 75 6c 65 20 3d 20 6e  ${id} module = n
9c40: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54  ew SQLiteModuleT
9c50: 65 73 74 24 7b 69 64 7d 28 0d 0a 20 20 20 20 20  est${id}(..     
9c60: 20 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24             "mod$
9c70: 7b 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 29 3b  {id}", strings);
9c80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c90: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74  connection.Creat
9ca0: 65 4d 6f 64 75 6c 65 28 6d 6f 64 75 6c 65 29 3b  eModule(module);
9cb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9cc0: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d  using (SQLiteCom
9cd0: 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63  mand command = c
9ce0: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
9cf0: 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20  Command())..    
9d00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9d10: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
9d20: 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22  .CommandText = "
9d30: 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 31 29 7d  [subst ${sql(1)}
9d40: 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]";..           
9d50: 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28 63 6f     result.Add(co
9d60: 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 4e 6f 6e  mmand.ExecuteNon
9d70: 51 75 65 72 79 28 29 2e 54 6f 53 74 72 69 6e 67  Query().ToString
9d80: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ());..          
9d90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9da0: 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
9db0: 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20  Command command 
9dc0: 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65  = connection.Cre
9dd0: 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20  ateCommand()).. 
9de0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d              comm
9e00: 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20  and.CommandText 
9e10: 3d 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28  = "[subst ${sql(
9e20: 32 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20  2)}]";..        
9e30: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64        result.Add
9e40: 28 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65  (command.Execute
9e50: 4e 6f 6e 51 75 65 72 79 28 29 2e 54 6f 53 74 72  NonQuery().ToStr
9e60: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
9e70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9e80: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
9e90: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
9ea0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
9eb0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
9ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
9ee0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
9ef0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
9f00: 71 6c 28 33 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20  ql(3)}]";....   
9f10: 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
9f20: 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64   (SQLiteDataRead
9f30: 65 72 20 64 61 74 61 52 65 61 64 65 72 20 3d 20  er dataReader = 
9f40: 63 6f 6d 6d 61 6e 64 2e 45 78 65 63 75 74 65 52  command.ExecuteR
9f50: 65 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20  eader())..      
9f60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9f70: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
9f80: 20 28 64 61 74 61 52 65 61 64 65 72 2e 52 65 61   (dataReader.Rea
9f90: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
9fa0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
9fb0: 64 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30  dd(dataReader\[0
9fc0: 5c 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  \].ToString());.
9fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9ff0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
a000: 65 73 75 6c 74 2e 41 64 64 28 6d 6f 64 75 6c 65  esult.Add(module
a010: 2e 52 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20  .Result);..     
a020: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
a030: 6e 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  n.Close();..    
a040: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a050: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
a060: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
a070: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
a080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
a0d0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
a0e0: 4d 61 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20  Main()..        
a0f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20  {..          // 
a100: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
a110: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
a120: 0a 20 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75  .    }..  }] tru
a130: 65 20 74 72 75 65 20 74 72 75 65 20 72 65 73 75  e true true resu
a140: 6c 74 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74  lts errors [list
a150: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
a160: 69 74 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c  ite.dll Eagle.dl
a170: 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63  l]]....  list $c
a180: 6f 64 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a  ode $results \..
a190: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e        [expr {[in
a1a0: 66 6f 20 65 78 69 73 74 73 20 65 72 72 6f 72 73  fo exists errors
a1b0: 5d 20 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22  ] ? $errors : ""
a1c0: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70  }] \..      [exp
a1d0: 72 20 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22  r {$code eq "Ok"
a1e0: 20 3f 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20   ? [catch {..   
a1f0: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
a200: 6b 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d  ke _Dynamic${id}
a210: 2e 54 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69  .Test${id} GetLi
a220: 73 74 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  st one two three
a230: 20 34 20 35 2e 30 0d 0a 20 20 20 20 20 20 7d 20   4 5.0..      } 
a240: 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74 20 72  result] : [set r
a250: 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e 6f 72  esult ""]}] [nor
a260: 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74  malizeVtabResult
a270: 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d 63 6c   $result]..} -cl
a280: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65 61 6e  eanup {..  clean
a290: 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  upDb $fileName..
a2a0: 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ..  unset -nocom
a2b0: 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63 6f 64  plain result cod
a2c0: 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  e results errors
a2d0: 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63 65 20   sql dataSource 
a2e0: 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d 20 2d  id fileName..} -
a2f0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61 67  constraints {eag
a300: 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65 63  le command.objec
a310: 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f 6e 6f  t monoBug28 mono
a320: 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61 6e 64  Crash211 command
a330: 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65 2e 44  .sql\..compile.D
a340: 41 54 41 20 53 51 4c 69 74 65 20 53 79 73 74 65  ATA SQLite Syste
a350: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 0d 0a  m.Data.SQLite\..
a360: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
a370: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
a380: 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  e.INTEROP_VIRTUA
a390: 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c 65 43  L_TABLE compileC
a3a0: 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20 5c 0d  Sharp} -match \.
a3b0: 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c 74 20  .regexp -result 
a3c0: 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65  [normalizeVtabRe
a3d0: 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79 73 74  sult {^Ok\..Syst
a3e0: 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d 70 69  em#CodeDom#Compi
a3f0: 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65 73 75  ler#CompilerResu
a400: 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30 20 5c  lts#\d+ \{\} 0 \
a410: 7b 30 20 35 20 74 77 6f 20 74 68 72 65 65 20 6f  {0 5 two three o
a420: 6e 65 20 35 5c 2e 30 5c 0d 0a 34 20 5c 7b 43 6f  ne 5\.0\..4 \{Co
a430: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 69  nstraintUsages i
a440: 73 20 4f 4b 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a  s OK\}\}$}]}....
a450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
a4a0: 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74  ...runTest {test
a4b0: 20 76 74 61 62 2d 31 2e 38 20 7b 76 69 72 74 75   vtab-1.8 {virtu
a4c0: 61 6c 20 74 61 62 6c 65 20 78 42 65 73 74 49 6e  al table xBestIn
a4d0: 64 65 78 20 6d 61 72 73 68 61 6c 6c 69 6e 67 20  dex marshalling 
a4e0: 28 32 29 7d 20 2d 73 65 74 75 70 20 7b 0d 0a 20  (2)} -setup {.. 
a4f0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 76 74   set fileName vt
a500: 61 62 2d 31 2e 38 2e 64 62 0d 0a 7d 20 2d 62 6f  ab-1.8.db..} -bo
a510: 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64 20 5b  dy {..  set id [
a520: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
a530: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
a540: 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20 20 73  ive NextId]..  s
a550: 65 74 20 64 61 74 61 53 6f 75 72 63 65 20 5b 66  et dataSource [f
a560: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
a570: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory] 
a580: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName]....  
a590: 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c 0d 0a  set sql(1) { \..
a5a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
a5b0: 20 74 24 7b 69 64 7d 28 79 20 43 48 41 52 28 31   t${id}(y CHAR(1
a5c0: 30 29 20 4e 4f 54 20 4e 55 4c 4c 20 50 52 49 4d  0) NOT NULL PRIM
a5d0: 41 52 59 20 4b 45 59 29 3b 20 5c 0d 0a 20 20 20  ARY KEY); \..   
a5e0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
a5f0: 54 41 42 4c 45 20 75 24 7b 69 64 7d 20 55 53 49  TABLE u${id} USI
a600: 4e 47 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a  NG mod${id}; \..
a610: 20 20 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c    }....  set sql
a620: 28 32 29 20 7b 20 5c 0d 0a 20 20 20 20 49 4e 53  (2) { \..    INS
a630: 45 52 54 20 49 4e 54 4f 20 74 24 7b 69 64 7d 20  ERT INTO t${id} 
a640: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 75 24  SELECT x FROM u$
a650: 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a  {id}; \..  }....
a660: 20 20 73 65 74 20 73 71 6c 28 33 29 20 7b 20 5c    set sql(3) { \
a670: 0d 0a 20 20 20 20 53 45 4c 45 43 54 20 76 24 7b  ..    SELECT v${
a680: 69 64 7d 2e 79 20 46 52 4f 4d 20 74 24 7b 69 64  id}.y FROM t${id
a690: 7d 20 76 24 7b 69 64 7d 20 4c 45 46 54 20 4f 55  } v${id} LEFT OU
a6a0: 54 45 52 20 4a 4f 49 4e 20 5c 0d 0a 20 20 20 20  TER JOIN \..    
a6b0: 75 24 7b 69 64 7d 20 4f 4e 20 75 24 7b 69 64 7d  u${id} ON u${id}
a6c0: 2e 78 20 3d 20 76 24 7b 69 64 7d 2e 79 20 57 48  .x = v${id}.y WH
a6d0: 45 52 45 20 75 24 7b 69 64 7d 2e 78 20 49 53 20  ERE u${id}.x IS 
a6e0: 4e 4f 54 20 4e 55 4c 4c 20 5c 0d 0a 20 20 20 20  NOT NULL \..    
a6f0: 41 4e 44 20 75 24 7b 69 64 7d 2e 78 20 42 45 54  AND u${id}.x BET
a700: 57 45 45 4e 20 27 6f 6e 65 27 20 61 6e 64 20 27  WEEN 'one' and '
a710: 74 68 72 65 65 27 20 4f 52 44 45 52 20 42 59 20  three' ORDER BY 
a720: 75 24 7b 69 64 7d 2e 78 20 41 53 43 2c 20 5c 0d  u${id}.x ASC, \.
a730: 0a 20 20 20 20 75 24 7b 69 64 7d 2e 78 20 44 45  .    u${id}.x DE
a740: 53 43 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  SC; \..  }....  
a750: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
a760: 6e 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  n results errors
a770: 0d 0a 0d 0a 20 20 73 65 74 20 63 6f 64 65 20 5b  ....  set code [
a780: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
a790: 68 20 5b 73 75 62 73 74 20 7b 0d 0a 20 20 20 20  h [subst {..    
a7a0: 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0d 0a 20  using System;.. 
a7b0: 20 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e     using System.
a7c0: 43 6f 6c 6c 65 63 74 69 6f 6e 73 3b 0d 0a 20 20  Collections;..  
a7d0: 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44    using System.D
a7e0: 61 74 61 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20  ata.SQLite;..   
a7f0: 20 75 73 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f   using Eagle._Co
a800: 6e 74 61 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b  ntainers.Public;
a810: 0d 0a 0d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  ....    namespac
a820: 65 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d  e _Dynamic${id}.
a830: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 70 75  .    {..      pu
a840: 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73  blic sealed clas
a850: 73 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 54 65  s SQLiteModuleTe
a860: 73 74 24 7b 69 64 7d 20 3a 20 53 51 4c 69 74 65  st${id} : SQLite
a870: 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c 65  ModuleEnumerable
a880: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
a890: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
a8a0: 20 52 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20   Result;....    
a8b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a900: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
a910: 4c 69 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b  LiteModuleTest${
a920: 69 64 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  id}(..          
a930: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
a940: 20 20 20 20 20 20 20 20 49 45 6e 75 6d 65 72 61          IEnumera
a950: 62 6c 65 20 65 6e 75 6d 65 72 61 62 6c 65 0d 0a  ble enumerable..
a960: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a970: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 6e 61         : base(na
a980: 6d 65 2c 20 65 6e 75 6d 65 72 61 62 6c 65 29 0d  me, enumerable).
a990: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
a9a0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
a9b0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
a9c0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
aa20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47  ..        // BUG
aa30: 46 49 58 3a 20 54 68 69 73 20 6d 65 74 68 6f 64  FIX: This method
aa40: 20 68 65 6c 70 73 20 76 65 72 69 66 79 20 74 69   helps verify ti
aa50: 63 6b 65 74 20 5c 5b 35 36 66 35 31 31 64 32 36  cket \[56f511d26
aa60: 38 5c 5d 20 69 73 20 66 69 78 65 64 2e 0d 0a 20  8\] is fixed... 
aa70: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
aa80: 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69     public overri
aa90: 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
aaa0: 64 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20  de BestIndex(.. 
aab0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
aac0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
aad0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  e,..          SQ
aae0: 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d  LiteIndex index.
aaf0: 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20  .          )..  
ab00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ab10: 20 20 20 69 66 20 28 69 6e 64 65 78 2e 4f 75 74     if (index.Out
ab20: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
ab30: 73 61 67 65 73 2e 4c 65 6e 67 74 68 20 3e 20 30  sages.Length > 0
ab40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ab60: 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f  index.Outputs.Co
ab70: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 5c 5b  nstraintUsages\[
ab80: 30 5c 5d 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  0\] == null)..  
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
aba0: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
abb0: 63 65 70 74 69 6f 6e 28 22 43 6f 6e 73 74 72 61  ception("Constra
abc0: 69 6e 74 55 73 61 67 65 73 5c 5b 30 5c 5d 20 69  intUsages\[0\] i
abd0: 73 20 6e 75 6c 6c 22 29 3b 0d 0a 20 20 20 20 20  s null");..     
abe0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
abf0: 20 20 20 20 20 20 20 20 20 20 20 52 65 73 75 6c             Resul
ac00: 74 20 3d 20 22 43 6f 6e 73 74 72 61 69 6e 74 55  t = "ConstraintU
ac10: 73 61 67 65 73 20 69 73 20 4f 4b 22 3b 0d 0a 20  sages is OK";.. 
ac20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ac30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62          return b
ac40: 61 73 65 2e 42 65 73 74 49 6e 64 65 78 28 74 61  ase.BestIndex(ta
ac50: 62 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  ble, index);..  
ac60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
ac70: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 70 75 62  ///....      pub
acd0: 6c 69 63 20 73 74 61 74 69 63 20 63 6c 61 73 73  lic static class
ace0: 20 54 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20   Test${id}..    
acf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62    {..        pub
ad00: 6c 69 63 20 73 74 61 74 69 63 20 53 74 72 69 6e  lic static Strin
ad10: 67 4c 69 73 74 20 47 65 74 4c 69 73 74 28 70 61  gList GetList(pa
ad20: 72 61 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20  rams string\[\] 
ad30: 73 74 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20  strings)..      
ad40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
ad50: 74 72 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74  tringList result
ad60: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
ad70: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
ad80: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
ad90: 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63  onnection connec
ada0: 74 69 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74  tion = new SQLit
adb0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20  eConnection(..  
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74              "Dat
add0: 61 20 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53  a Source=${dataS
ade0: 6f 75 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73  ource};[getFlags
adf0: 50 72 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20  Property]"))..  
ae00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ae10: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
ae20: 6e 2e 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20  n.Open();....   
ae30: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
ae40: 6f 64 75 6c 65 54 65 73 74 24 7b 69 64 7d 20 6d  oduleTest${id} m
ae50: 6f 64 75 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69  odule = new SQLi
ae60: 74 65 4d 6f 64 75 6c 65 54 65 73 74 24 7b 69 64  teModuleTest${id
ae70: 7d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  }(..            
ae80: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
ae90: 73 74 72 69 6e 67 73 29 3b 0d 0a 0d 0a 20 20 20  strings);....   
aea0: 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74           connect
aeb0: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
aec0: 28 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20  (module);....   
aed0: 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
aee0: 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f  SQLiteCommand co
aef0: 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69  mmand = connecti
af00: 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  on.CreateCommand
af10: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
af20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
af30: 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e    command.Comman
af40: 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74 20  dText = "[subst 
af50: 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20  ${sql(1)}]";..  
af60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
af70: 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e 45  lt.Add(command.E
af80: 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29  xecuteNonQuery()
af90: 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
afa0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
afc0: 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64  g (SQLiteCommand
afd0: 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65   command = conne
afe0: 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d  ction.CreateComm
aff0: 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  and())..        
b000: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b010: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d       command.Com
b020: 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62  mandText = "[sub
b030: 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b 0d  st ${sql(2)}]";.
b040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
b050: 65 73 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e  esult.Add(comman
b060: 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
b070: 79 28 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  y().ToString());
b080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b090: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
b0a0: 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
b0b0: 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f  and command = co
b0c0: 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43  nnection.CreateC
b0d0: 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20  ommand())..     
b0e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b0f0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e          command.
b100: 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b  CommandText = "[
b110: 73 75 62 73 74 20 24 7b 73 71 6c 28 33 29 7d 5d  subst ${sql(3)}]
b120: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
b130: 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
b140: 65 44 61 74 61 52 65 61 64 65 72 20 64 61 74 61  eDataReader data
b150: 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64  Reader = command
b160: 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
b170: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b190: 20 20 20 20 77 68 69 6c 65 20 28 64 61 74 61 52      while (dataR
b1a0: 65 61 64 65 72 2e 52 65 61 64 28 29 29 0d 0a 20  eader.Read()).. 
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1c0: 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74 61   result.Add(data
b1d0: 52 65 61 64 65 72 5c 5b 30 5c 5d 2e 54 6f 53 74  Reader\[0\].ToSt
b1e0: 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
b1f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b200: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b210: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41          result.A
b220: 64 64 28 6d 6f 64 75 6c 65 2e 52 65 73 75 6c 74  dd(module.Result
b230: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b240: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 6f 73 65  connection.Close
b250: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
b260: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
b270: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
b280: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b290: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b2e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
b2f0: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 29 0d  tic void Main().
b300: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
b310: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
b320: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
b330: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
b340: 0a 20 20 7d 5d 20 74 72 75 65 20 74 72 75 65 20  .  }] true true 
b350: 74 72 75 65 20 72 65 73 75 6c 74 73 20 65 72 72  true results err
b360: 6f 72 73 20 5b 6c 69 73 74 20 53 79 73 74 65 6d  ors [list System
b370: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
b380: 20 45 61 67 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a   Eagle.dll]]....
b390: 20 20 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65    list $code $re
b3a0: 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 5b  sults \..      [
b3b0: 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73  expr {[info exis
b3c0: 74 73 20 65 72 72 6f 72 73 5d 20 3f 20 24 65 72  ts errors] ? $er
b3d0: 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  rors : ""}] \.. 
b3e0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 63 6f 64       [expr {$cod
b3f0: 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b 63 61 74  e eq "Ok" ? [cat
b400: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
b410: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f 44 79 6e  ject invoke _Dyn
b420: 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73 74 24 7b  amic${id}.Test${
b430: 69 64 7d 20 47 65 74 4c 69 73 74 20 6f 6e 65 20  id} GetList one 
b440: 74 77 6f 20 74 68 72 65 65 20 34 20 35 2e 30 0d  two three 4 5.0.
b450: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
b460: 20 3a 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22   : [set result "
b470: 22 5d 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  "]}] [normalizeV
b480: 74 61 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c  tabResult $resul
b490: 74 5d 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b  t]..} -cleanup {
b4a0: 0d 0a 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66  ..  cleanupDb $f
b4b0: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73  ileName....  uns
b4c0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72  et -nocomplain r
b4d0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c  esult code resul
b4e0: 74 73 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61  ts errors sql da
b4f0: 74 61 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65  taSource id file
b500: 4e 61 6d 65 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61  Name..} -constra
b510: 69 6e 74 73 20 7b 65 61 67 6c 65 20 63 6f 6d 6d  ints {eagle comm
b520: 61 6e 64 2e 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42  and.object monoB
b530: 75 67 32 38 20 6d 6f 6e 6f 43 72 61 73 68 32 31  ug28 monoCrash21
b540: 31 20 63 6f 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a  1 command.sql\..
b550: 63 6f 6d 70 69 6c 65 2e 44 41 54 41 20 53 51 4c  compile.DATA SQL
b560: 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ite System.Data.
b570: 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65 43  SQLite\..defineC
b580: 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
b590: 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52  ata.SQLite.INTER
b5a0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
b5b0: 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 7d 20   compileCSharp} 
b5c0: 2d 6d 61 74 63 68 20 5c 0d 0a 72 65 67 65 78 70  -match \..regexp
b5d0: 20 2d 72 65 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c   -result [normal
b5e0: 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20 7b 5e  izeVtabResult {^
b5f0: 4f 6b 5c 0d 0a 53 79 73 74 65 6d 23 43 6f 64 65  Ok\..System#Code
b600: 44 6f 6d 23 43 6f 6d 70 69 6c 65 72 23 43 6f 6d  Dom#Compiler#Com
b610: 70 69 6c 65 72 52 65 73 75 6c 74 73 23 5c 64 2b  pilerResults#\d+
b620: 20 5c 7b 5c 7d 20 30 20 5c 7b 30 20 35 20 6f 6e   \{\} 0 \{0 5 on
b630: 65 20 74 68 72 65 65 5c 0d 0a 5c 7b 43 6f 6e 73  e three\..\{Cons
b640: 74 72 61 69 6e 74 55 73 61 67 65 73 20 69 73 20  traintUsages is 
b650: 4f 4b 5c 7d 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  OK\}\}$}]}....##
b660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b6a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
b6b0: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
b6c0: 74 61 62 2d 31 2e 39 20 7b 49 45 6e 75 6d 65 72  tab-1.9 {IEnumer
b6d0: 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74 61 62  able virtual tab
b6e0: 6c 65 20 77 2f 6c 61 72 67 65 20 62 79 74 65 20  le w/large byte 
b6f0: 61 72 72 61 79 7d 20 2d 73 65 74 75 70 20 7b 0d  array} -setup {.
b700: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
b710: 76 74 61 62 2d 31 2e 39 2e 64 62 0d 0a 7d 20 2d  vtab-1.9.db..} -
b720: 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69 64  body {..  set id
b730: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
b740: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
b750: 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a 20  ctive NextId].. 
b760: 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65 20   set dataSource 
b770: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
b780: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
b790: 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  ] $fileName]....
b7a0: 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20 5c    set sql(1) { \
b7b0: 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ..    CREATE VIR
b7c0: 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69 64  TUAL TABLE t${id
b7d0: 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64 7d  } USING mod${id}
b7e0: 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73 65  ; \..  }....  se
b7f0: 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20 20  t sql(2) { \..  
b800: 20 20 53 45 4c 45 43 54 20 53 55 4d 28 78 29 20    SELECT SUM(x) 
b810: 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a  FROM t${id}; \..
b820: 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d    }....  unset -
b830: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
b840: 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73  ts errors....  s
b850: 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65  et code [compile
b860: 43 53 68 61 72 70 57 69 74 68 20 5b 73 75 62 73  CSharpWith [subs
b870: 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  t {..    using S
b880: 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e  ystem;..    usin
b890: 67 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  g System.Data.SQ
b8a0: 4c 69 74 65 3b 0d 0a 0d 0a 20 20 20 20 6e 61 6d  Lite;....    nam
b8b0: 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69 63 24  espace _Dynamic$
b8c0: 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  {id}..    {..   
b8d0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
b8e0: 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69 64 7d   class Test${id}
b8f0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
b900: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
b910: 20 6f 62 6a 65 63 74 20 47 65 74 53 75 6d 28 29   object GetSum()
b920: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b930: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
b940: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
b950: 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20  onnection = new 
b960: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
b970: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b980: 20 22 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   "Data Source=${
b990: 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b 67 65 74  dataSource};[get
b9a0: 46 6c 61 67 73 50 72 6f 70 65 72 74 79 5d 22 29  FlagsProperty]")
b9b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
b9d0: 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29 3b 0d 0a  ection.Open();..
b9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
b9f0: 74 65 5c 5b 5c 5d 20 62 79 74 65 73 20 3d 20 6e  te\[\] bytes = n
ba00: 65 77 20 62 79 74 65 5c 5b 31 30 34 38 35 37 36  ew byte\[1048576
ba10: 5c 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \];..           
ba20: 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 2e 4e 65   new Random().Ne
ba30: 78 74 42 79 74 65 73 28 62 79 74 65 73 29 3b 0d  xtBytes(bytes);.
ba40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ...            c
ba50: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61 74 65  onnection.Create
ba60: 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c 69 74  Module(new SQLit
ba70: 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61 62 6c  eModuleEnumerabl
ba80: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
ba90: 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20 62 79    "mod${id}", by
baa0: 74 65 73 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tes));....      
bab0: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
bac0: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
bad0: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
bae0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
baf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
bb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
bb10: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
bb20: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
bb30: 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(1)}]";..     
bb40: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
bb50: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
bb60: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
bb70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bb80: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
bb90: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
bba0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
bbb0: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
bbc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bbd0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
bbe0: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
bbf0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32   "[subst ${sql(2
bc00: 29 7d 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  )}]";..         
bc10: 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 6d       return comm
bc20: 61 6e 64 2e 45 78 65 63 75 74 65 53 63 61 6c 61  and.ExecuteScala
bc30: 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
bc40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
bc50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
bc60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bcb0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
bcc0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61 69   static void Mai
bcd0: 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n()..        {..
bce0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
bcf0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
bd00: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..  
bd10: 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20 74    }..  }] true t
bd20: 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74 73  rue true results
bd30: 20 65 72 72 6f 72 73 20 53 79 73 74 65 6d 2e 44   errors System.D
bd40: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d  ata.SQLite.dll].
bd50: 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64 65 20  ...  list $code 
bd60: 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20  $results \..    
bd70: 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65    [expr {[info e
bd80: 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20 3f 20  xists errors] ? 
bd90: 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d 20 5c  $errors : ""}] \
bda0: 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24  ..      [expr {$
bdb0: 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f 20 5b  code eq "Ok" ? [
bdc0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
bdd0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5f   object invoke _
bde0: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54 65 73  Dynamic${id}.Tes
bdf0: 74 24 7b 69 64 7d 20 47 65 74 53 75 6d 0d 0a 20  t${id} GetSum.. 
be00: 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a       } result] :
be10: 20 5b 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d   [set result ""]
be20: 7d 5d 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61  }] [normalizeVta
be30: 62 52 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d  bResult $result]
be40: 0d 0a 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a  ..} -cleanup {..
be50: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil
be60: 65 4e 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74  eName....  unset
be70: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73   -nocomplain res
be80: 75 6c 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73  ult code results
be90: 20 65 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61   errors sql data
bea0: 53 6f 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61  Source id fileNa
beb0: 6d 65 0d 0a 7d 20 2d 74 69 6d 65 20 74 72 75 65  me..} -time true
bec0: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
bed0: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
bee0: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f  ect monoBug28 mo
bef0: 6e 6f 43 72 61 73 68 32 31 31 5c 0d 0a 63 6f 6d  noCrash211\..com
bf00: 6d 61 6e 64 2e 73 71 6c 20 63 6f 6d 70 69 6c 65  mand.sql compile
bf10: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
bf20: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
bf30: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
bf40: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
bf50: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
bf60: 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c  UAL_TABLE compil
bf70: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
bf80: 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c  \..regexp -resul
bf90: 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  t [normalizeVtab
bfa0: 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  Result {^Ok\..Sy
bfb0: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
bfc0: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
bfd0: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
bfe0: 20 28 3f 3a 2d 29 3f 5c 64 2b 24 7d 5d 7d 0d 0a   (?:-)?\d+$}]}..
bff0: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
c000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
c040: 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b 74 65  #....runTest {te
c050: 73 74 20 76 74 61 62 2d 31 2e 31 30 20 7b 76 69  st vtab-1.10 {vi
c060: 72 74 75 61 6c 20 74 61 62 6c 65 20 78 52 6f 77  rtual table xRow
c070: 49 64 20 75 6e 69 71 75 65 6e 65 73 73 7d 20 2d  Id uniqueness} -
c080: 73 65 74 75 70 20 7b 0d 0a 20 20 73 65 74 20 66  setup {..  set f
c090: 69 6c 65 4e 61 6d 65 20 76 74 61 62 2d 31 2e 31  ileName vtab-1.1
c0a0: 30 2e 64 62 0d 0a 7d 20 2d 62 6f 64 79 20 7b 0d  0.db..} -body {.
c0b0: 0a 20 20 73 65 74 20 69 64 20 5b 6f 62 6a 65 63  .  set id [objec
c0c0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72  t invoke Interpr
c0d0: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e  eter.GetActive N
c0e0: 65 78 74 49 64 5d 0d 0a 20 20 73 65 74 20 64 61  extId]..  set da
c0f0: 74 61 53 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  taSource [file j
c100: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
c110: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65  Directory] $file
c120: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 73 65 74 20 73  Name]....  set s
c130: 71 6c 28 31 29 20 7b 20 5c 0d 0a 20 20 20 20 43  ql(1) { \..    C
c140: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
c150: 42 4c 45 20 74 24 7b 69 64 7d 20 55 53 49 4e 47  BLE t${id} USING
c160: 20 6d 6f 64 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20   mod${id}; \..  
c170: 7d 0d 0a 0d 0a 20 20 73 65 74 20 73 71 6c 28 32  }....  set sql(2
c180: 29 20 7b 20 5c 0d 0a 20 20 20 20 53 45 4c 45 43  ) { \..    SELEC
c190: 54 20 43 41 53 45 20 57 48 45 4e 20 30 20 54 48  T CASE WHEN 0 TH
c1a0: 45 4e 20 72 6f 77 49 64 20 45 4c 53 45 20 72 6f  EN rowId ELSE ro
c1b0: 77 49 64 20 45 4e 44 2c 20 5c 0d 0a 20 20 20 20  wId END, \..    
c1c0: 20 20 20 20 20 20 20 43 41 53 45 20 57 48 45 4e         CASE WHEN
c1d0: 20 31 20 54 48 45 4e 20 72 6f 77 49 64 20 45 4c   1 THEN rowId EL
c1e0: 53 45 20 72 6f 77 49 64 20 45 4e 44 20 46 52 4f  SE rowId END FRO
c1f0: 4d 20 74 24 7b 69 64 7d 3b 20 5c 0d 0a 20 20 7d  M t${id}; \..  }
c200: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
c210: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 73 20  omplain results 
c220: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 73 65 74 20  errors....  set 
c230: 63 6f 64 65 20 5b 63 6f 6d 70 69 6c 65 43 53 68  code [compileCSh
c240: 61 72 70 57 69 74 68 20 5b 73 75 62 73 74 20 7b  arpWith [subst {
c250: 0d 0a 20 20 20 20 75 73 69 6e 67 20 53 79 73 74  ..    using Syst
c260: 65 6d 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 53  em;..    using S
c270: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c280: 65 3b 0d 0a 20 20 20 20 75 73 69 6e 67 20 45 61  e;..    using Ea
c290: 67 6c 65 2e 5f 43 6f 6e 74 61 69 6e 65 72 73 2e  gle._Containers.
c2a0: 50 75 62 6c 69 63 3b 0d 0a 0d 0a 20 20 20 20 6e  Public;....    n
c2b0: 61 6d 65 73 70 61 63 65 20 5f 44 79 6e 61 6d 69  amespace _Dynami
c2c0: 63 24 7b 69 64 7d 0d 0a 20 20 20 20 7b 0d 0a 20  c${id}..    {.. 
c2d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c2e0: 69 63 20 63 6c 61 73 73 20 54 65 73 74 24 7b 69  ic class Test${i
c2f0: 64 7d 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  d}..      {..   
c300: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c310: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 47 65  ic StringList Ge
c320: 74 4c 69 73 74 28 70 61 72 61 6d 73 20 73 74 72  tList(params str
c330: 69 6e 67 5c 5b 5c 5d 20 73 74 72 69 6e 67 73 29  ing\[\] strings)
c340: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
c350: 20 20 20 20 20 20 20 53 74 72 69 6e 67 4c 69 73         StringLis
c360: 74 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  t result = new S
c370: 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
c380: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
c390: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
c3a0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e  n connection = n
c3b0: 65 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ew SQLiteConnect
c3c0: 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
c3d0: 20 20 20 20 22 44 61 74 61 20 53 6f 75 72 63 65      "Data Source
c3e0: 3d 24 7b 64 61 74 61 53 6f 75 72 63 65 7d 3b 5b  =${dataSource};[
c3f0: 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
c400: 5d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ]"))..          
c410: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  {..            c
c420: 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70 65 6e 28 29  onnection.Open()
c430: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c440: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
c450: 74 65 4d 6f 64 75 6c 65 28 6e 65 77 20 53 51 4c  teModule(new SQL
c460: 69 74 65 4d 6f 64 75 6c 65 45 6e 75 6d 65 72 61  iteModuleEnumera
c470: 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
c480: 20 20 20 20 22 6d 6f 64 24 7b 69 64 7d 22 2c 20      "mod${id}", 
c490: 73 74 72 69 6e 67 73 29 29 3b 0d 0a 0d 0a 20 20  strings));....  
c4a0: 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
c4b0: 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
c4c0: 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e 65 63 74  ommand = connect
c4d0: 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ion.CreateComman
c4e0: 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  d())..          
c4f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c500: 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61     command.Comma
c510: 6e 64 54 65 78 74 20 3d 20 22 5b 73 75 62 73 74  ndText = "[subst
c520: 20 24 7b 73 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20   ${sql(1)}]";.. 
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
c540: 75 6c 74 2e 41 64 64 28 63 6f 6d 6d 61 6e 64 2e  ult.Add(command.
c550: 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28  ExecuteNonQuery(
c560: 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ).ToString());..
c570: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
c590: 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
c5a0: 64 20 63 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6e 6e  d command = conn
c5b0: 65 63 74 69 6f 6e 2e 43 72 65 61 74 65 43 6f 6d  ection.CreateCom
c5c0: 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20 20  mand())..       
c5d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c5e0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 2e 43 6f        command.Co
c5f0: 6d 6d 61 6e 64 54 65 78 74 20 3d 20 22 5b 73 75  mmandText = "[su
c600: 62 73 74 20 24 7b 73 71 6c 28 32 29 7d 5d 22 3b  bst ${sql(2)}]";
c610: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c620: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44    using (SQLiteD
c630: 61 74 61 52 65 61 64 65 72 20 64 61 74 61 52 65  ataReader dataRe
c640: 61 64 65 72 20 3d 20 63 6f 6d 6d 61 6e 64 2e 45  ader = command.E
c650: 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d  xecuteReader()).
c660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
c670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c680: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
c690: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d        // NOTE: M
c6a0: 61 73 6b 20 6f 66 66 20 74 68 65 20 68 61 73 68  ask off the hash
c6b0: 20 63 6f 64 65 20 70 6f 72 74 69 6f 6e 20 62 65   code portion be
c6c0: 63 61 75 73 65 20 69 74 20 64 69 66 66 65 72 73  cause it differs
c6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c6e0: 20 20 2f 2f 20 20 20 20 20 20 20 62 65 74 77 65    //       betwe
c6f0: 65 6e 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  en framework ver
c700: 73 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  sions...        
c710: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
c720: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67              long
c730: 20 6d 61 73 6b 20 3d 20 75 6e 63 68 65 63 6b 65   mask = unchecke
c740: 64 28 28 6c 6f 6e 67 29 30 78 46 46 46 46 46 46  d((long)0xFFFFFF
c750: 46 46 30 30 30 30 30 30 30 30 29 3b 0d 0a 0d 0a  FF00000000);....
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 77 68 69 6c 65 20 28 64 61 74 61 52 65 61 64 65  while (dataReade
c780: 72 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  r.Read())..     
c790: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 72 65 73 75 6c 74 2e 41 64 64 28 28 64 61 74 61  result.Add((data
c7c0: 52 65 61 64 65 72 2e 47 65 74 49 6e 74 36 34 28  Reader.GetInt64(
c7d0: 30 29 20 26 20 6d 61 73 6b 29 2e 54 6f 53 74 72  0) & mask).ToStr
c7e0: 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
c7f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
c800: 74 2e 41 64 64 28 28 64 61 74 61 52 65 61 64 65  t.Add((dataReade
c810: 72 2e 47 65 74 49 6e 74 36 34 28 31 29 20 26 20  r.GetInt64(1) & 
c820: 6d 61 73 6b 29 2e 54 6f 53 74 72 69 6e 67 28 29  mask).ToString()
c830: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c840: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c870: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
c880: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
c890: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c8a0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
c8b0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
c8c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
c920: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  c static void Ma
c930: 69 6e 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  in()..        {.
c940: 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  .          // do
c950: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
c960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }.. 
c970: 20 20 20 7d 0d 0a 20 20 7d 5d 20 74 72 75 65 20     }..  }] true 
c980: 74 72 75 65 20 74 72 75 65 20 72 65 73 75 6c 74  true true result
c990: 73 20 65 72 72 6f 72 73 20 5b 6c 69 73 74 20 53  s errors [list S
c9a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c9b0: 65 2e 64 6c 6c 20 45 61 67 6c 65 2e 64 6c 6c 5d  e.dll Eagle.dll]
c9c0: 5d 0d 0a 0d 0a 20 20 6c 69 73 74 20 24 63 6f 64  ]....  list $cod
c9d0: 65 20 24 72 65 73 75 6c 74 73 20 5c 0d 0a 20 20  e $results \..  
c9e0: 20 20 20 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f      [expr {[info
c9f0: 20 65 78 69 73 74 73 20 65 72 72 6f 72 73 5d 20   exists errors] 
ca00: 3f 20 24 65 72 72 6f 72 73 20 3a 20 22 22 7d 5d  ? $errors : ""}]
ca10: 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72 20   \..      [expr 
ca20: 7b 24 63 6f 64 65 20 65 71 20 22 4f 6b 22 20 3f  {$code eq "Ok" ?
ca30: 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20   [catch {..     
ca40: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
ca50: 20 5f 44 79 6e 61 6d 69 63 24 7b 69 64 7d 2e 54   _Dynamic${id}.T
ca60: 65 73 74 24 7b 69 64 7d 20 47 65 74 4c 69 73 74  est${id} GetList
ca70: 20 6f 6e 65 20 6f 6e 65 20 74 77 6f 20 6f 6e 65   one one two one
ca80: 20 74 77 6f 20 74 77 6f 0d 0a 20 20 20 20 20 20   two two..      
ca90: 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b 73 65 74  } result] : [set
caa0: 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d 20 5b 6e   result ""]}] [n
cab0: 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52 65 73 75  ormalizeVtabResu
cac0: 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a 7d 20 2d  lt $result]..} -
cad0: 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20 63 6c 65  cleanup {..  cle
cae0: 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  anupDb $fileName
caf0: 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  ....  unset -noc
cb00: 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c 74 20 63  omplain result c
cb10: 6f 64 65 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ode results erro
cb20: 72 73 20 73 71 6c 20 64 61 74 61 53 6f 75 72 63  rs sql dataSourc
cb30: 65 20 69 64 20 66 69 6c 65 4e 61 6d 65 0d 0a 7d  e id fileName..}
cb40: 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65   -constraints {e
cb50: 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a  agle command.obj
cb60: 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38 20 6d 6f  ect monoBug28 mo
cb70: 6e 6f 43 72 61 73 68 32 31 31 20 63 6f 6d 6d 61  noCrash211 comma
cb80: 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70 69 6c 65  nd.sql\..compile
cb90: 2e 44 41 54 41 20 53 51 4c 69 74 65 20 53 79 73  .DATA SQLite Sys
cba0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c  tem.Data.SQLite\
cbb0: 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  ..defineConstant
cbc0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
cbd0: 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
cbe0: 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d 70 69 6c  UAL_TABLE compil
cbf0: 65 43 53 68 61 72 70 7d 20 2d 6d 61 74 63 68 20  eCSharp} -match 
cc00: 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65 73 75 6c  \..regexp -resul
cc10: 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62  t [normalizeVtab
cc20: 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d 0a 53 79  Result {^Ok\..Sy
cc30: 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23 43 6f 6d  stem#CodeDom#Com
cc40: 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65 72 52 65  piler#CompilerRe
cc50: 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c 7d 20 30  sults#\d+ \{\} 0
cc60: 20 5c 7b 30 20 34 32 39 34 39 36 37 32 39 36 20   \{0 4294967296 
cc70: 34 32 39 34 39 36 37 32 39 36 5c 0d 0a 38 35 38  4294967296\..858
cc80: 39 39 33 34 35 39 32 20 38 35 38 39 39 33 34 35  9934592 85899345
cc90: 39 32 20 31 32 38 38 34 39 30 31 38 38 38 20 31  92 12884901888 1
cca0: 32 38 38 34 39 30 31 38 38 38 20 31 37 31 37 39  2884901888 17179
ccb0: 38 36 39 31 38 34 20 31 37 31 37 39 38 36 39 31  869184 171798691
ccc0: 38 34 5c 0d 0a 32 31 34 37 34 38 33 36 34 38 30  84\..21474836480
ccd0: 20 32 31 34 37 34 38 33 36 34 38 30 20 32 35 37   21474836480 257
cce0: 36 39 38 30 33 37 37 36 20 32 35 37 36 39 38 30  69803776 2576980
ccf0: 33 37 37 36 5c 7d 24 7d 5d 7d 0d 0a 0d 0a 23 23  3776\}$}]}....##
cd00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
cd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
cd50: 0a 72 75 6e 54 65 73 74 20 7b 74 65 73 74 20 76  .runTest {test v
cd60: 74 61 62 2d 31 2e 31 31 20 7b 49 45 6e 75 6d 65  tab-1.11 {IEnume
cd70: 72 61 62 6c 65 20 76 69 72 74 75 61 6c 20 74 61  rable virtual ta
cd80: 62 6c 65 20 77 2f 6f 62 6a 65 63 74 20 69 64 65  ble w/object ide
cd90: 6e 74 69 74 79 7d 20 2d 73 65 74 75 70 20 7b 0d  ntity} -setup {.
cda0: 0a 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20  .  set fileName 
cdb0: 76 74 61 62 2d 31 2e 31 31 2e 64 62 0d 0a 7d 20  vtab-1.11.db..} 
cdc0: 2d 62 6f 64 79 20 7b 0d 0a 20 20 73 65 74 20 69  -body {..  set i
cdd0: 64 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  d [object invoke
cde0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
cdf0: 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 0d 0a  Active NextId]..
ce00: 20 20 73 65 74 20 64 61 74 61 53 6f 75 72 63 65    set dataSource
ce10: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
ce20: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
ce30: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  y] $fileName]...
ce40: 0a 20 20 73 65 74 20 73 71 6c 28 31 29 20 7b 20  .  set sql(1) { 
ce50: 5c 0d 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  \..    CREATE VI
ce60: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 24 7b 69  RTUAL TABLE t${i
ce70: 64 7d 20 55 53 49 4e 47 20 6d 6f 64 24 7b 69 64  d} USING mod${id
ce80: 7d 3b 20 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 73  }; \..  }....  s
ce90: 65 74 20 73 71 6c 28 32 29 20 7b 20 5c 0d 0a 20  et sql(2) { \.. 
cea0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 49 64 2c     SELECT rowId,
ceb0: 20 2a 20 46 52 4f 4d 20 74 24 7b 69 64 7d 3b 20   * FROM t${id}; 
cec0: 5c 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 75 6e 73 65  \..  }....  unse
ced0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65  t -nocomplain re
cee0: 73 75 6c 74 73 20 65 72 72 6f 72 73 0d 0a 0d 0a  sults errors....
cef0: 20 20 73 65 74 20 63 6f 64 65 20 5b 63 6f 6d 70    set code [comp
cf00: 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 5b 73  ileCSharpWith [s
cf10: 75 62 73 74 20 7b 0d 0a 20 20 20 20 75 73 69 6e  ubst {..    usin
cf20: 67 20 53 79 73 74 65 6d 3b 0d 0a 20 20 20 20 75  g System;..    u
cf30: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
cf40: 2e 53 51 4c 69 74 65 3b 0d 0a 20 20 20 20 75 73  .SQLite;..    us
cf50: 69 6e 67 20 45 61 67 6c 65 2e 5f 43 6f 6e 74 61  ing Eagle._Conta
cf60: 69 6e 65 72 73 2e 50 75 62 6c 69 63 3b 0d 0a 0d  iners.Public;...
cf70: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 5f  .    namespace _
cf80: 44 79 6e 61 6d 69 63 24 7b 69 64 7d 0d 0a 20 20  Dynamic${id}..  
cf90: 20 20 7b 0d 0a 20 20 20 20 20 20 70 75 62 6c 69    {..      publi
cfa0: 63 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  c static class T
cfb0: 65 73 74 24 7b 69 64 7d 0d 0a 20 20 20 20 20 20  est${id}..      
cfc0: 7b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  {..        publi
cfd0: 63 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  c static StringL
cfe0: 69 73 74 20 47 65 74 4c 69 73 74 28 70 61 72 61  ist GetList(para
cff0: 6d 73 20 73 74 72 69 6e 67 5c 5b 5c 5d 20 73 74  ms string\[\] st
d000: 72 69 6e 67 73 29 0d 0a 20 20 20 20 20 20 20 20  rings)..        
d010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53 74 72  {..          Str
d020: 69 6e 67 4c 69 73 74 20 72 65 73 75 6c 74 20 3d  ingList result =
d030: 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
d040: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d050: 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e  using (SQLiteCon
d060: 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  nection connecti
d070: 6f 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  on = new SQLiteC
d080: 6f 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20  onnection(..    
d090: 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 20            "Data 
d0a0: 53 6f 75 72 63 65 3d 24 7b 64 61 74 61 53 6f 75  Source=${dataSou
d0b0: 72 63 65 7d 3b 5b 67 65 74 46 6c 61 67 73 50 72  rce};[getFlagsPr
d0c0: 6f 70 65 72 74 79 5d 22 29 29 0d 0a 20 20 20 20  operty]"))..    
d0d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d0e0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e       connection.
d0f0: 4f 70 65 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Open();....     
d100: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
d110: 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 6e  n.CreateModule(n
d120: 65 77 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 45  ew SQLiteModuleE
d130: 6e 75 6d 65 72 61 62 6c 65 28 0d 0a 20 20 20 20  numerable(..    
d140: 20 20 20 20 20 20 20 20 20 20 22 6d 6f 64 24 7b            "mod${
d150: 69 64 7d 22 2c 20 73 74 72 69 6e 67 73 2c 20 74  id}", strings, t
d160: 72 75 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rue));....      
d170: 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
d180: 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61  iteCommand comma
d190: 6e 64 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  nd = connection.
d1a0: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29  CreateCommand())
d1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d1c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
d1d0: 6f 6d 6d 61 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65  ommand.CommandTe
d1e0: 78 74 20 3d 20 22 5b 73 75 62 73 74 20 24 7b 73  xt = "[subst ${s
d1f0: 71 6c 28 31 29 7d 5d 22 3b 0d 0a 20 20 20 20 20  ql(1)}]";..     
d200: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
d210: 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72 79  .ExecuteNonQuery
d220: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
d230: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d240: 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
d250: 6f 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 20 3d  ommand command =
d260: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 43 72 65 61   connection.Crea
d270: 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a 20 20  teCommand())..  
d280: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d290: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61             comma
d2a0: 6e 64 2e 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d  nd.CommandText =
d2b0: 20 22 5b 73 75 62 73 74 20 24 7b 73 71 6c 28 32   "[subst ${sql(2
d2c0: 29 7d 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  )}]";....       
d2d0: 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51         using (SQ
d2e0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 20 64  LiteDataReader d
d2f0: 61 74 61 52 65 61 64 65 72 20 3d 20 63 6f 6d 6d  ataReader = comm
d300: 61 6e 64 2e 45 78 65 63 75 74 65 52 65 61 64 65  and.ExecuteReade
d310: 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r())..          
d320: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d330: 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 64 61         while (da
d340: 74 61 52 65 61 64 65 72 2e 52 65 61 64 28 29 29  taReader.Read())
d350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d370: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64         result.Ad
d380: 64 28 64 61 74 61 52 65 61 64 65 72 5c 5b 30 5c  d(dataReader\[0\
d390: 5d 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  ].ToString());..
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 20 20 72 65 73 75 6c 74 2e 41 64 64 28 64 61 74    result.Add(dat
d3c0: 61 52 65 61 64 65 72 5c 5b 31 5c 5d 2e 54 6f 53  aReader\[1\].ToS
d3d0: 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
d3e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d400: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
d410: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e              conn
d420: 65 63 74 69 6f 6e 2e 43 6c 6f 73 65 28 29 3b 0d  ection.Close();.
d430: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
d440: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d450: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
d460: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
d470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d4c0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d4d0: 76 6f 69 64 20 4d 61 69 6e 28 29 0d 0a 20 20 20  void Main()..   
d4e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d4f0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
d500: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
d510: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d     }..    }..  }
d520: 5d 20 74 72 75 65 20 74 72 75 65 20 74 72 75 65  ] true true true
d530: 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73 20   results errors 
d540: 5b 6c 69 73 74 20 53 79 73 74 65 6d 2e 44 61 74  [list System.Dat
d550: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 45 61 67  a.SQLite.dll Eag
d560: 6c 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 6c 69  le.dll]]....  li
d570: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code $result
d580: 73 20 5c 0d 0a 20 20 20 20 20 20 5b 65 78 70 72  s \..      [expr
d590: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 65   {[info exists e
d5a0: 72 72 6f 72 73 5d 20 3f 20 24 65 72 72 6f 72 73  rrors] ? $errors
d5b0: 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20   : ""}] \..     
d5c0: 20 5b 65 78 70 72 20 7b 24 63 6f 64 65 20 65 71   [expr {$code eq
d5d0: 20 22 4f 6b 22 20 3f 20 5b 63 61 74 63 68 20 7b   "Ok" ? [catch {
d5e0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
d5f0: 20 69 6e 76 6f 6b 65 20 5f 44 79 6e 61 6d 69 63   invoke _Dynamic
d600: 24 7b 69 64 7d 2e 54 65 73 74 24 7b 69 64 7d 20  ${id}.Test${id} 
d610: 47 65 74 4c 69 73 74 20 6f 6e 65 20 74 77 6f 20  GetList one two 
d620: 74 68 72 65 65 20 34 20 35 2e 30 0d 0a 20 20 20  three 4 5.0..   
d630: 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3a 20 5b     } result] : [
d640: 73 65 74 20 72 65 73 75 6c 74 20 22 22 5d 7d 5d  set result ""]}]
d650: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56 74 61 62 52   [normalizeVtabR
d660: 65 73 75 6c 74 20 24 72 65 73 75 6c 74 5d 0d 0a  esult $result]..
d670: 7d 20 2d 63 6c 65 61 6e 75 70 20 7b 0d 0a 20 20  } -cleanup {..  
d680: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN
d690: 61 6d 65 0d 0a 0d 0a 20 20 75 6e 73 65 74 20 2d  ame....  unset -
d6a0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 72 65 73 75 6c  nocomplain resul
d6b0: 74 20 63 6f 64 65 20 72 65 73 75 6c 74 73 20 65  t code results e
d6c0: 72 72 6f 72 73 20 73 71 6c 20 64 61 74 61 53 6f  rrors sql dataSo
d6d0: 75 72 63 65 20 69 64 20 66 69 6c 65 4e 61 6d 65  urce id fileName
d6e0: 0d 0a 7d 20 2d 63 6f 6e 73 74 72 61 69 6e 74 73  ..} -constraints
d6f0: 20 7b 65 61 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e   {eagle command.
d700: 6f 62 6a 65 63 74 20 6d 6f 6e 6f 42 75 67 32 38  object monoBug28
d710: 20 6d 6f 6e 6f 43 72 61 73 68 32 31 31 20 63 6f   monoCrash211 co
d720: 6d 6d 61 6e 64 2e 73 71 6c 5c 0d 0a 63 6f 6d 70  mmand.sql\..comp
d730: 69 6c 65 2e 44 41 54 41 20 53 51 4c 69 74 65 20  ile.DATA SQLite 
d740: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
d750: 74 65 5c 0d 0a 64 65 66 69 6e 65 43 6f 6e 73 74  te\..defineConst
d760: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
d770: 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56  SQLite.INTEROP_V
d780: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 63 6f 6d  IRTUAL_TABLE com
d790: 70 69 6c 65 43 53 68 61 72 70 7d 20 2d 6d 61 74  pileCSharp} -mat
d7a0: 63 68 20 5c 0d 0a 72 65 67 65 78 70 20 2d 72 65  ch \..regexp -re
d7b0: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 56  sult [normalizeV
d7c0: 74 61 62 52 65 73 75 6c 74 20 7b 5e 4f 6b 5c 0d  tabResult {^Ok\.
d7d0: 0a 53 79 73 74 65 6d 23 43 6f 64 65 44 6f 6d 23  .System#CodeDom#
d7e0: 43 6f 6d 70 69 6c 65 72 23 43 6f 6d 70 69 6c 65  Compiler#Compile
d7f0: 72 52 65 73 75 6c 74 73 23 5c 64 2b 20 5c 7b 5c  rResults#\d+ \{\
d800: 7d 20 30 20 5c 7b 2d 3f 5c 64 2b 20 6f 6e 65 20  } 0 \{-?\d+ one 
d810: 2d 3f 5c 64 2b 20 74 77 6f 20 2d 3f 5c 64 2b 5c  -?\d+ two -?\d+\
d820: 0d 0a 74 68 72 65 65 20 2d 3f 5c 64 2b 20 34 20  ..three -?\d+ 4 
d830: 2d 3f 5c 64 2b 20 35 5c 2e 30 5c 7d 24 7d 5d 7d  -?\d+ 5\.0\}$}]}
d840: 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23  ....############
d850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
d890: 23 23 23 0d 0a 0d 0a 72 75 6e 54 65 73 74 20 7b  ###....runTest {
d8a0: 74 65 73 74 20 76 74 61 62 2d 31 2e 31 32 20 7b  test vtab-1.12 {
d8b0: 53 51 4c 69 74 65 49 6e 64 65 78 20 6d 61 6e 61  SQLiteIndex mana
d8c0: 67 65 64 2d 74 6f 2d 6e 61 74 69 76 65 2d 74 6f  ged-to-native-to
d8d0: 2d 6d 61 6e 61 67 65 64 7d 20 2d 73 65 74 75 70  -managed} -setup
d8e0: 20 7b 0d 0a 20 20 73 65 74 20 6e 43 6f 6e 73 74   {..  set nConst
d8f0: 72 61 69 6e 74 20 33 3b 20 73 65 74 20 6e 4f 72  raint 3; set nOr
d900: 64 65 72 42 79 20 33 0d 0a 7d 20 2d 62 6f 64 79  derBy 3..} -body
d910: 20 7b 0d 0a 20 20 73 65 74 20 69 6e 64 65 78 28   {..  set index(
d920: 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74  1) [object creat
d930: 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20  e -alias -flags 
d940: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
d950: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
d960: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64  SQLite.SQLiteInd
d970: 65 78 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 20  ex $nConstraint 
d980: 24 6e 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20  $nOrderBy]....  
d990: 66 6f 72 20 7b 73 65 74 20 69 43 6f 6e 73 74 72  for {set iConstr
d9a0: 61 69 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73 74  aint 0} {$iConst
d9b0: 72 61 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74 72  raint < $nConstr
d9c0: 61 69 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f 6e  aint} {incr iCon
d9d0: 73 74 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20 20  straint} {..    
d9e0: 73 65 74 20 63 6f 6e 73 74 72 61 69 6e 74 28 31  set constraint(1
d9f0: 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65  ) [object create
da00: 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b   -alias -flags +
da10: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
da20: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
da30: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e  .SQLite.SQLiteIn
da40: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 20 30 20  dexConstraint 0 
da50: 30 20 30 20 30 5d 0d 0a 0d 0a 20 20 20 20 24 69  0 0 0]....    $i
da60: 6e 64 65 78 28 31 29 20 49 6e 70 75 74 73 2e 43  ndex(1) Inputs.C
da70: 6f 6e 73 74 72 61 69 6e 74 73 2e 53 65 74 56 61  onstraints.SetVa
da80: 6c 75 65 20 24 63 6f 6e 73 74 72 61 69 6e 74 28  lue $constraint(
da90: 31 29 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 0d  1) $iConstraint.
daa0: 0a 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69  ...    $constrai
dab0: 6e 74 28 31 29 20 69 43 6f 6c 75 6d 6e 20 5b 65  nt(1) iColumn [e
dac0: 78 70 72 20 7b 69 6e 74 28 30 78 30 31 32 33 34  xpr {int(0x01234
dad0: 35 36 37 20 2b 20 24 69 43 6f 6e 73 74 72 61 69  567 + $iConstrai
dae0: 6e 74 29 7d 5d 0d 0a 20 20 20 20 24 63 6f 6e 73  nt)}]..    $cons
daf0: 74 72 61 69 6e 74 28 31 29 20 6f 70 20 5b 65 78  traint(1) op [ex
db00: 70 72 20 7b 30 78 46 46 20 2d 20 24 69 43 6f 6e  pr {0xFF - $iCon
db10: 73 74 72 61 69 6e 74 7d 5d 0d 0a 20 20 20 20 24  straint}]..    $
db20: 63 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 75 73  constraint(1) us
db30: 61 62 6c 65 20 5b 65 78 70 72 20 7b 30 78 43 43  able [expr {0xCC
db40: 20 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 7d   + $iConstraint}
db50: 5d 0d 0a 20 20 20 20 24 63 6f 6e 73 74 72 61 69  ]..    $constrai
db60: 6e 74 28 31 29 20 69 54 65 72 6d 4f 66 66 73 65  nt(1) iTermOffse
db70: 74 20 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 38  t [expr {int(0x8
db80: 39 41 42 43 44 45 46 20 2b 20 24 69 43 6f 6e 73  9ABCDEF + $iCons
db90: 74 72 61 69 6e 74 29 7d 5d 0d 0a 20 20 7d 0d 0a  traint)}]..  }..
dba0: 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 4f 72  ..  for {set iOr
dbb0: 64 65 72 42 79 20 30 7d 20 7b 24 69 4f 72 64 65  derBy 0} {$iOrde
dbc0: 72 42 79 20 3c 20 24 6e 4f 72 64 65 72 42 79 7d  rBy < $nOrderBy}
dbd0: 20 7b 69 6e 63 72 20 69 4f 72 64 65 72 42 79 7d   {incr iOrderBy}
dbe0: 20 7b 0d 0a 20 20 20 20 73 65 74 20 6f 72 64 65   {..    set orde
dbf0: 72 42 79 28 31 29 20 5b 6f 62 6a 65 63 74 20 63  rBy(1) [object c
dc00: 72 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c  reate -alias -fl
dc10: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
dc20: 0d 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d  ..        System
dc30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
dc40: 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 20  iteIndexOrderBy 
dc50: 30 20 30 5d 0d 0a 0d 0a 20 20 20 20 24 69 6e 64  0 0]....    $ind
dc60: 65 78 28 31 29 20 49 6e 70 75 74 73 2e 4f 72 64  ex(1) Inputs.Ord
dc70: 65 72 42 79 73 2e 53 65 74 56 61 6c 75 65 20 24  erBys.SetValue $
dc80: 6f 72 64 65 72 42 79 28 31 29 20 24 69 4f 72 64  orderBy(1) $iOrd
dc90: 65 72 42 79 0d 0a 0d 0a 20 20 20 20 24 6f 72 64  erBy....    $ord
dca0: 65 72 42 79 28 31 29 20 69 43 6f 6c 75 6d 6e 20  erBy(1) iColumn 
dcb0: 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 32 33 30  [expr {int(0x230
dcc0: 31 36 37 34 35 20 2b 20 24 69 4f 72 64 65 72 42  16745 + $iOrderB
dcd0: 79 29 7d 5d 0d 0a 20 20 20 20 24 6f 72 64 65 72  y)}]..    $order
dce0: 42 79 28 31 29 20 64 65 73 63 20 5b 65 78 70 72  By(1) desc [expr
dcf0: 20 7b 30 78 46 46 20 2d 20 24 69 4f 72 64 65 72   {0xFF - $iOrder
dd00: 42 79 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 66  By}]..  }....  f
dd10: 6f 72 20 7b 73 65 74 20 69 43 6f 6e 73 74 72 61  or {set iConstra
dd20: 69 6e 74 20 30 7d 20 7b 24 69 43 6f 6e 73 74 72  int 0} {$iConstr
dd30: 61 69 6e 74 20 3c 20 24 6e 43 6f 6e 73 74 72 61  aint < $nConstra
dd40: 69 6e 74 7d 20 7b 69 6e 63 72 20 69 43 6f 6e 73  int} {incr iCons
dd50: 74 72 61 69 6e 74 7d 20 7b 0d 0a 20 20 20 20 73  traint} {..    s
dd60: 65 74 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  et constraintUsa
dd70: 67 65 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72  ge(1) [object cr
dd80: 65 61 74 65 20 2d 61 6c 69 61 73 20 2d 66 6c 61  eate -alias -fla
dd90: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
dda0: 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e  .        System.
ddb0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
ddc0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
ddd0: 74 55 73 61 67 65 20 30 20 30 5d 0d 0a 0d 0a 20  tUsage 0 0].... 
dde0: 20 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74     $index(1) Out
ddf0: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55  puts.ConstraintU
de00: 73 61 67 65 73 2e 53 65 74 56 61 6c 75 65 20 24  sages.SetValue $
de10: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28  constraintUsage(
de20: 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 24 69  1) \..        $i
de30: 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 0d 0a 20 20  Constraint....  
de40: 20 20 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61    $constraintUsa
de50: 67 65 28 31 29 20 61 72 67 76 49 6e 64 65 78 20  ge(1) argvIndex 
de60: 5b 65 78 70 72 20 7b 69 6e 74 28 30 78 41 42 38  [expr {int(0xAB8
de70: 39 45 46 43 44 20 2b 20 24 69 43 6f 6e 73 74 72  9EFCD + $iConstr
de80: 61 69 6e 74 29 7d 5d 0d 0a 20 20 20 20 24 63 6f  aint)}]..    $co
de90: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31 29  nstraintUsage(1)
dea0: 20 6f 6d 69 74 20 5b 65 78 70 72 20 7b 30 78 43   omit [expr {0xC
deb0: 43 20 2b 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  C + $iConstraint
dec0: 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 24 69 6e  }]..  }....  $in
ded0: 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 49  dex(1) Outputs.I
dee0: 6e 64 65 78 4e 75 6d 62 65 72 20 5b 65 78 70 72  ndexNumber [expr
def0: 20 7b 69 6e 74 28 30 78 41 41 41 41 41 41 41 41   {int(0xAAAAAAAA
df00: 29 7d 5d 0d 0a 20 20 24 69 6e 64 65 78 28 31 29  )}]..  $index(1)
df10: 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78 53 74   Outputs.IndexSt
df20: 72 69 6e 67 20 22 5c 78 30 31 74 65 73 74 20 69  ring "\x01test i
df30: 6e 64 65 78 20 73 74 72 69 6e 67 2e 5c 78 46 46  ndex string.\xFF
df40: 22 0d 0a 20 20 24 69 6e 64 65 78 28 31 29 20 4f  "..  $index(1) O
df50: 75 74 70 75 74 73 2e 4e 65 65 64 54 6f 46 72 65  utputs.NeedToFre
df60: 65 49 6e 64 65 78 53 74 72 69 6e 67 20 5b 65 78  eIndexString [ex
df70: 70 72 20 7b 69 6e 74 28 30 78 35 35 35 35 35 35  pr {int(0x555555
df80: 35 35 29 7d 5d 0d 0a 20 20 24 69 6e 64 65 78 28  55)}]..  $index(
df90: 31 29 20 4f 75 74 70 75 74 73 2e 4f 72 64 65 72  1) Outputs.Order
dfa0: 42 79 43 6f 6e 73 75 6d 65 64 20 5b 65 78 70 72  ByConsumed [expr
dfb0: 20 7b 69 6e 74 28 30 78 33 33 33 33 33 33 33 33   {int(0x33333333
dfc0: 29 7d 5d 0d 0a 20 20 24 69 6e 64 65 78 28 31 29  )}]..  $index(1)
dfd0: 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74   Outputs.Estimat
dfe0: 65 64 43 6f 73 74 20 31 2e 30 0d 0a 0d 0a 20 20  edCost 1.0....  
dff0: 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f  if {[$index(1) O
e000: 75 74 70 75 74 73 2e 43 61 6e 55 73 65 45 73 74  utputs.CanUseEst
e010: 69 6d 61 74 65 64 52 6f 77 73 5d 7d 20 74 68 65  imatedRows]} the
e020: 6e 20 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78 28  n {..    $index(
e030: 31 29 20 4f 75 74 70 75 74 73 2e 45 73 74 69 6d  1) Outputs.Estim
e040: 61 74 65 64 52 6f 77 73 20 5b 65 78 70 72 20 7b  atedRows [expr {
e050: 69 6e 74 28 30 78 43 43 43 43 43 43 43 43 29 7d  int(0xCCCCCCCC)}
e060: 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  ]..  }....  if {
e070: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
e080: 74 73 2e 43 61 6e 55 73 65 49 6e 64 65 78 46 6c  ts.CanUseIndexFl
e090: 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ags]} then {..  
e0a0: 20 20 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70    $index(1) Outp
e0b0: 75 74 73 2e 49 6e 64 65 78 46 6c 61 67 73 20 5b  uts.IndexFlags [
e0c0: 65 78 70 72 20 7b 69 6e 74 28 30 78 45 45 45 45  expr {int(0xEEEE
e0d0: 45 45 45 45 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d 0a  EEEE)}]..  }....
e0e0: 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29    if {[$index(1)
e0f0: 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 43   Outputs.CanUseC
e100: 6f 6c 75 6d 6e 73 55 73 65 64 5d 7d 20 74 68 65  olumnsUsed]} the
e110: 6e 20 7b 0d 0a 20 20 20 20 24 69 6e 64 65 78 28  n {..    $index(
e120: 31 29 20 4f 75 74 70 75 74 73 2e 43 6f 6c 75 6d  1) Outputs.Colum
e130: 6e 73 55 73 65 64 20 5b 65 78 70 72 20 7b 77 69  nsUsed [expr {wi
e140: 64 65 28 30 78 42 41 44 43 30 46 46 45 45 38 37  de(0xBADC0FFEE87
e150: 35 36 32 31 41 29 7d 5d 0d 0a 20 20 7d 0d 0a 0d  5621A)}]..  }...
e160: 0a 20 20 73 65 74 20 70 49 6e 64 65 78 28 31 29  .  set pIndex(1)
e170: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke 
e180: 2d 63 72 65 61 74 65 20 2d 66 6c 61 67 73 20 2b  -create -flags +
e190: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..   
e1a0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
e1b0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65  QLite.SQLiteInde
e1c0: 78 20 41 6c 6c 6f 63 61 74 65 41 6e 64 49 6e 69  x AllocateAndIni
e1d0: 74 69 61 6c 69 7a 65 4e 61 74 69 76 65 20 5c 0d  tializeNative \.
e1e0: 0a 20 20 20 20 20 20 24 6e 43 6f 6e 73 74 72 61  .      $nConstra
e1f0: 69 6e 74 20 24 6e 4f 72 64 65 72 42 79 5d 0d 0a  int $nOrderBy]..
e200: 0d 0a 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ..  object invok
e210: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
e220: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79 73  lic \..      Sys
e230: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
e240: 53 51 4c 69 74 65 49 6e 64 65 78 20 54 6f 49 6e  SQLiteIndex ToIn
e250: 74 50 74 72 20 24 69 6e 64 65 78 28 31 29 20 24  tPtr $index(1) $
e260: 70 49 6e 64 65 78 28 31 29 20 74 72 75 65 0d 0a  pIndex(1) true..
e270: 0d 0a 20 20 73 65 74 20 69 6e 64 65 78 28 32 29  ..  set index(2)
e280: 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20   [object create 
e290: 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e  -alias -flags +N
e2a0: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..    
e2b0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
e2c0: 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65 78  Lite.SQLiteIndex
e2d0: 20 24 6e 43 6f 6e 73 74 72 61 69 6e 74 20 24 6e   $nConstraint $n
e2e0: 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20 6f 62  OrderBy]....  ob
e2f0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 61 6c 69  ject invoke -ali
e300: 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  as -flags +NonPu
e310: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 53 79  blic \..      Sy
e320: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
e330: 2e 53 51 4c 69 74 65 49 6e 64 65 78 20 46 72 6f  .SQLiteIndex Fro
e340: 6d 49 6e 74 50 74 72 20 24 70 49 6e 64 65 78 28  mIntPtr $pIndex(
e350: 31 29 20 74 72 75 65 20 69 6e 64 65 78 28 32 29  1) true index(2)
e360: 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  ....  for {set i
e370: 43 6f 6e 73 74 72 61 69 6e 74 20 30 7d 20 7b 24  Constraint 0} {$
e380: 69 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 24 6e  iConstraint < $n
e390: 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 69 6e 63  Constraint} {inc
e3a0: 72 20 69 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b  r iConstraint} {
e3b0: 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72  ..    set constr
e3c0: 61 69 6e 74 28 31 29 20 5b 24 69 6e 64 65 78 28  aint(1) [$index(
e3d0: 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61  1) \..        -a
e3e0: 6c 69 61 73 20 49 6e 70 75 74 73 2e 43 6f 6e 73  lias Inputs.Cons
e3f0: 74 72 61 69 6e 74 73 2e 47 65 74 56 61 6c 75 65  traints.GetValue
e400: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a   $iConstraint]..
e410: 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 73 74 72  ..    set constr
e420: 61 69 6e 74 28 32 29 20 5b 24 69 6e 64 65 78 28  aint(2) [$index(
e430: 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61  2) \..        -a
e440: 6c 69 61 73 20 49 6e 70 75 74 73 2e 43 6f 6e 73  lias Inputs.Cons
e450: 74 72 61 69 6e 74 73 2e 47 65 74 56 61 6c 75 65  traints.GetValue
e460: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 5d 0d 0a   $iConstraint]..
e470: 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63 6f 6e 73  ..    if {[$cons
e480: 74 72 61 69 6e 74 28 31 29 20 69 43 6f 6c 75 6d  traint(1) iColum
e490: 6e 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72 61 69  n] != [$constrai
e4a0: 6e 74 28 32 29 20 69 43 6f 6c 75 6d 6e 5d 7d 20  nt(2) iColumn]} 
e4b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72  then {..      er
e4c0: 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ror [appendArgs 
e4d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 69 43  \..          "iC
e4e0: 6f 6c 75 6d 6e 20 61 74 20 69 6e 64 65 78 20 22  olumn at index "
e4f0: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20   $iConstraint " 
e500: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
e510: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e520: 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28  f {[$constraint(
e530: 31 29 20 6f 70 5d 20 21 3d 20 5b 24 63 6f 6e 73  1) op] != [$cons
e540: 74 72 61 69 6e 74 28 32 29 20 6f 70 5d 7d 20 74  traint(2) op]} t
e550: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72  hen {..      err
e560: 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  or [appendArgs \
e570: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 6f 70 20  ..          "op 
e580: 61 74 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e  at index " $iCon
e590: 73 74 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e  straint " does n
e5a0: 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20  ot match"]..    
e5b0: 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63  }....    if {[$c
e5c0: 6f 6e 73 74 72 61 69 6e 74 28 31 29 20 75 73 61  onstraint(1) usa
e5d0: 62 6c 65 5d 20 21 3d 20 5b 24 63 6f 6e 73 74 72  ble] != [$constr
e5e0: 61 69 6e 74 28 32 29 20 75 73 61 62 6c 65 5d 7d  aint(2) usable]}
e5f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65   then {..      e
e600: 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
e610: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 75   \..          "u
e620: 73 61 62 6c 65 20 61 74 20 69 6e 64 65 78 20 22  sable at index "
e630: 20 24 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20   $iConstraint " 
e640: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d  does not match"]
e650: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
e660: 66 20 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28  f {[$constraint(
e670: 31 29 20 69 54 65 72 6d 4f 66 66 73 65 74 5d 20  1) iTermOffset] 
e680: 21 3d 20 5b 24 63 6f 6e 73 74 72 61 69 6e 74 28  != [$constraint(
e690: 32 29 20 69 54 65 72 6d 4f 66 66 73 65 74 5d 7d  2) iTermOffset]}
e6a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65   then {..      e
e6b0: 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73  rror [appendArgs
e6c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 69   \..          "i
e6d0: 54 65 72 6d 4f 66 66 73 65 74 20 61 74 20 69 6e  TermOffset at in
e6e0: 64 65 78 20 22 20 24 69 43 6f 6e 73 74 72 61 69  dex " $iConstrai
e6f0: 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74 20 6d 61  nt " does not ma
e700: 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20  tch"]..    }..  
e710: 7d 0d 0a 0d 0a 20 20 66 6f 72 20 7b 73 65 74 20  }....  for {set 
e720: 69 4f 72 64 65 72 42 79 20 30 7d 20 7b 24 69 4f  iOrderBy 0} {$iO
e730: 72 64 65 72 42 79 20 3c 20 24 6e 4f 72 64 65 72  rderBy < $nOrder
e740: 42 79 7d 20 7b 69 6e 63 72 20 69 4f 72 64 65 72  By} {incr iOrder
e750: 42 79 7d 20 7b 0d 0a 20 20 20 20 73 65 74 20 6f  By} {..    set o
e760: 72 64 65 72 42 79 28 31 29 20 5b 24 69 6e 64 65  rderBy(1) [$inde
e770: 78 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20  x(1) \..        
e780: 2d 61 6c 69 61 73 20 49 6e 70 75 74 73 2e 4f 72  -alias Inputs.Or
e790: 64 65 72 42 79 73 2e 47 65 74 56 61 6c 75 65 20  derBys.GetValue 
e7a0: 24 69 4f 72 64 65 72 42 79 5d 0d 0a 0d 0a 20 20  $iOrderBy]....  
e7b0: 20 20 73 65 74 20 6f 72 64 65 72 42 79 28 32 29    set orderBy(2)
e7c0: 20 5b 24 69 6e 64 65 78 28 32 29 20 5c 0d 0a 20   [$index(2) \.. 
e7d0: 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 49 6e         -alias In
e7e0: 70 75 74 73 2e 4f 72 64 65 72 42 79 73 2e 47 65  puts.OrderBys.Ge
e7f0: 74 56 61 6c 75 65 20 24 69 4f 72 64 65 72 42 79  tValue $iOrderBy
e800: 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 6f  ]....    if {[$o
e810: 72 64 65 72 42 79 28 31 29 20 69 43 6f 6c 75 6d  rderBy(1) iColum
e820: 6e 5d 20 21 3d 20 5b 24 6f 72 64 65 72 42 79 28  n] != [$orderBy(
e830: 32 29 20 69 43 6f 6c 75 6d 6e 5d 7d 20 74 68 65  2) iColumn]} the
e840: 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72  n {..      error
e850: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e860: 20 20 20 20 20 20 20 20 20 20 22 69 43 6f 6c 75            "iColu
e870: 6d 6e 20 61 74 20 69 6e 64 65 78 20 22 20 24 69  mn at index " $i
e880: 4f 72 64 65 72 42 79 20 22 20 64 6f 65 73 20 6e  OrderBy " does n
e890: 6f 74 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20  ot match"]..    
e8a0: 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 6f  }....    if {[$o
e8b0: 72 64 65 72 42 79 28 31 29 20 64 65 73 63 5d 20  rderBy(1) desc] 
e8c0: 21 3d 20 5b 24 6f 72 64 65 72 42 79 28 32 29 20  != [$orderBy(2) 
e8d0: 64 65 73 63 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  desc]} then {.. 
e8e0: 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
e8f0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..      
e900: 20 20 20 20 22 64 65 73 63 20 61 74 20 69 6e 64      "desc at ind
e910: 65 78 20 22 20 24 69 4f 72 64 65 72 42 79 20 22  ex " $iOrderBy "
e920: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22   does not match"
e930: 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0d  ]..    }..  }...
e940: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 43 6f 6e  .  for {set iCon
e950: 73 74 72 61 69 6e 74 20 30 7d 20 7b 24 69 43 6f  straint 0} {$iCo
e960: 6e 73 74 72 61 69 6e 74 20 3c 20 24 6e 43 6f 6e  nstraint < $nCon
e970: 73 74 72 61 69 6e 74 7d 20 7b 69 6e 63 72 20 69  straint} {incr i
e980: 43 6f 6e 73 74 72 61 69 6e 74 7d 20 7b 0d 0a 20  Constraint} {.. 
e990: 20 20 20 73 65 74 20 63 6f 6e 73 74 72 61 69 6e     set constrain
e9a0: 74 55 73 61 67 65 28 31 29 20 5b 24 69 6e 64 65  tUsage(1) [$inde
e9b0: 78 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20  x(1) \..        
e9c0: 2d 61 6c 69 61 73 20 4f 75 74 70 75 74 73 2e 43  -alias Outputs.C
e9d0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 2e  onstraintUsages.
e9e0: 47 65 74 56 61 6c 75 65 20 24 69 43 6f 6e 73 74  GetValue $iConst
e9f0: 72 61 69 6e 74 5d 0d 0a 0d 0a 20 20 20 20 73 65  raint]....    se
ea00: 74 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  t constraintUsag
ea10: 65 28 32 29 20 5b 24 69 6e 64 65 78 28 32 29 20  e(2) [$index(2) 
ea20: 5c 0d 0a 20 20 20 20 20 20 20 20 2d 61 6c 69 61  \..        -alia
ea30: 73 20 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72  s Outputs.Constr
ea40: 61 69 6e 74 55 73 61 67 65 73 2e 47 65 74 56 61  aintUsages.GetVa
ea50: 6c 75 65 20 24 69 43 6f 6e 73 74 72 61 69 6e 74  lue $iConstraint
ea60: 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 24 63  ]....    if {[$c
ea70: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 28 31  onstraintUsage(1
ea80: 29 20 61 72 67 76 49 6e 64 65 78 5d 20 21 3d 20  ) argvIndex] != 
ea90: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24 63 6f 6e  \..        [$con
eaa0: 73 74 72 61 69 6e 74 55 73 61 67 65 28 32 29 20  straintUsage(2) 
eab0: 61 72 67 76 49 6e 64 65 78 5d 7d 20 74 68 65 6e  argvIndex]} then
eac0: 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20   {..      error 
ead0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
eae0: 20 20 20 20 20 20 20 20 20 22 61 72 67 76 49 6e           "argvIn
eaf0: 64 65 78 20 61 74 20 69 6e 64 65 78 20 22 20 24  dex at index " $
eb00: 69 43 6f 6e 73 74 72 61 69 6e 74 20 22 20 64 6f  iConstraint " do
eb10: 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 5d 0d 0a  es not match"]..
eb20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20      }....    if 
eb30: 7b 5b 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  {[$constraintUsa
eb40: 67 65 28 31 29 20 6f 6d 69 74 5d 20 21 3d 20 5b  ge(1) omit] != [
eb50: 24 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  $constraintUsage
eb60: 28 32 29 20 6f 6d 69 74 5d 7d 20 74 68 65 6e 20  (2) omit]} then 
eb70: 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20 5b  {..      error [
eb80: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
eb90: 20 20 20 20 20 20 20 20 22 6f 6d 69 74 20 61 74          "omit at
eba0: 20 69 6e 64 65 78 20 22 20 24 69 43 6f 6e 73 74   index " $iConst
ebb0: 72 61 69 6e 74 20 22 20 64 6f 65 73 20 6e 6f 74  raint " does not
ebc0: 20 6d 61 74 63 68 22 5d 0d 0a 20 20 20 20 7d 0d   match"]..    }.
ebd0: 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24  .  }....  if {[$
ebe0: 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73  index(1) Outputs
ebf0: 2e 49 6e 64 65 78 4e 75 6d 62 65 72 5d 20 21 3d  .IndexNumber] !=
ec00: 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65   \..      [$inde
ec10: 78 28 32 29 20 4f 75 74 70 75 74 73 2e 49 6e 64  x(2) Outputs.Ind
ec20: 65 78 4e 75 6d 62 65 72 5d 7d 20 74 68 65 6e 20  exNumber]} then 
ec30: 7b 0d 0a 20 20 20 20 65 72 72 6f 72 20 22 49 6e  {..    error "In
ec40: 64 65 78 4e 75 6d 62 65 72 20 64 6f 65 73 20 6e  dexNumber does n
ec50: 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d 0d 0a  ot match"..  }..
ec60: 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65 78 28  ..  if {[$index(
ec70: 31 29 20 4f 75 74 70 75 74 73 2e 49 6e 64 65 78  1) Outputs.Index
ec80: 53 74 72 69 6e 67 5d 20 6e 65 20 5c 0d 0a 20 20  String] ne \..  
ec90: 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f      [$index(2) O
eca0: 75 74 70 75 74 73 2e 49 6e 64 65 78 53 74 72 69  utputs.IndexStri
ecb0: 6e 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ng]} then {..   
ecc0: 20 65 72 72 6f 72 20 22 49 6e 64 65 78 53 74 72   error "IndexStr
ecd0: 69 6e 67 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ing does not mat
ece0: 63 68 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66  ch"..  }....  if
ecf0: 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74   {[$index(1) Out
ed00: 70 75 74 73 2e 4e 65 65 64 54 6f 46 72 65 65 49  puts.NeedToFreeI
ed10: 6e 64 65 78 53 74 72 69 6e 67 5d 20 21 3d 20 5c  ndexString] != \
ed20: 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28  ..      [$index(
ed30: 32 29 20 4f 75 74 70 75 74 73 2e 4e 65 65 64 54  2) Outputs.NeedT
ed40: 6f 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67  oFreeIndexString
ed50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65  ]} then {..    e
ed60: 72 72 6f 72 20 22 4e 65 65 64 54 6f 46 72 65 65  rror "NeedToFree
ed70: 49 6e 64 65 78 53 74 72 69 6e 67 20 64 6f 65 73  IndexString does
ed80: 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20 7d   not match"..  }
ed90: 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64 65  ....  if {[$inde
eda0: 78 28 31 29 20 4f 75 74 70 75 74 73 2e 4f 72 64  x(1) Outputs.Ord
edb0: 65 72 42 79 43 6f 6e 73 75 6d 65 64 5d 20 21 3d  erByConsumed] !=
edc0: 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e 64 65   \..      [$inde
edd0: 78 28 32 29 20 4f 75 74 70 75 74 73 2e 4f 72 64  x(2) Outputs.Ord
ede0: 65 72 42 79 43 6f 6e 73 75 6d 65 64 5d 7d 20 74  erByConsumed]} t
edf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72 6f 72  hen {..    error
ee00: 20 22 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65   "OrderByConsume
ee10: 64 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  d does not match
ee20: 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  "..  }....  if {
ee30: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
ee40: 74 73 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74  ts.EstimatedCost
ee50: 5d 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 5b 24  ] != \..      [$
ee60: 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73  index(2) Outputs
ee70: 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74 5d 7d  .EstimatedCost]}
ee80: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 65 72 72   then {..    err
ee90: 6f 72 20 22 45 73 74 69 6d 61 74 65 64 43 6f 73  or "EstimatedCos
eea0: 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  t does not match
eeb0: 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 66 20 7b  "..  }....  if {
eec0: 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74 70 75  [$index(1) Outpu
eed0: 74 73 2e 43 61 6e 55 73 65 45 73 74 69 6d 61 74  ts.CanUseEstimat
eee0: 65 64 52 6f 77 73 5d 20 26 26 20 5c 0d 0a 20 20  edRows] && \..  
eef0: 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29 20 4f      [$index(2) O
ef00: 75 74 70 75 74 73 2e 43 61 6e 55 73 65 45 73 74  utputs.CanUseEst
ef10: 69 6d 61 74 65 64 52 6f 77 73 5d 7d 20 74 68 65  imatedRows]} the
ef20: 6e 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 24 69  n {..    if {[$i
ef30: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
ef40: 45 73 74 69 6d 61 74 65 64 52 6f 77 73 5d 20 21  EstimatedRows] !
ef50: 3d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24 69  = \..        [$i
ef60: 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e  ndex(2) Outputs.
ef70: 45 73 74 69 6d 61 74 65 64 52 6f 77 73 5d 7d 20  EstimatedRows]} 
ef80: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72  then {..      er
ef90: 72 6f 72 20 22 45 73 74 69 6d 61 74 65 64 52 6f  ror "EstimatedRo
efa0: 77 73 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  ws does not matc
efb0: 68 22 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  h"..    }....   
efc0: 20 74 70 75 74 73 20 24 74 65 73 74 5f 63 68 61   tputs $test_cha
efd0: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  nnel "---- check
efe0: 65 64 20 45 73 74 69 6d 61 74 65 64 52 6f 77 73  ed EstimatedRows
eff0: 20 70 72 6f 70 65 72 74 79 5c 6e 22 0d 0a 20 20   property\n"..  
f000: 7d 0d 0a 0d 0a 20 20 69 66 20 7b 5b 24 69 6e 64  }....  if {[$ind
f010: 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e 43 61  ex(1) Outputs.Ca
f020: 6e 55 73 65 49 6e 64 65 78 46 6c 61 67 73 5d 20  nUseIndexFlags] 
f030: 26 26 20 5c 0d 0a 20 20 20 20 20 20 5b 24 69 6e  && \..      [$in
f040: 64 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 43  dex(2) Outputs.C
f050: 61 6e 55 73 65 49 6e 64 65 78 46 6c 61 67 73 5d  anUseIndexFlags]
f060: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 69 66  } then {..    if
f070: 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f 75 74   {[$index(1) Out
f080: 70 75 74 73 2e 49 6e 64 65 78 46 6c 61 67 73 5d  puts.IndexFlags]
f090: 20 21 3d 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b   != \..        [
f0a0: 24 69 6e 64 65 78 28 32 29 20 4f 75 74 70 75 74  $index(2) Output
f0b0: 73 2e 49 6e 64 65 78 46 6c 61 67 73 5d 7d 20 74  s.IndexFlags]} t
f0c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 65 72 72  hen {..      err
f0d0: 6f 72 20 22 49 6e 64 65 78 46 6c 61 67 73 20 64  or "IndexFlags d
f0e0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a  oes not match"..
f0f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 74 70 75      }....    tpu
f100: 74 73 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  ts $test_channel
f110: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 65 64 20 49   "---- checked I
f120: 6e 64 65 78 46 6c 61 67 73 20 70 72 6f 70 65 72  ndexFlags proper
f130: 74 79 5c 6e 22 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ty\n"..  }....  
f140: 69 66 20 7b 5b 24 69 6e 64 65 78 28 31 29 20 4f  if {[$index(1) O
f150: 75 74 70 75 74 73 2e 43 61 6e 55 73 65 43 6f 6c  utputs.CanUseCol
f160: 75 6d 6e 73 55 73 65 64 5d 20 26 26 20 5c 0d 0a  umnsUsed] && \..
f170: 20 20 20 20 20 20 5b 24 69 6e 64 65 78 28 32 29        [$index(2)
f180: 20 4f 75 74 70 75 74 73 2e 43 61 6e 55 73 65 43   Outputs.CanUseC
f190: 6f 6c 75 6d 6e 73 55 73 65 64 5d 7d 20 74 68 65  olumnsUsed]} the
f1a0: 6e 20 7b 0d 0a 20 20 20 20 69 66 20 7b 5b 24 69  n {..    if {[$i
f1b0: 6e 64 65 78 28 31 29 20 4f 75 74 70 75 74 73 2e  ndex(1) Outputs.
f1c0: 43 6f 6c 75 6d 6e 73 55 73 65 64 5d 20 21 3d 20  ColumnsUsed] != 
f1d0: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 24 69 6e 64  \..        [$ind
f1e0: 65 78 28 32 29 20 4f 75 74 70 75 74 73 2e 43 6f  ex(2) Outputs.Co
f1f0: 6c 75 6d 6e 73 55 73 65 64 5d 7d 20 74 68 65 6e  lumnsUsed]} then
f200: 20 7b 0d 0a 20 20 20 20 20 20 65 72 72 6f 72 20   {..      error 
f210: 22 43 6f 6c 75 6d 6e 73 55 73 65 64 20 64 6f 65  "ColumnsUsed doe
f220: 73 20 6e 6f 74 20 6d 61 74 63 68 22 0d 0a 20 20  s not match"..  
f230: 20 20 7d 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73    }....    tputs
f240: 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22   $test_channel "
f250: 2d 2d 2d 2d 20 63 68 65 63 6b 65 64 20 43 6f 6c  ---- checked Col
f260: 75 6d 6e 73 55 73 65 64 20 70 72 6f 70 65 72 74  umnsUsed propert
f270: 79 5c 6e 22 0d 0a 20 20 7d 0d 0a 7d 20 2d 63 6c  y\n"..  }..} -cl
f280: 65 61 6e 75 70 20 7b 0d 0a 20 20 63 61 74 63 68  eanup {..  catch
f290: 20 7b 0d 0a 20 20 20 20 6f 62 6a 65 63 74 20 69   {..    object i
f2a0: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
f2b0: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..     
f2c0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
f2d0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 49 6e 64 65  QLite.SQLiteInde
f2e0: 78 20 46 72 65 65 4e 61 74 69 76 65 20 24 70 49  x FreeNative $pI
f2f0: 6e 64 65 78 28 31 29 0d 0a 20 20 7d 0d 0a 0d 0a  ndex(1)..  }....
f300: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
f310: 61 69 6e 20 63 6f 6e 73 74 72 61 69 6e 74 55 73  ain constraintUs
f320: 61 67 65 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f  age..  unset -no
f330: 63 6f 6d 70 6c 61 69 6e 20 6f 72 64 65 72 42 79  complain orderBy
f340: 20 6e 4f 72 64 65 72 42 79 20 69 4f 72 64 65 72   nOrderBy iOrder
f350: 42 79 0d 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63  By..  unset -noc
f360: 6f 6d 70 6c 61 69 6e 20 63 6f 6e 73 74 72 61 69  omplain constrai
f370: 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 69  nt nConstraint i
f380: 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20 75 6e  Constraint..  un
f390: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
f3a0: 70 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 7d 20  pIndex index..} 
f3b0: 2d 63 6f 6e 73 74 72 61 69 6e 74 73 20 7b 65 61  -constraints {ea
f3c0: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 6f 62 6a 65  gle command.obje
f3d0: 63 74 20 6d 6f 6e 6f 42 75 67 32 31 31 20 53 51  ct monoBug211 SQ
f3e0: 4c 69 74 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Lite System.Data
f3f0: 2e 53 51 4c 69 74 65 5c 0d 0a 64 65 66 69 6e 65  .SQLite\..define
f400: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
f410: 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45  Data.SQLite.INTE
f420: 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
f430: 45 7d 20 2d 72 65 73 75 6c 74 20 7b 7d 7d 0d 0a  E} -result {}}..
f440: 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
f450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f490: 23 0d 0a 0d 0a 72 65 6e 61 6d 65 20 6e 6f 72 6d  #....rename norm
f4a0: 61 6c 69 7a 65 56 74 61 62 52 65 73 75 6c 74 20  alizeVtabResult 
f4b0: 22 22 0d 0a 0d 0a 23 23 23 23 23 23 23 23 23 23  ""....##########
f4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f500: 23 23 23 23 23 0d 0a 0d 0a 72 75 6e 53 51 4c 69  #####....runSQLi
f510: 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 0d 0a  teTestEpilogue..
f520: 72 75 6e 54 65 73 74 45 70 69 6c 6f 67 75 65 0d  runTestEpilogue.
f530: 0a                                               .