System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5d54bf5a6b06e554af019dea259d283a03e5f02a:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 4a 6f   * Written by Jo
0080: 65 20 4d 69 73 74 61 63 68 6b 69 6e 20 28 6a 6f  e Mistachkin (jo
0090: 65 40 6d 69 73 74 61 63 68 6b 69 6e 2e 63 6f 6d  e@mistachkin.com
00a0: 29 0d 0a 20 2a 0d 0a 20 2a 20 52 65 6c 65 61 73  ).. *.. * Releas
00b0: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00c0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at 
00d0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00e0: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0d 0a 0d 0a 75 73  *********/....us
0120: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65  ing System.Colle
0130: 63 74 69 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d  ctions.Generic;.
0140: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c  .using System.Gl
0150: 6f 62 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 75 73  obalization;..us
0160: 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69  ing System.Runti
0170: 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63  me.InteropServic
0180: 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  es;..using Syste
0190: 6d 2e 54 65 78 74 3b 0d 0a 0d 0a 6e 61 6d 65 73  m.Text;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 43 6f  #region SQLiteCo
01d0: 6e 74 65 78 74 20 48 65 6c 70 65 72 20 43 6c 61  ntext Helper Cla
01e0: 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ss..    /// <sum
01f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
0200: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
0210: 65 6e 74 73 20 61 20 63 6f 6e 74 65 78 74 20 66  ents a context f
0220: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
0230: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
0240: 20 63 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 62 65   can..    /// be
0250: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
0260: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 2a 28  qlite3_result_*(
0270: 29 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64  ) and associated
0280: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
0290: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
02a0: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c  .    public seal
02b0: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 43  ed class SQLiteC
02c0: 6f 6e 74 65 78 74 20 3a 20 49 53 51 4c 69 74 65  ontext : ISQLite
02d0: 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20  NativeHandle..  
02e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
02f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
0300: 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  a..        /// <
0310: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0320: 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
0330: 20 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 2e   context handle.
0340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
0350: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0360: 20 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72    private IntPtr
0370: 20 70 43 6f 6e 74 65 78 74 3b 0d 0a 20 20 20 20   pContext;..    
0380: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0390: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
03a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
03e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
03f0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
0400: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
0410: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
0430: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
0440: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
0450: 73 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 65  ss using the spe
0460: 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20  cified native.. 
0470: 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 65         /// conte
0480: 78 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  xt handle...    
0490: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
04a0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
04b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6f  <param name="pCo
04c0: 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20 20 20  ntext">..       
04d0: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
04e0: 63 6f 6e 74 65 78 74 20 68 61 6e 64 6c 65 20 74  context handle t
04f0: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  o use...        
0500: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0510: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
0520: 51 4c 69 74 65 43 6f 6e 74 65 78 74 28 49 6e 74  QLiteContext(Int
0530: 50 74 72 20 70 43 6f 6e 74 65 78 74 29 0d 0a 20  Ptr pContext).. 
0540: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0550: 20 20 20 20 20 20 74 68 69 73 2e 70 43 6f 6e 74        this.pCont
0560: 65 78 74 20 3d 20 70 43 6f 6e 74 65 78 74 3b 0d  ext = pContext;.
0570: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
0580: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0590: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
05f0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
0600: 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73  veHandle Members
0610: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
0620: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
0630: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
0640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
0650: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
0660: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
0670: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
0680: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
0690: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
06a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
06b0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
06c0: 75 61 6c 20 49 6e 74 50 74 72 20 4e 61 74 69 76  ual IntPtr Nativ
06d0: 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20  eHandle..       
06e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
06f0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 43 6f  get { return pCo
0700: 6e 74 65 78 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ntext; }..      
0710: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
0720: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
0730: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0780: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
0790: 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
07a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
07b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
07c0: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
07d0: 74 20 72 65 73 75 6c 74 20 74 6f 20 4e 55 4c 4c  t result to NULL
07e0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
07f0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
0800: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
0810: 65 74 4e 75 6c 6c 28 29 0d 0a 20 20 20 20 20 20  etNull()..      
0820: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0830: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0840: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0860: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0870: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0880: 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on();....       
0890: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
08a0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
08b0: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 70 43 6f  _result_null(pCo
08c0: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20  ntext);..       
08d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
08e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0930: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0940: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
0950: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73   the context res
0960: 75 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69  ult to the speci
0970: 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
0980: 53 79 73 74 65 6d 2e 44 6f 75 62 6c 65 22 20 2f  System.Double" /
0990: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  >..        /// v
09a0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
09b0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
09c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
09d0: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
09e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
09f0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
0a00: 65 6d 2e 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61  em.Double" /> va
0a10: 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20  lue to use...   
0a20: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
0a30: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
0a40: 63 20 76 6f 69 64 20 53 65 74 44 6f 75 62 6c 65  c void SetDouble
0a50: 28 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a  (double value)..
0a60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
0a70: 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74         if (pCont
0a80: 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ext == IntPtr.Ze
0a90: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
0aa0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
0ab0: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
0ac0: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 23  xception();....#
0ad0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
0ae0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
0af0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
0b00: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
0b10: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
0b20: 75 62 6c 65 28 70 43 6f 6e 74 65 78 74 2c 20 76  uble(pContext, v
0b30: 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53  alue);..#elif !S
0b40: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
0b60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0b70: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
0b80: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 43  ouble_interop(pC
0b90: 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c 75  ontext, ref valu
0ba0: 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  e);..#else..    
0bb0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
0bc0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
0bd0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
0be0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
0bf0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
0c50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0c60: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
0c70: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
0c80: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
0c90: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73  d <see cref="Sys
0ca0: 74 65 6d 2e 49 6e 74 33 32 22 20 2f 3e 0d 0a 20  tem.Int32" />.. 
0cb0: 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
0cc0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
0cd0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
0ce0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0cf0: 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
0d00: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
0d10: 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 49  e cref="System.I
0d20: 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 74  nt32" /> value t
0d30: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  o use...        
0d40: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0d50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
0d60: 64 20 53 65 74 49 6e 74 28 69 6e 74 20 76 61 6c  d SetInt(int val
0d70: 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ue)..        {..
0d80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
0d90: 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50  pContext == IntP
0da0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
0db0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
0dc0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
0dd0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
0de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
0df0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
0e00: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
0e10: 6c 74 5f 69 6e 74 28 70 43 6f 6e 74 65 78 74 2c  lt_int(pContext,
0e20: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
0e30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0e90: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0ea0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74  .        /// Set
0eb0: 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65  s the context re
0ec0: 73 75 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63  sult to the spec
0ed0: 69 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d  ified <see cref=
0ee0: 22 53 79 73 74 65 6d 2e 49 6e 74 36 34 22 20 2f  "System.Int64" /
0ef0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  >..        /// v
0f00: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
0f10: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0f20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
0f30: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
0f40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
0f50: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74   <see cref="Syst
0f60: 65 6d 2e 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c  em.Int64" /> val
0f70: 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  ue to use...    
0f80: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
0f90: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
0fa0: 20 76 6f 69 64 20 53 65 74 49 6e 74 36 34 28 6c   void SetInt64(l
0fb0: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
0fc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0fd0: 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20     if (pContext 
0fe0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
0ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1000: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1010: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1020: 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21  tion();....#if !
1030: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
1040: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
1050: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1060: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1070: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28  e3_result_int64(
1080: 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29  pContext, value)
1090: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
10a0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
10b0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
10c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
10d0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f  e3_result_int64_
10e0: 69 6e 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74  interop(pContext
10f0: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
1100: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1110: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
1120: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
1130: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
1140: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1150: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11a0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
11b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
11c0: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
11d0: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
11e0: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
11f0: 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 53 74   cref="System.St
1200: 72 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20 20  ring" />..      
1210: 20 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20    /// value...  
1220: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1230: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1240: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
1250: 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  alue">..        
1260: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1270: 66 3d 22 53 79 73 74 65 6d 2e 53 74 72 69 6e 67  f="System.String
1280: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
1290: 65 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  e.  This value w
12a0: 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
12b0: 2f 2f 2f 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  /// converted to
12c0: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
12d0: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
12e0: 6e 67 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  ng used...      
12f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1300: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
1310: 6f 69 64 20 53 65 74 53 74 72 69 6e 67 28 73 74  oid SetString(st
1320: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
1330: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1340: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1350: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1370: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1380: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1390: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
13a0: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
13b0: 79 74 65 73 20 3d 20 53 51 4c 69 74 65 53 74 72  ytes = SQLiteStr
13c0: 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74 65 73  ing.GetUtf8Bytes
13d0: 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65  FromString(value
13e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13f0: 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e    if (bytes == n
1400: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1410: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1420: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1430: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
1440: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1450: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1460: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1470: 74 5f 74 65 78 74 28 0d 0a 20 20 20 20 20 20 20  t_text(..       
1480: 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65 78           pContex
1490: 74 2c 20 62 79 74 65 73 2c 20 62 79 74 65 73 2e  t, bytes, bytes.
14a0: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
14b0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
14c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
14d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1520: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1530: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
1540: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
1550: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
1560: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
1570: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
1580: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
1590: 6c 75 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  lue containing a
15a0: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  n error message.
15b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
15d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
15e0: 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
15f0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1600: 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 53 74   cref="System.St
1610: 72 69 6e 67 22 20 2f 3e 20 76 61 6c 75 65 20 63  ring" /> value c
1620: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 72  ontaining the er
1630: 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20  ror message..   
1640: 20 20 20 20 20 2f 2f 2f 20 74 65 78 74 2e 20 20       /// text.  
1650: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
1660: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
1670: 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69  the UTF-8 encodi
1680: 6e 67 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20  ng prior to..   
1690: 20 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 75       /// being u
16a0: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  sed...        //
16b0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
16c0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
16d0: 53 65 74 45 72 72 6f 72 28 73 74 72 69 6e 67 20  SetError(string 
16e0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  value)..        
16f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1700: 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49  f (pContext == I
1710: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1730: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1740: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1750: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1760: 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73 20     byte[] bytes 
1770: 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 47  = SQLiteString.G
1780: 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53  etUtf8BytesFromS
1790: 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a 0d  tring(value);...
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
17b0: 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  (bytes == null).
17c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d0: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
17e0: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
17f0: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
1800: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
1810: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
1820: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
1830: 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
1840: 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 62       pContext, b
1850: 79 74 65 73 2c 20 62 79 74 65 73 2e 4c 65 6e 67  ytes, bytes.Leng
1860: 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  th);..        }.
1870: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
18d0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18e0: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
18f0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
1900: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
1910: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  d <see cref="SQL
1920: 69 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f 3e  iteErrorCode" />
1930: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
1940: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
1950: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1960: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1970: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
1980: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1990: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
19a0: 65 45 72 72 6f 72 43 6f 64 65 22 20 2f 3e 20 76  eErrorCode" /> v
19b0: 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20  alue to use...  
19c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
19d0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
19e0: 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f 72  ic void SetError
19f0: 43 6f 64 65 28 53 51 4c 69 74 65 45 72 72 6f 72  Code(SQLiteError
1a00: 43 6f 64 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  Code value)..   
1a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a20: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1a30: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a50: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1a60: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1a70: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1a80: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
1a90: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1aa0: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
1ab0: 5f 63 6f 64 65 28 70 43 6f 6e 74 65 78 74 2c 20  _code(pContext, 
1ac0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
1ad0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1b30: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1b40: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
1b50: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73   the context res
1b60: 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ult to contain t
1b70: 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 53 51  he error code SQ
1b80: 4c 49 54 45 5f 54 4f 4f 42 49 47 2e 0d 0a 20 20  LITE_TOOBIG...  
1b90: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1ba0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
1bb0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72 72  blic void SetErr
1bc0: 6f 72 54 6f 6f 42 69 67 28 29 0d 0a 20 20 20 20  orTooBig()..    
1bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1be0: 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20     if (pContext 
1bf0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
1c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c10: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
1c20: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
1c30: 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  tion();....     
1c40: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
1c50: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
1c60: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 5f  e3_result_error_
1c70: 74 6f 6f 62 69 67 28 70 43 6f 6e 74 65 78 74 29  toobig(pContext)
1c80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1c90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ce0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1cf0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1d00: 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63    /// Sets the c
1d10: 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f  ontext result to
1d20: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 65 72 72   contain the err
1d30: 6f 72 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 4e  or code SQLITE_N
1d40: 4f 4d 45 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  OMEM...        /
1d50: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1d60: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
1d70: 69 64 20 53 65 74 45 72 72 6f 72 4e 6f 4d 65 6d  id SetErrorNoMem
1d80: 6f 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ory()..        {
1d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1da0: 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e   (pContext == In
1db0: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1dd0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1de0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1df0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e00: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
1e10: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65  thods.sqlite3_re
1e20: 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65 6d  sult_error_nomem
1e30: 28 70 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  (pContext);..   
1e40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1ea0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1eb0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1ec0: 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78 74  Sets the context
1ed0: 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20 73   result to the s
1ee0: 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
1ef0: 65 66 3d 22 53 79 73 74 65 6d 2e 42 79 74 65 5b  ef="System.Byte[
1f00: 5d 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ]" />..        /
1f10: 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  // value...     
1f20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1f30: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1f40: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
1f50: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
1f60: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1f70: 53 79 73 74 65 6d 2e 42 79 74 65 5b 5d 22 20 2f  System.Byte[]" /
1f80: 3e 20 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d  > value to use..
1f90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1fa0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
1fb0: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 42 6c  ublic void SetBl
1fc0: 6f 62 28 62 79 74 65 5b 5d 20 76 61 6c 75 65 29  ob(byte[] value)
1fd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1fe0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
1ff0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
2000: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
2010: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2020: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
2030: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
2040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2050: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2070: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
2080: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
2090: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
20a0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
20b0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
20c0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f  lite3_result_blo
20d0: 62 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b(..            
20e0: 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 76 61      pContext, va
20f0: 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
2100: 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
2110: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2120: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2170: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2180: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2190: 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63    /// Sets the c
21a0: 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f  ontext result to
21b0: 20 61 20 42 4c 4f 42 20 6f 66 20 7a 65 72 6f 73   a BLOB of zeros
21c0: 20 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65   of the specifie
21d0: 64 20 73 69 7a 65 2e 0d 0a 20 20 20 20 20 20 20  d size...       
21e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
21f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
2200: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
2210: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
2220: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 7a 65 72  he number of zer
2230: 6f 20 62 79 74 65 73 20 74 6f 20 75 73 65 20 66  o bytes to use f
2240: 6f 72 20 74 68 65 20 42 4c 4f 42 20 63 6f 6e 74  or the BLOB cont
2250: 65 78 74 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20  ext result...   
2260: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2270: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
2280: 63 20 76 6f 69 64 20 53 65 74 5a 65 72 6f 42 6c  c void SetZeroBl
2290: 6f 62 28 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20  ob(int value).. 
22a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22b0: 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65        if (pConte
22c0: 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  xt == IntPtr.Zer
22d0: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
22e0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
22f0: 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
2300: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20  ception();....  
2310: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2320: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2330: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 7a 65 72  lite3_result_zer
2340: 6f 62 6c 6f 62 28 70 43 6f 6e 74 65 78 74 2c 20  oblob(pContext, 
2350: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
2360: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23d0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73          /// Sets
23e0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73   the context res
23f0: 75 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69  ult to the speci
2400: 66 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22  fied <see cref="
2410: 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f 3e 2e  SQLiteValue" />.
2420: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2430: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2440: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2450: 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
2460: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
2470: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c   cref="SQLiteVal
2480: 75 65 22 20 2f 3e 20 74 6f 20 75 73 65 2e 0d 0a  ue" /> to use...
2490: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
24a0: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
24b0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
24c0: 75 65 28 53 51 4c 69 74 65 56 61 6c 75 65 20 76  ue(SQLiteValue v
24d0: 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  alue)..        {
24e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24f0: 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49 6e   (pContext == In
2500: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
2510: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2520: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
2530: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
2540: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2550: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
2560: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2570: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2580: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
2590: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
25a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
25b0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
25c0: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
25d0: 74 5f 76 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  t_value(..      
25e0: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65            pConte
25f0: 78 74 2c 20 76 61 6c 75 65 2e 4e 61 74 69 76 65  xt, value.Native
2600: 48 61 6e 64 6c 65 29 3b 0d 0a 20 20 20 20 20 20  Handle);..      
2610: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2620: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
2630: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2640: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2690: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
26a0: 20 53 51 4c 69 74 65 56 61 6c 75 65 20 48 65 6c   SQLiteValue Hel
26b0: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 70  per Class..    p
26c0: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
26d0: 73 73 20 53 51 4c 69 74 65 56 61 6c 75 65 20 3a  ss SQLiteValue :
26e0: 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61   ISQLiteNativeHa
26f0: 6e 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ndle..    {..   
2700: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2710: 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
2720: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2730: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
2740: 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20 68  e native value h
2750: 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  andle...        
2760: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2770: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2780: 49 6e 74 50 74 72 20 70 56 61 6c 75 65 3b 0d 0a  IntPtr pValue;..
2790: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
27a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
27b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2800: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
2810: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
2820: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2830: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
2840: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
2850: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
2860: 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65   class using the
2870: 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69 76   specified nativ
2880: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
2890: 61 6c 75 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  alue handle...  
28a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
28b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
28c0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
28d0: 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20 20  Context">..     
28e0: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
28f0: 65 20 76 61 6c 75 65 20 68 61 6e 64 6c 65 20 74  e value handle t
2900: 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  o use...        
2910: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2920: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
2930: 51 4c 69 74 65 56 61 6c 75 65 28 49 6e 74 50 74  QLiteValue(IntPt
2940: 72 20 70 56 61 6c 75 65 29 0d 0a 20 20 20 20 20  r pValue)..     
2950: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2960: 20 20 74 68 69 73 2e 70 56 61 6c 75 65 20 3d 20    this.pValue = 
2970: 70 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  pValue;..       
2980: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2990: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2a00: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
2a10: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2a20: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2a30: 20 49 6e 76 61 6c 69 64 61 74 65 73 20 74 68 65   Invalidates the
2a40: 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20 68 61   native value ha
2a50: 6e 64 6c 65 2c 20 74 68 65 72 65 62 79 20 70 72  ndle, thereby pr
2a60: 65 76 65 6e 74 69 6e 67 20 66 75 72 74 68 65 72  eventing further
2a70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 63  ..        /// ac
2a80: 63 65 73 73 20 74 6f 20 69 74 20 66 72 6f 6d 20  cess to it from 
2a90: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74  this object inst
2aa0: 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ance...        /
2ab0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2ac0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
2ad0: 6f 69 64 20 50 72 65 76 65 6e 74 4e 61 74 69 76  oid PreventNativ
2ae0: 65 41 63 63 65 73 73 28 29 0d 0a 20 20 20 20 20  eAccess()..     
2af0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b00: 20 20 70 56 61 6c 75 65 20 3d 20 49 6e 74 50 74    pValue = IntPt
2b10: 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20  r.Zero;..       
2b20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2b30: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2b40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b90: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
2ba0: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
2bb0: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
2bc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
2be0: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
2bf0: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
2c00: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
2c10: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
2c20: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
2c30: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
2c40: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2c50: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
2c60: 6c 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50  lic virtual IntP
2c70: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
2c80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2c90: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2ca0: 74 75 72 6e 20 70 56 61 6c 75 65 3b 20 7d 0d 0a  turn pValue; }..
2cb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2cc0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2cd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2d30: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
2d40: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70  rties..        p
2d50: 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72 73  rivate bool pers
2d60: 69 73 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  isted;..        
2d70: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2d80: 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
2d90: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
2da0: 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
2db0: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
2dc0: 73 75 63 63 65 73 73 66 75 6c 6c 79 0d 0a 20 20  successfully..  
2dd0: 20 20 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73        /// persis
2de0: 74 65 64 20 61 73 20 61 20 6d 61 6e 61 67 65 64  ted as a managed
2df0: 20 76 61 6c 75 65 20 77 69 74 68 69 6e 20 74 68   value within th
2e00: 69 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  is object instan
2e10: 63 65 20 28 69 2e 65 2e 20 74 68 65 0d 0a 20 20  ce (i.e. the..  
2e20: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
2e30: 72 65 66 3d 22 56 61 6c 75 65 22 20 2f 3e 20 70  ref="Value" /> p
2e40: 72 6f 70 65 72 74 79 20 6d 61 79 20 74 68 65 6e  roperty may then
2e50: 20 62 65 20 72 65 61 64 20 73 75 63 63 65 73 73   be read success
2e60: 66 75 6c 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20  fully)...       
2e70: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2e80: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2e90: 62 6f 6f 6c 20 50 65 72 73 69 73 74 65 64 0d 0a  bool Persisted..
2ea0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2eb0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2ec0: 75 72 6e 20 70 65 72 73 69 73 74 65 64 3b 20 7d  urn persisted; }
2ed0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2ee0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f30: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2f40: 65 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d  e object value;.
2f50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
2f60: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2f70: 2f 2f 2f 20 49 66 20 74 68 65 20 6d 61 6e 61 67  /// If the manag
2f80: 65 64 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69  ed value for thi
2f90: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
2fa0: 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28  e is available (
2fb0: 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 20  i.e. it..       
2fc0: 20 2f 2f 2f 20 68 61 73 20 62 65 65 6e 20 70 72   /// has been pr
2fd0: 65 76 69 6f 75 73 6c 79 20 70 65 72 73 69 73 74  eviously persist
2fe0: 65 64 20 76 69 61 20 74 68 65 20 3c 73 65 65 20  ed via the <see 
2ff0: 63 72 65 66 3d 22 50 65 72 73 69 73 74 22 2f 3e  cref="Persist"/>
3000: 29 20 6d 65 74 68 6f 64 2c 0d 0a 20 20 20 20 20  ) method,..     
3010: 20 20 20 2f 2f 2f 20 74 68 61 74 20 76 61 6c 75     /// that valu
3020: 65 20 69 73 20 72 65 74 75 72 6e 65 64 3b 20 6f  e is returned; o
3030: 74 68 65 72 77 69 73 65 2c 20 61 6e 20 65 78 63  therwise, an exc
3040: 65 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77 6e  eption is thrown
3050: 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  .  The..        
3060: 2f 2f 2f 20 72 65 74 75 72 6e 65 64 20 76 61 6c  /// returned val
3070: 75 65 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e 0d  ue may be null..
3080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3090: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30a0: 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 56   public object V
30b0: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  alue..        {.
30c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
30d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f0: 20 69 66 20 28 21 70 65 72 73 69 73 74 65 64 29   if (!persisted)
3100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3120: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
3130: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
3140: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3160: 20 20 20 20 20 20 20 22 76 61 6c 75 65 20 77 61         "value wa
3170: 73 20 6e 6f 74 20 70 65 72 73 69 73 74 65 64 22  s not persisted"
3180: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31b0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
31c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
31d0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
31e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3240: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
3250: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
3260: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3270: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65  ..        /// Ge
3280: 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  ts and returns t
3290: 68 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79  he type affinity
32a0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
32b0: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
32c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
32d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
32e0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
32f0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 74 79 70       /// The typ
3300: 65 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f 63  e affinity assoc
3310: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
3320: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
3330: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
3340: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
3350: 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 54  ypeAffinity GetT
3360: 79 70 65 41 66 66 69 6e 69 74 79 28 29 0d 0a 20  ypeAffinity().. 
3370: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3380: 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
3390: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
33a0: 20 72 65 74 75 72 6e 20 54 79 70 65 41 66 66 69   return TypeAffi
33b0: 6e 69 74 79 2e 4e 6f 6e 65 3b 0d 0a 20 20 20 20  nity.None;..    
33c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
33d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
33e0: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
33f0: 5f 74 79 70 65 28 70 56 61 6c 75 65 29 3b 0d 0a  _type(pValue);..
3400: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3410: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3460: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
3470: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
3480: 2f 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75  // Gets and retu
3490: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
34a0: 66 20 62 79 74 65 73 20 61 73 73 6f 63 69 61 74  f bytes associat
34b0: 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61 6c  ed with this val
34c0: 75 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 20 20  ue, if..        
34d0: 2f 2f 2f 20 69 74 20 72 65 66 65 72 73 20 74 6f  /// it refers to
34e0: 20 61 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64   a UTF-8 encoded
34f0: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...      
3500: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3510: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
3520: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
3530: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
3540: 6f 66 20 62 79 74 65 73 20 61 73 73 6f 63 69 61  of bytes associa
3550: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
3560: 6c 75 65 2e 20 20 54 68 65 20 72 65 74 75 72 6e  lue.  The return
3570: 65 64 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ed value..      
3580: 20 20 2f 2f 2f 20 6d 61 79 20 62 65 20 7a 65 72    /// may be zer
3590: 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  o...        /// 
35a0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
35b0: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47      public int G
35c0: 65 74 42 79 74 65 73 28 29 0d 0a 20 20 20 20 20  etBytes()..     
35d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35e0: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
35f0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
3600: 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  urn 0;..        
3610: 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
3620: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
3630: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
3640: 65 73 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20 20  es(pValue);..   
3650: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3660: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36b0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
36c0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
36d0: 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73  Gets and returns
36e0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
36f0: 53 79 73 74 65 6d 2e 49 6e 74 33 32 22 20 2f 3e  System.Int32" />
3700: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3710: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
3720: 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  is value...     
3730: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3740: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
3750: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
3760: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
3770: 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74 33  ref="System.Int3
3780: 32 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64  2" /> associated
3790: 20 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65   with this value
37a0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
37b0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
37c0: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65     public int Ge
37d0: 74 49 6e 74 28 29 0d 0a 20 20 20 20 20 20 20 20  tInt()..        
37e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
37f0: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
3800: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
3810: 20 64 65 66 61 75 6c 74 28 69 6e 74 29 3b 0d 0a   default(int);..
3820: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3830: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
3840: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
3850: 61 6c 75 65 5f 69 6e 74 28 70 56 61 6c 75 65 29  alue_int(pValue)
3860: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
3870: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
38c0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
38d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
38e0: 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20 72    /// Gets and r
38f0: 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20  eturns the <see 
3900: 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 49 6e 74  cref="System.Int
3910: 36 34 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65  64" /> associate
3920: 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20  d with..        
3930: 2f 2f 2f 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  /// this value..
3940: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3950: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3960: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
3970: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
3980: 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73 74 65  <see cref="Syste
3990: 6d 2e 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f  m.Int64" /> asso
39a0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
39b0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
39c0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
39d0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
39e0: 6c 6f 6e 67 20 47 65 74 49 6e 74 36 34 28 29 0d  long GetInt64().
39f0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
3a00: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
3a10: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
3a20: 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  o) return defaul
3a30: 74 28 6c 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20  t(long);....#if 
3a40: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
3a50: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
3a60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
3a70: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
3a80: 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
3a90: 5f 69 6e 74 36 34 28 70 56 61 6c 75 65 29 3b 0d  _int64(pValue);.
3aa0: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
3ab0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
3ac0: 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b       long value;
3ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
3ae0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3af0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
3b00: 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70 56  int64_interop(pV
3b10: 61 6c 75 65 2c 20 6f 75 74 20 76 61 6c 75 65 29  alue, out value)
3b20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
3b30: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65  eturn value;..#e
3b40: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
3b50: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
3b60: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
3b70: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
3b80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3b90: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3be0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
3bf0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3c00: 2f 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72  / Gets and retur
3c10: 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ns the <see cref
3c20: 3d 22 53 79 73 74 65 6d 2e 44 6f 75 62 6c 65 22  ="System.Double"
3c30: 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77   /> associated w
3c40: 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
3c50: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3c60: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
3c70: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
3c80: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
3c90: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
3ca0: 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e 44  e cref="System.D
3cb0: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
3cc0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
3cd0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3ce0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
3cf0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f         public do
3d00: 75 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 29  uble GetDouble()
3d10: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
3d20: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61           if (pVa
3d30: 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lue == IntPtr.Ze
3d40: 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75  ro) return defau
3d50: 6c 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 23  lt(double);....#
3d60: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
3d70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
3d80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3d90: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
3da0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
3db0: 6c 75 65 5f 64 6f 75 62 6c 65 28 70 56 61 6c 75  lue_double(pValu
3dc0: 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  e);..#elif !SQLI
3dd0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
3de0: 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20           double 
3df0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
3e00: 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
3e10: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3e20: 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74  value_double_int
3e30: 65 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74  erop(pValue, out
3e40: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
3e50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
3e60: 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ue;..#else..    
3e70: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
3e80: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
3e90: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
3ea0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
3eb0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3f10: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3f20: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3f30: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
3f40: 65 65 20 63 72 65 66 3d 22 53 79 73 74 65 6d 2e  ee cref="System.
3f50: 53 74 72 69 6e 67 22 20 2f 3e 20 61 73 73 6f 63  String" /> assoc
3f60: 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
3f70: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61 6c      /// this val
3f80: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
3f90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3fa0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
3fb0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
3fc0: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
3fd0: 79 73 74 65 6d 2e 53 74 72 69 6e 67 22 20 2f 3e  ystem.String" />
3fe0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3ff0: 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54 68   this value.  Th
4000: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
4010: 61 6c 75 65 20 69 73 20 63 6f 6e 76 65 72 74 65  alue is converte
4020: 64 20 66 72 6f 6d 20 74 68 65 20 55 54 46 2d 38  d from the UTF-8
4030: 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72 20   encoding prior 
4040: 74 6f 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65  to being returne
4050: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
4060: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4070: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
4080: 67 20 47 65 74 53 74 72 69 6e 67 28 29 0d 0a 20  g GetString().. 
4090: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
40a0: 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65        if (pValue
40b0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
40c0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
40d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
40e0: 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53  n SQLiteString.S
40f0: 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74  tringFromUtf8Int
4100: 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74 42  Ptr(pValue, GetB
4110: 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20 20  ytes());..      
4120: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
4130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4170: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4180: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4190: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74  .        /// Get
41a0: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
41b0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 79 73  e <see cref="Sys
41c0: 74 65 6d 2e 42 79 74 65 5b 5d 22 20 2f 3e 20 61  tem.Byte[]" /> a
41d0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a  ssociated with..
41e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73          /// this
41f0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
4200: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4210: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
4220: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
4230: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
4240: 66 3d 22 53 79 73 74 65 6d 2e 42 79 74 65 5b 5d  f="System.Byte[]
4250: 22 20 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20  " /> associated 
4260: 77 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e  with this value.
4270: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
4280: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
4290: 20 20 70 75 62 6c 69 63 20 62 79 74 65 5b 5d 20    public byte[] 
42a0: 47 65 74 42 6c 6f 62 28 29 0d 0a 20 20 20 20 20  GetBlob()..     
42b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
42c0: 20 20 69 66 20 28 70 56 61 6c 75 65 20 3d 3d 20    if (pValue == 
42d0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 72 65 74  IntPtr.Zero) ret
42e0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
42f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
4300: 4c 69 74 65 4d 61 72 73 68 61 6c 2e 42 79 74 65  LiteMarshal.Byte
4310: 73 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 61 6c  sFromIntPtr(pVal
4320: 75 65 2c 20 47 65 74 42 79 74 65 73 28 29 29 3b  ue, GetBytes());
4330: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
4340: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4390: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
43a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
43b0: 20 2f 2f 2f 20 55 73 65 73 20 74 68 65 20 6e 61   /// Uses the na
43c0: 74 69 76 65 20 76 61 6c 75 65 20 68 61 6e 64 6c  tive value handl
43d0: 65 20 74 6f 20 6f 62 74 61 69 6e 20 61 6e 64 20  e to obtain and 
43e0: 73 74 6f 72 65 20 74 68 65 20 6d 61 6e 61 67 65  store the manage
43f0: 64 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  d value..       
4400: 20 2f 2f 2f 20 66 6f 72 20 74 68 69 73 20 6f 62   /// for this ob
4410: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2c 20 74  ject instance, t
4420: 68 75 73 20 73 61 76 69 6e 67 20 69 74 20 66 6f  hus saving it fo
4430: 72 20 6c 61 74 65 72 20 75 73 65 2e 20 20 54 68  r later use.  Th
4440: 65 20 74 79 70 65 0d 0a 20 20 20 20 20 20 20 20  e type..        
4450: 2f 2f 2f 20 6f 66 20 74 68 65 20 6d 61 6e 61 67  /// of the manag
4460: 65 64 20 76 61 6c 75 65 20 69 73 20 64 65 74 65  ed value is dete
4470: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 74 79  rmined by the ty
4480: 70 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  pe affinity of t
4490: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
44a0: 6e 61 74 69 76 65 20 76 61 6c 75 65 2e 20 20 49  native value.  I
44b0: 66 20 74 68 65 20 74 79 70 65 20 61 66 66 69 6e  f the type affin
44c0: 69 74 79 20 69 73 20 6e 6f 74 20 72 65 63 6f 67  ity is not recog
44d0: 6e 69 7a 65 64 20 62 79 20 74 68 69 73 0d 0a 20  nized by this.. 
44e0: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
44f0: 64 2c 20 6e 6f 20 77 6f 72 6b 20 69 73 20 64 6f  d, no work is do
4500: 6e 65 20 61 6e 64 20 66 61 6c 73 65 20 69 73 20  ne and false is 
4510: 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20  returned...     
4520: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
4530: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
4540: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
4550: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
4560: 66 20 74 68 65 20 6e 61 74 69 76 65 20 76 61 6c  f the native val
4570: 75 65 20 77 61 73 20 70 65 72 73 69 73 74 65 64  ue was persisted
4580: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2e 0d 0a   successfully...
4590: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
45a0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
45b0: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 73  public bool Pers
45c0: 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 7b  ist()..        {
45d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 77  ..            sw
45e0: 69 74 63 68 20 28 47 65 74 54 79 70 65 41 66 66  itch (GetTypeAff
45f0: 69 6e 69 74 79 28 29 29 0d 0a 20 20 20 20 20 20  inity())..      
4600: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4610: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
4620: 70 65 41 66 66 69 6e 69 74 79 2e 55 6e 69 6e 69  peAffinity.Unini
4630: 74 69 61 6c 69 7a 65 64 3a 0d 0a 20 20 20 20 20  tialized:..     
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4660: 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20            value 
4670: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63   PreventNativeAc
46a0: 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  cess();..       
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 72 65 74 75 72 6e 20 28 70 65 72 73 69 73 74   return (persist
46d0: 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20  ed = true);..   
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4700: 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
4710: 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
4720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
4750: 75 65 20 3d 20 47 65 74 49 6e 74 36 34 28 29 3b  ue = GetInt64();
4760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4770: 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e            Preven
4780: 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b  tNativeAccess();
4790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
47a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
47b0: 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72   (persisted = tr
47c0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
47d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
47f0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 44  e TypeAffinity.D
4800: 6f 75 62 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20  ouble:..        
4810: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 47         value = G
4840: 65 74 44 6f 75 62 6c 65 28 29 3b 0d 0a 20 20 20  etDouble();..   
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4860: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
4870: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
48a0: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
48b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
48c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
48d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
48e0: 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74 3a 0d  eAffinity.Text:.
48f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4900: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4920: 76 61 6c 75 65 20 3d 20 47 65 74 53 74 72 69 6e  value = GetStrin
4930: 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  g();..          
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
4950: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
4960: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4980: 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20  turn (persisted 
4990: 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  = true);..      
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
49b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
49c0: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
49d0: 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20  ty.Blob:..      
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
49f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a00: 20 20 20 20 20 20 20 20 20 76 61 6c 75 65 20 3d           value =
4a10: 20 47 65 74 42 79 74 65 73 28 29 3b 0d 0a 20 20   GetBytes();..  
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 20 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74        PreventNat
4a40: 69 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20  iveAccess();..  
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65        return (pe
4a70: 72 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b  rsisted = true);
4a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4aa0: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
4ab0: 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a  peAffinity.Null:
4ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ad0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 76 61 6c 75 65 20 3d 20 44 42 4e 75 6c 6c 2e   value = DBNull.
4b00: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63  PreventNativeAcc
4b30: 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ess();..        
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b50: 72 65 74 75 72 6e 20 28 70 65 72 73 69 73 74 65  return (persiste
4b60: 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  d = true);..    
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4b90: 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20     default:..   
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4bd0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4c00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4c10: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
4c20: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
4c30: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
4c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4c90: 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e  #region SQLiteIn
4ca0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20  dexConstraintOp 
4cb0: 45 6e 75 6d 65 72 61 74 69 6f 6e 0d 0a 20 20 20  Enumeration..   
4cc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
4cd0: 20 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 61 72      /// These ar
4ce0: 65 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76 61  e the allowed va
4cf0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 6f 70 65  lues for the ope
4d00: 72 61 74 6f 72 73 20 74 68 61 74 20 61 72 65 20  rators that are 
4d10: 70 61 72 74 20 6f 66 20 61 0d 0a 20 20 20 20 2f  part of a..    /
4d20: 2f 2f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 65  // constraint te
4d30: 72 6d 20 69 6e 20 74 68 65 20 57 48 45 52 45 20  rm in the WHERE 
4d40: 63 6c 61 75 73 65 20 6f 66 20 61 20 71 75 65 72  clause of a quer
4d50: 79 20 74 68 61 74 20 75 73 65 73 20 61 20 76 69  y that uses a vi
4d60: 72 74 75 61 6c 0d 0a 20 20 20 20 2f 2f 2f 20 74  rtual..    /// t
4d70: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
4d80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
4d90: 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c 69 74  ublic enum SQLit
4da0: 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74  eIndexConstraint
4db0: 4f 70 20 3a 20 62 79 74 65 0d 0a 20 20 20 20 7b  Op : byte..    {
4dc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
4dd0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
4de0: 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20   /// This value 
4df0: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 65  represents the e
4e00: 71 75 61 6c 69 74 79 20 6f 70 65 72 61 74 6f 72  quality operator
4e10: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
4e20: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
4e30: 20 20 20 45 71 75 61 6c 54 6f 20 3d 20 32 2c 0d     EqualTo = 2,.
4e40: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
4e50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
4e60: 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65    /// This value
4e70: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
4e80: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 70 65  greater than ope
4e90: 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  rator...        
4ea0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4eb0: 20 20 20 20 20 20 20 20 47 72 65 61 74 65 72 54          GreaterT
4ec0: 68 61 6e 20 3d 20 34 2c 0d 0a 0d 0a 20 20 20 20  han = 4,....    
4ed0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4ee0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
4ef0: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
4f00: 65 6e 74 73 20 74 68 65 20 6c 65 73 73 20 74 68  ents the less th
4f10: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6f  an or equal to o
4f20: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
4f30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
4f40: 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73 54 68  ..        LessTh
4f50: 61 6e 4f 72 45 71 75 61 6c 54 6f 20 3d 20 38 2c  anOrEqualTo = 8,
4f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
4f70: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
4f80: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75     /// This valu
4f90: 65 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  e represents the
4fa0: 20 6c 65 73 73 20 74 68 61 6e 20 6f 70 65 72 61   less than opera
4fb0: 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tor...        //
4fc0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4fd0: 20 20 20 20 20 20 4c 65 73 73 54 68 61 6e 20 3d        LessThan =
4fe0: 20 31 36 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20   16,....        
4ff0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5000: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
5010: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
5020: 20 74 68 65 20 67 72 65 61 74 65 72 20 74 68 61   the greater tha
5030: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6f 70  n or equal to op
5040: 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20  erator...       
5050: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5060: 0a 20 20 20 20 20 20 20 20 47 72 65 61 74 65 72  .        Greater
5070: 54 68 61 6e 4f 72 45 71 75 61 6c 54 6f 20 3d 20  ThanOrEqualTo = 
5080: 33 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  32,....        /
5090: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
50a0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76        /// This v
50b0: 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
50c0: 74 68 65 20 4d 41 54 43 48 20 6f 70 65 72 61 74  the MATCH operat
50d0: 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
50e0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
50f0: 20 20 20 20 20 4d 61 74 63 68 20 3d 20 36 34 0d       Match = 64.
5100: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
5110: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5170: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 49   #region SQLiteI
5180: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 20 48  ndexConstraint H
5190: 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20  elper Class..   
51a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
51b0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
51c0: 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  ss represents th
51d0: 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
51e0: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
51f0: 74 20 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20  t structure..   
5200: 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 53 51   /// from the SQ
5210: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
5220: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  y...    /// </su
5230: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
5240: 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  ic sealed class 
5250: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
5260: 72 61 69 6e 74 0d 0a 20 20 20 20 7b 0d 0a 20 20  raint..    {..  
5270: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e        #region In
5280: 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74  ternal Construct
5290: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
52a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
52b0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
52c0: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
52d0: 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
52e0: 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
52f0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
5300: 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
5310: 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73 74  ex_constraint st
5320: 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
5330: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5340: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
5350: 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 73 74  aram name="const
5360: 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  raint">..       
5370: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
5380: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
5390: 6e 73 74 72 61 69 6e 74 20 73 74 72 75 63 74 75  nstraint structu
53a0: 72 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  re to use...    
53b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
53c0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
53d0: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  al SQLiteIndexCo
53e0: 6e 73 74 72 61 69 6e 74 28 0d 0a 20 20 20 20 20  nstraint(..     
53f0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
5400: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5410: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
5420: 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 0d 0a  int constraint..
5430: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
5440: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
5450: 73 28 63 6f 6e 73 74 72 61 69 6e 74 2e 69 43 6f  s(constraint.iCo
5460: 6c 75 6d 6e 2c 20 63 6f 6e 73 74 72 61 69 6e 74  lumn, constraint
5470: 2e 6f 70 2c 20 63 6f 6e 73 74 72 61 69 6e 74 2e  .op, constraint.
5480: 75 73 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  usable,..       
5490: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
54a0: 74 72 61 69 6e 74 2e 69 54 65 72 6d 4f 66 66 73  traint.iTermOffs
54b0: 65 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  et)..        {..
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
54d0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
54e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
54f0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5500: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5550: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
5560: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
5570: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ors..        ///
5580: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5590: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
55a0: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
55b0: 66 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69  f this class usi
55c0: 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ng the specified
55d0: 20 66 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20   field..        
55e0: 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  /// values...   
55f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
5600: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
5610: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 43   <param name="iC
5620: 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20 20 20 20 20  olumn">..       
5630: 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c   /// Column on l
5640: 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
5650: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
5660: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
5670: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
5680: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 22  <param name="op"
5690: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
56a0: 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61 74  onstraint operat
56b0: 6f 72 20 28 3c 73 65 65 20 63 72 65 66 3d 22 53  or (<see cref="S
56c0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
56d0: 61 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20 20  aintOp" />)...  
56e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
56f0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
5700: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 75 73 61  <param name="usa
5710: 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ble">..        /
5720: 2f 2f 20 54 72 75 65 20 69 66 20 74 68 69 73 20  // True if this 
5730: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 75 73  constraint is us
5740: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
5750: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
5760: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
5770: 6e 61 6d 65 3d 22 69 54 65 72 6d 4f 66 66 73 65  name="iTermOffse
5780: 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
5790: 20 55 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   Used internally
57a0: 20 2d 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53   - <see cref="IS
57b0: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
57c0: 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e  le.BestIndex" />
57d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 68  ..        /// sh
57e0: 6f 75 6c 64 20 69 67 6e 6f 72 65 2e 0d 0a 20 20  ould ignore...  
57f0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
5800: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  m>..        priv
5810: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ate SQLiteIndexC
5820: 6f 6e 73 74 72 61 69 6e 74 28 0d 0a 20 20 20 20  onstraint(..    
5830: 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c          int iCol
5840: 75 6d 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  umn,..          
5850: 20 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e    SQLiteIndexCon
5860: 73 74 72 61 69 6e 74 4f 70 20 6f 70 2c 0d 0a 20  straintOp op,.. 
5870: 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 20             byte 
5880: 75 73 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  usable,..       
5890: 20 20 20 20 20 69 6e 74 20 69 54 65 72 6d 4f 66       int iTermOf
58a0: 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  fset..          
58b0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
58d0: 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69 43 6f 6c 75  .iColumn = iColu
58e0: 6d 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn;..           
58f0: 20 74 68 69 73 2e 6f 70 20 3d 20 6f 70 3b 0d 0a   this.op = op;..
5900: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
5910: 2e 75 73 61 62 6c 65 20 3d 20 75 73 61 62 6c 65  .usable = usable
5920: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
5930: 68 69 73 2e 69 54 65 72 6d 4f 66 66 73 65 74 20  his.iTermOffset 
5940: 3d 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a  = iTermOffset;..
5950: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5960: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5970: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
5980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
59c0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
59d0: 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73  on Public Fields
59e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
59f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5a00: 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6f 6e 20 6c   /// Column on l
5a10: 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
5a20: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...  
5a30: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5a40: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ary>..        pu
5a50: 62 6c 69 63 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  blic int iColumn
5a60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ab0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
5ac0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5ad0: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
5ae0: 61 69 6e 74 20 6f 70 65 72 61 74 6f 72 20 28 3c  aint operator (<
5af0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
5b00: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 4f  IndexConstraintO
5b10: 70 22 20 2f 3e 29 2e 0d 0a 20 20 20 20 20 20 20  p" />)...       
5b20: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5b30: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
5b40: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
5b50: 72 61 69 6e 74 4f 70 20 6f 70 3b 0d 0a 0d 0a 20  raintOp op;.... 
5b60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5bb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
5bc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5bd0: 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 69 73  /// True if this
5be0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 75   constraint is u
5bf0: 73 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  sable...        
5c00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5c10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
5c20: 79 74 65 20 75 73 61 62 6c 65 3b 0d 0a 0d 0a 20  yte usable;.... 
5c30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5c80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
5c90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
5ca0: 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e 61  /// Used interna
5cb0: 6c 6c 79 20 2d 20 3c 73 65 65 20 63 72 65 66 3d  lly - <see cref=
5cc0: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
5cd0: 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22  odule.BestIndex"
5ce0: 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   />..        ///
5cf0: 20 73 68 6f 75 6c 64 20 69 67 6e 6f 72 65 2e 0d   should ignore..
5d00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5d10: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5d20: 20 70 75 62 6c 69 63 20 69 6e 74 20 69 54 65 72   public int iTer
5d30: 6d 4f 66 66 73 65 74 3b 0d 0a 20 20 20 20 20 20  mOffset;..      
5d40: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
5d50: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
5d60: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
5d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
5dc0: 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65  egion SQLiteInde
5dd0: 78 4f 72 64 65 72 42 79 20 48 65 6c 70 65 72 20  xOrderBy Helper 
5de0: 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Class..    /// <
5df0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5e00: 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70  / This class rep
5e10: 72 65 73 65 6e 74 73 20 74 68 65 20 6e 61 74 69  resents the nati
5e20: 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ve sqlite3_index
5e30: 5f 6f 72 64 65 72 62 79 20 73 74 72 75 63 74 75  _orderby structu
5e40: 72 65 20 66 72 6f 6d 0d 0a 20 20 20 20 2f 2f 2f  re from..    ///
5e50: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
5e60: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
5e70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5e80: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
5e90: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
5ea0: 65 78 4f 72 64 65 72 42 79 0d 0a 20 20 20 20 7b  exOrderBy..    {
5eb0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
5ec0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
5ed0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
5ee0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5ef0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5f00: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5f10: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5f20: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5f30: 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20  fied native..   
5f40: 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
5f50: 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73  _index_orderby s
5f60: 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
5f70: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5f80: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
5f90: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 72 64 65  param name="orde
5fa0: 72 42 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rBy">..        /
5fb0: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 73 71  // The native sq
5fc0: 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65  lite3_index_orde
5fd0: 72 62 79 20 73 74 72 75 63 74 75 72 65 20 74 6f  rby structure to
5fe0: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
5ff0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
6000: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51       internal SQ
6010: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
6020: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  (..            U
6030: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6040: 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
6050: 5f 6f 72 64 65 72 62 79 20 6f 72 64 65 72 42 79  _orderby orderBy
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
6070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74  .            : t
6080: 68 69 73 28 6f 72 64 65 72 42 79 2e 69 43 6f 6c  his(orderBy.iCol
6090: 75 6d 6e 2c 20 6f 72 64 65 72 42 79 2e 64 65 73  umn, orderBy.des
60a0: 63 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  c)..        {.. 
60b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
60c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
60d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
60e0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
60f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6140: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
6150: 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f  ivate Constructo
6160: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
6170: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
6180: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
6190: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
61a0: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
61b0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
61c0: 66 69 65 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f  field..        /
61d0: 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  // values...    
61e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
61f0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6200: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 43 6f  <param name="iCo
6210: 6c 75 6d 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20  lumn">..        
6220: 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65  /// Column numbe
6230: 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
6240: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
6250: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
6260: 65 3d 22 64 65 73 63 22 3e 0d 0a 20 20 20 20 20  e="desc">..     
6270: 20 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72 20     /// True for 
6280: 44 45 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72  DESC.  False for
6290: 20 41 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f   ASC...        /
62a0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
62b0: 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
62c0: 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79 28  iteIndexOrderBy(
62d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
62e0: 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20  t iColumn,..    
62f0: 20 20 20 20 20 20 20 20 62 79 74 65 20 64 65 73          byte des
6300: 63 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  c..            )
6310: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
6320: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 43           this.iC
6330: 6f 6c 75 6d 6e 20 3d 20 69 43 6f 6c 75 6d 6e 3b  olumn = iColumn;
6340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
6350: 69 73 2e 64 65 73 63 20 3d 20 64 65 73 63 3b 0d  is.desc = desc;.
6360: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6370: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6380: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
63e0: 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64  ion Public Field
63f0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
6400: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6410: 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6e 75 6d    /// Column num
6420: 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ber...        //
6430: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6440: 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74        public int
6450: 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20   iColumn;....   
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 0d 0a 0d 0a 20  ///////////.... 
64b0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
64c0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
64d0: 2f 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e  / True for DESC.
64e0: 20 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e    False for ASC.
64f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6500: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6510: 20 20 70 75 62 6c 69 63 20 62 79 74 65 20 64 65    public byte de
6520: 73 63 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  sc;..        #en
6530: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
6540: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6550: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65a0: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
65b0: 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
65c0: 74 72 61 69 6e 74 55 73 61 67 65 20 48 65 6c 70  traintUsage Help
65d0: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
65e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
65f0: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
6600: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6e  represents the n
6610: 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e  ative sqlite3_in
6620: 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75  dex_constraint_u
6630: 73 61 67 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 74  sage..    /// st
6640: 72 75 63 74 75 72 65 20 66 72 6f 6d 20 74 68 65  ructure from the
6650: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
6660: 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  rary...    /// <
6670: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
6680: 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61  ublic sealed cla
6690: 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  ss SQLiteIndexCo
66a0: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20  nstraintUsage.. 
66b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
66c0: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43  egion Internal C
66d0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
66e0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
66f0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6700: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
6710: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
6720: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
6730: 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d  pecified native.
6740: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
6750: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
6760: 72 61 69 6e 74 5f 75 73 61 67 65 20 73 74 72 75  raint_usage stru
6770: 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
6780: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6790: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
67a0: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 73 74 72 61  am name="constra
67b0: 69 6e 74 55 73 61 67 65 22 3e 0d 0a 20 20 20 20  intUsage">..    
67c0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
67d0: 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ve sqlite3_index
67e0: 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67  _constraint_usag
67f0: 65 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 75  e structure to u
6800: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
6810: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
6820: 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69     internal SQLi
6830: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
6840: 74 55 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  tUsage(..       
6850: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
6860: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6870: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
6880: 74 5f 75 73 61 67 65 20 63 6f 6e 73 74 72 61 69  t_usage constrai
6890: 6e 74 55 73 61 67 65 0d 0a 20 20 20 20 20 20 20  ntUsage..       
68a0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
68b0: 20 20 20 20 3a 20 74 68 69 73 28 63 6f 6e 73 74      : this(const
68c0: 72 61 69 6e 74 55 73 61 67 65 2e 61 72 67 76 49  raintUsage.argvI
68d0: 6e 64 65 78 2c 20 63 6f 6e 73 74 72 61 69 6e 74  ndex, constraint
68e0: 55 73 61 67 65 2e 6f 6d 69 74 29 0d 0a 20 20 20  Usage.omit)..   
68f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6900: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
6910: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
6920: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6930: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
6990: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
69a0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
69b0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
69c0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
69d0: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
69e0: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
69f0: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
6a00: 70 65 63 69 66 69 65 64 20 66 69 65 6c 64 0d 0a  pecified field..
6a10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
6a20: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
6a30: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6a40: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
6a50: 6e 61 6d 65 3d 22 61 72 67 76 49 6e 64 65 78 22  name="argvIndex"
6a60: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
6a70: 66 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 30  f greater than 0
6a80: 2c 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  , constraint is 
6a90: 70 61 72 74 20 6f 66 20 61 72 67 76 20 74 6f 20  part of argv to 
6aa0: 78 46 69 6c 74 65 72 2e 0d 0a 20 20 20 20 20 20  xFilter...      
6ab0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
6ac0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
6ad0: 61 6d 20 6e 61 6d 65 3d 22 6f 6d 69 74 22 3e 0d  am name="omit">.
6ae0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 6f 20  .        /// Do 
6af0: 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73 74 20  not code a test 
6b00: 66 6f 72 20 74 68 69 73 20 63 6f 6e 73 74 72 61  for this constra
6b10: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  int...        //
6b20: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
6b30: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
6b40: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
6b50: 74 55 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  tUsage(..       
6b60: 20 20 20 20 20 69 6e 74 20 61 72 67 76 49 6e 64       int argvInd
6b70: 65 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ex,..           
6b80: 20 62 79 74 65 20 6f 6d 69 74 0d 0a 20 20 20 20   byte omit..    
6b90: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6ba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6bb0: 20 20 74 68 69 73 2e 61 72 67 76 49 6e 64 65 78    this.argvIndex
6bc0: 20 3d 20 61 72 67 76 49 6e 64 65 78 3b 0d 0a 20   = argvIndex;.. 
6bd0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
6be0: 6f 6d 69 74 20 3d 20 6f 6d 69 74 3b 0d 0a 20 20  omit = omit;..  
6bf0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6c00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
6c10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6c60: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
6c70: 6e 20 50 75 62 6c 69 63 20 46 69 65 6c 64 73 0d  n Public Fields.
6c80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
6c90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6ca0: 2f 2f 2f 20 49 66 20 67 72 65 61 74 65 72 20 74  /// If greater t
6cb0: 68 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69 6e  han 0, constrain
6cc0: 74 20 69 73 20 70 61 72 74 20 6f 66 20 61 72 67  t is part of arg
6cd0: 76 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a 20  v to xFilter... 
6ce0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
6cf0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
6d00: 75 62 6c 69 63 20 69 6e 74 20 61 72 67 76 49 6e  ublic int argvIn
6d10: 64 65 78 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dex;....        
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 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6d80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 6f  ..        /// Do
6d90: 20 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73 74   not code a test
6da0: 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 73 74 72   for this constr
6db0: 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  aint...        /
6dc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6dd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 79         public by
6de0: 74 65 20 6f 6d 69 74 3b 0d 0a 20 20 20 20 20 20  te omit;..      
6df0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
6e00: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
6e10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
6e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
6e70: 65 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65  egion SQLiteInde
6e80: 78 49 6e 70 75 74 73 20 48 65 6c 70 65 72 20 43  xInputs Helper C
6e90: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
6ea0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
6eb0: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
6ec0: 65 73 65 6e 74 73 20 74 68 65 20 76 61 72 69 6f  esents the vario
6ed0: 75 73 20 69 6e 70 75 74 73 20 70 72 6f 76 69 64  us inputs provid
6ee0: 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65  ed by the SQLite
6ef0: 20 63 6f 72 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c   core..    /// l
6f00: 69 62 72 61 72 79 20 74 6f 20 74 68 65 20 3c 73  ibrary to the <s
6f10: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
6f20: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65  ManagedModule.Be
6f30: 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68  stIndex" /> meth
6f40: 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  od...    /// </s
6f50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
6f60: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
6f70: 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75   SQLiteIndexInpu
6f80: 74 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ts..    {..     
6f90: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72     #region Inter
6fa0: 6e 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  nal Constructors
6fb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
6fc0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
6fd0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
6fe0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
6ff0: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
7000: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7010: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
7020: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f  <param name="nCo
7030: 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20  nstraint">..    
7040: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
7050: 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  er of <see cref=
7060: 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73  "SQLiteIndexCons
7070: 74 72 61 69 6e 74 22 20 2f 3e 20 69 6e 73 74 61  traint" /> insta
7080: 6e 63 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  nces to..       
7090: 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74   /// pre-allocat
70a0: 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20  e space for...  
70b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
70c0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
70d0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4f 72  <param name="nOr
70e0: 64 65 72 42 79 22 3e 0d 0a 20 20 20 20 20 20 20  derBy">..       
70f0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
7100: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
7110: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
7120: 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 73 20 74  " /> instances t
7130: 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  o..        /// p
7140: 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63  re-allocate spac
7150: 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  e for...        
7160: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
7170: 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53        internal S
7180: 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73  QLiteIndexInputs
7190: 28 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74  (int nConstraint
71a0: 2c 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 29 0d  , int nOrderBy).
71b0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
71c0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69          constrai
71d0: 6e 74 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  nts = new SQLite
71e0: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 5b  IndexConstraint[
71f0: 6e 43 6f 6e 73 74 72 61 69 6e 74 5d 3b 0d 0a 20  nConstraint];.. 
7200: 20 20 20 20 20 20 20 20 20 20 20 6f 72 64 65 72             order
7210: 42 79 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65  Bys = new SQLite
7220: 49 6e 64 65 78 4f 72 64 65 72 42 79 5b 6e 4f 72  IndexOrderBy[nOr
7230: 64 65 72 42 79 5d 3b 0d 0a 20 20 20 20 20 20 20  derBy];..       
7240: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
7250: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7260: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
72b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
72c0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
72d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
72e0: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
72f0: 72 61 69 6e 74 5b 5d 20 63 6f 6e 73 74 72 61 69  raint[] constrai
7300: 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nts;..        //
7310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7320: 20 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61       /// An arra
7330: 79 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  y of <see cref="
7340: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
7350: 72 61 69 6e 74 22 20 2f 3e 20 6f 62 6a 65 63 74  raint" /> object
7360: 20 69 6e 73 74 61 6e 63 65 73 2c 0d 0a 20 20 20   instances,..   
7370: 20 20 20 20 20 2f 2f 2f 20 65 61 63 68 20 63 6f       /// each co
7380: 6e 74 61 69 6e 69 6e 67 20 69 6e 66 6f 72 6d 61  ntaining informa
7390: 74 69 6f 6e 20 73 75 70 70 6c 69 65 64 20 62 79  tion supplied by
73a0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
73b0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
73c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
73d0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
73e0: 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  c SQLiteIndexCon
73f0: 73 74 72 61 69 6e 74 5b 5d 20 43 6f 6e 73 74 72  straint[] Constr
7400: 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7b  aints..        {
7410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
7420: 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 73 74  t { return const
7430: 72 61 69 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20  raints; }..     
7440: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
74a0: 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
74b0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 5b 5d 20  eIndexOrderBy[] 
74c0: 6f 72 64 65 72 42 79 73 3b 0d 0a 20 20 20 20 20  orderBys;..     
74d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
74e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e  ..        /// An
74f0: 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63   array of <see c
7500: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
7510: 4f 72 64 65 72 42 79 22 20 2f 3e 20 6f 62 6a 65  OrderBy" /> obje
7520: 63 74 20 69 6e 73 74 61 6e 63 65 73 2c 0d 0a 20  ct instances,.. 
7530: 20 20 20 20 20 20 20 2f 2f 2f 20 65 61 63 68 20         /// each 
7540: 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66 6f 72  containing infor
7550: 6d 61 74 69 6f 6e 20 73 75 70 70 6c 69 65 64 20  mation supplied 
7560: 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
7570: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  re library...   
7580: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
7590: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
75a0: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 4f  lic SQLiteIndexO
75b0: 72 64 65 72 42 79 5b 5d 20 4f 72 64 65 72 42 79  rderBy[] OrderBy
75c0: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
75d0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
75e0: 72 65 74 75 72 6e 20 6f 72 64 65 72 42 79 73 3b  return orderBys;
75f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
7600: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7610: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
7620: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7680: 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
7690: 65 49 6e 64 65 78 4f 75 74 70 75 74 73 20 48 65  eIndexOutputs He
76a0: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
76b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
76c0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73     /// This clas
76d0: 73 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  s represents the
76e0: 20 76 61 72 69 6f 75 73 20 6f 75 74 70 75 74 73   various outputs
76f0: 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
7700: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
7710: 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79 20 62 79    /// library by
7720: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
7730: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
7740: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
7750: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
7760: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7770: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
7780: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e  d class SQLiteIn
7790: 64 65 78 4f 75 74 70 75 74 73 0d 0a 20 20 20 20  dexOutputs..    
77a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
77b0: 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73  on Internal Cons
77c0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
77d0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
77e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e  .        /// Con
77f0: 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61  structs an insta
7800: 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73  nce of this clas
7810: 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
7820: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7830: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7840: 61 6d 65 3d 22 6e 43 6f 6e 73 74 72 61 69 6e 74  ame="nConstraint
7850: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
7860: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73  The number of <s
7870: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
7880: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
7890: 61 67 65 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65  age" /> instance
78a0: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  s..        /// t
78b0: 6f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73  o pre-allocate s
78c0: 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20  pace for...     
78d0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
78e0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
78f0: 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  l SQLiteIndexOut
7900: 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e 73 74 72  puts(int nConstr
7910: 61 69 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 7b  aint)..        {
7920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f  ..            co
7930: 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 20 3d  nstraintUsages =
7940: 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
7950: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b  ConstraintUsage[
7960: 6e 43 6f 6e 73 74 72 61 69 6e 74 5d 3b 0d 0a 20  nConstraint];.. 
7970: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7980: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
7990: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
79a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
79e0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
79f0: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
7a00: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ties..        pr
7a10: 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65  ivate SQLiteInde
7a20: 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65  xConstraintUsage
7a30: 5b 5d 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  [] constraintUsa
7a40: 67 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ges;..        //
7a50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7a60: 20 20 20 20 20 2f 2f 2f 20 41 6e 20 61 72 72 61       /// An arra
7a70: 79 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  y of <see cref="
7a80: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
7a90: 72 61 69 6e 74 55 73 61 67 65 22 20 2f 3e 20 6f  raintUsage" /> o
7aa0: 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
7ab0: 2f 2f 20 69 6e 73 74 61 6e 63 65 73 2c 20 65 61  // instances, ea
7ac0: 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e  ch containing in
7ad0: 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 62 65 20  formation to be 
7ae0: 73 75 70 70 6c 69 65 64 20 74 6f 20 74 68 65 20  supplied to the 
7af0: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..        
7b00: 2f 2f 2f 20 63 6f 72 65 20 6c 69 62 72 61 72 79  /// core library
7b10: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7b20: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7b30: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
7b40: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
7b50: 73 61 67 65 5b 5d 20 43 6f 6e 73 74 72 61 69 6e  sage[] Constrain
7b60: 74 55 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20  tUsages..       
7b70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7b80: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e  get { return con
7b90: 73 74 72 61 69 6e 74 55 73 61 67 65 73 3b 20 7d  straintUsages; }
7ba0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
7bb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7c00: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
7c10: 65 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65  e int indexNumbe
7c20: 72 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r;..        /// 
7c30: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
7c40: 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73     /// Number us
7c50: 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74  ed to help ident
7c60: 69 66 79 20 74 68 65 20 73 65 6c 65 63 74 65 64  ify the selected
7c70: 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 76 61   index.  This va
7c80: 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20  lue will..      
7c90: 20 20 2f 2f 2f 20 6c 61 74 65 72 20 62 65 20 70    /// later be p
7ca0: 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 20 3c  rovided to the <
7cb0: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
7cc0: 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46  eManagedModule.F
7cd0: 69 6c 74 65 72 22 20 2f 3e 0d 0a 20 20 20 20 20  ilter" />..     
7ce0: 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a     /// method...
7cf0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
7d00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7d10: 70 75 62 6c 69 63 20 69 6e 74 20 49 6e 64 65 78  public int Index
7d20: 4e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20  Number..        
7d30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
7d40: 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65  et { return inde
7d50: 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20  xNumber; }..    
7d60: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
7d70: 64 65 78 4e 75 6d 62 65 72 20 3d 20 76 61 6c 75  dexNumber = valu
7d80: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
7d90: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
7da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
7df0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 69 6e 64  ivate string ind
7e00: 65 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20  exString;..     
7e10: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
7e20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74  ..        /// St
7e30: 72 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c  ring used to hel
7e40: 70 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73  p identify the s
7e50: 65 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 20 20  elected index.  
7e60: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d  This value will.
7e70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74  .        /// lat
7e80: 65 72 20 62 65 20 70 72 6f 76 69 64 65 64 20 74  er be provided t
7e90: 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
7ea0: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
7eb0: 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e  odule.Filter" />
7ec0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
7ed0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
7ee0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7ef0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7f00: 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69 6e 67  ring IndexString
7f10: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
7f20: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
7f30: 65 74 75 72 6e 20 69 6e 64 65 78 53 74 72 69 6e  eturn indexStrin
7f40: 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  g; }..          
7f50: 20 20 73 65 74 20 7b 20 69 6e 64 65 78 53 74 72    set { indexStr
7f60: 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
7f70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7f80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7fd0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7fe0: 69 6e 74 20 6e 65 65 64 54 6f 46 72 65 65 49 6e  int needToFreeIn
7ff0: 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20  dexString;..    
8000: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8010: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
8020: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 69  on-zero if the i
8030: 6e 64 65 78 20 73 74 72 69 6e 67 20 6d 75 73 74  ndex string must
8040: 20 62 65 20 66 72 65 65 64 20 62 79 20 74 68 65   be freed by the
8050: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
8060: 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72        /// librar
8070: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
8080: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8090: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4e      public int N
80a0: 65 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74  eedToFreeIndexSt
80b0: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ring..        {.
80c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
80d0: 20 7b 20 72 65 74 75 72 6e 20 6e 65 65 64 54 6f   { return needTo
80e0: 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b  FreeIndexString;
80f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8100: 73 65 74 20 7b 20 6e 65 65 64 54 6f 46 72 65 65  set { needToFree
8110: 49 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 76 61  IndexString = va
8120: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
8130: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
8140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8190: 70 72 69 76 61 74 65 20 69 6e 74 20 6f 72 64 65  private int orde
81a0: 72 42 79 43 6f 6e 73 75 6d 65 64 3b 0d 0a 20 20  rByConsumed;..  
81b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
81c0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
81d0: 20 54 72 75 65 20 69 66 20 6f 75 74 70 75 74 20   True if output 
81e0: 69 73 20 61 6c 72 65 61 64 79 20 6f 72 64 65 72  is already order
81f0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
8200: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8210: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
8220: 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 0d  OrderByConsumed.
8230: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8240: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
8250: 74 75 72 6e 20 6f 72 64 65 72 42 79 43 6f 6e 73  turn orderByCons
8260: 75 6d 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  umed; }..       
8270: 20 20 20 20 20 73 65 74 20 7b 20 6f 72 64 65 72       set { order
8280: 42 79 43 6f 6e 73 75 6d 65 64 20 3d 20 76 61 6c  ByConsumed = val
8290: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d  ue; }..        }
82a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
8300: 72 69 76 61 74 65 20 64 6f 75 62 6c 65 20 65 73  rivate double es
8310: 74 69 6d 61 74 65 64 43 6f 73 74 3b 0d 0a 20 20  timatedCost;..  
8320: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8330: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
8340: 20 45 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20   Estimated cost 
8350: 6f 66 20 75 73 69 6e 67 20 74 68 69 73 20 69 6e  of using this in
8360: 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
8370: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8380: 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f 75        public dou
8390: 62 6c 65 20 45 73 74 69 6d 61 74 65 64 43 6f 73  ble EstimatedCos
83a0: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
83b0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
83c0: 72 65 74 75 72 6e 20 65 73 74 69 6d 61 74 65 64  return estimated
83d0: 43 6f 73 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Cost; }..       
83e0: 20 20 20 20 20 73 65 74 20 7b 20 65 73 74 69 6d       set { estim
83f0: 61 74 65 64 43 6f 73 74 20 3d 20 76 61 6c 75 65  atedCost = value
8400: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
8410: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
8420: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
8430: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8440: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8490: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
84a0: 74 65 49 6e 64 65 78 20 48 65 6c 70 65 72 20 43  teIndex Helper C
84b0: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
84c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
84d0: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
84e0: 65 73 65 6e 74 73 20 74 68 65 20 76 61 72 69 6f  esents the vario
84f0: 75 73 20 69 6e 70 75 74 73 20 61 6e 64 20 6f 75  us inputs and ou
8500: 74 70 75 74 73 20 75 73 65 64 20 77 69 74 68 20  tputs used with 
8510: 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  the..    /// <se
8520: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
8530: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73  anagedModule.Bes
8540: 74 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f  tIndex" /> metho
8550: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
8560: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
8570: 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  ic sealed class 
8580: 53 51 4c 69 74 65 49 6e 64 65 78 0d 0a 20 20 20  SQLiteIndex..   
8590: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
85a0: 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e  ion Internal Con
85b0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
85c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
85d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a  ..        /// ..
85e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
85f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
8600: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
8610: 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a  "nConstraint">..
8620: 20 20 20 20 20 20 20 20 2f 2f 2f 20 0d 0a 20 20          /// ..  
8630: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
8640: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
8650: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 4f 72  <param name="nOr
8660: 64 65 72 42 79 22 3e 0d 0a 20 20 20 20 20 20 20  derBy">..       
8670: 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f   /// ..        /
8680: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
8690: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51       internal SQ
86a0: 4c 69 74 65 49 6e 64 65 78 28 0d 0a 20 20 20 20  LiteIndex(..    
86b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e          int nCon
86c0: 73 74 72 61 69 6e 74 2c 0d 0a 20 20 20 20 20 20  straint,..      
86d0: 20 20 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72        int nOrder
86e0: 42 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  By..            
86f0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
8700: 20 20 20 20 20 20 20 20 20 20 69 6e 70 75 74 73            inputs
8710: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64   = new SQLiteInd
8720: 65 78 49 6e 70 75 74 73 28 6e 43 6f 6e 73 74 72  exInputs(nConstr
8730: 61 69 6e 74 2c 20 6e 4f 72 64 65 72 42 79 29 3b  aint, nOrderBy);
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 75  ..            ou
8750: 74 70 75 74 73 20 3d 20 6e 65 77 20 53 51 4c 69  tputs = new SQLi
8760: 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 28 6e  teIndexOutputs(n
8770: 43 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 20 20  Constraint);..  
8780: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8790: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
87a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
87f0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
8800: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
8810: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
8820: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
8830: 49 6e 70 75 74 73 20 69 6e 70 75 74 73 3b 0d 0a  Inputs inputs;..
8840: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8850: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8860: 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  // ..        ///
8870: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8880: 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
8890: 74 65 49 6e 64 65 78 49 6e 70 75 74 73 20 49 6e  teIndexInputs In
88a0: 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  puts..        {.
88b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
88c0: 20 7b 20 72 65 74 75 72 6e 20 69 6e 70 75 74 73   { return inputs
88d0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
88e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8930: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
8940: 76 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78  vate SQLiteIndex
8950: 4f 75 74 70 75 74 73 20 6f 75 74 70 75 74 73 3b  Outputs outputs;
8960: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8970: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8980: 20 2f 2f 2f 20 0d 0a 20 20 20 20 20 20 20 20 2f   /// ..        /
8990: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
89a0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
89b0: 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73  LiteIndexOutputs
89c0: 20 4f 75 74 70 75 74 73 0d 0a 20 20 20 20 20 20   Outputs..      
89d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
89e0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6f 75   get { return ou
89f0: 74 70 75 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20  tputs; }..      
8a00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
8a10: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
8a20: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8a30: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a80: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
8a90: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
8aa0: 62 6c 65 20 42 61 73 65 20 43 6c 61 73 73 0d 0a  ble Base Class..
8ab0: 20 20 20 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45      /* NOT SEALE
8ac0: 44 20 2a 2f 0d 0a 20 20 20 20 70 75 62 6c 69 63  D */..    public
8ad0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 56 69 72   class SQLiteVir
8ae0: 74 75 61 6c 54 61 62 6c 65 20 3a 20 49 53 51 4c  tualTable : ISQL
8af0: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 2c  iteNativeHandle,
8b00: 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20   IDisposable..  
8b10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
8b20: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
8b30: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
8b40: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e  private const in
8b50: 74 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65  t ModuleNameInde
8b60: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
8b70: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e  private const in
8b80: 74 20 44 61 74 61 62 61 73 65 4e 61 6d 65 49 6e  t DatabaseNameIn
8b90: 64 65 78 20 3d 20 31 3b 0d 0a 20 20 20 20 20 20  dex = 1;..      
8ba0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
8bb0: 69 6e 74 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64  int TableNameInd
8bc0: 65 78 20 3d 20 32 3b 0d 0a 20 20 20 20 20 20 20  ex = 2;..       
8bd0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
8be0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8c30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
8c40: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
8c50: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 70  ctors..        p
8c60: 75 62 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74  ublic SQLiteVirt
8c70: 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20  ualTable(..     
8c80: 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
8c90: 61 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  arguments..     
8ca0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8cb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8cc0: 20 74 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20   this.arguments 
8cd0: 3d 20 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20  = arguments;..  
8ce0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8cf0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
8d00: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8d50: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
8d60: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
8d70: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ies..        pri
8d80: 76 61 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72  vate string[] ar
8d90: 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20  guments;..      
8da0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
8db0: 20 73 74 72 69 6e 67 5b 5d 20 41 72 67 75 6d 65   string[] Argume
8dc0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nts..        {..
8dd0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
8de0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
8df0: 29 3b 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65  ); return argume
8e00: 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  nts; }..        
8e10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
8e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e60: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8e70: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
8e80: 74 72 69 6e 67 20 4d 6f 64 75 6c 65 4e 61 6d 65  tring ModuleName
8e90: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
8ea0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
8eb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
8ed0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
8ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ef0: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
8f00: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
8f10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8f20: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
8f30: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f50: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
8f60: 65 6e 67 74 68 20 3e 20 4d 6f 64 75 6c 65 4e 61  ength > ModuleNa
8f70: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
8f80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e    return argumen
8fb0: 74 73 5b 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64  ts[ModuleNameInd
8fc0: 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex];..          
8fd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8fe0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9010: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
9020: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
9030: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9040: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9050: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
9060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90a0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
90b0: 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72  blic virtual str
90c0: 69 6e 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65  ing DatabaseName
90d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
90e0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
90f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9110: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9130: 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
9140: 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b  nts = Arguments;
9150: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9160: 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e      if ((argumen
9170: 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ts != null) &&..
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9190: 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c      (arguments.L
91a0: 65 6e 67 74 68 20 3e 20 44 61 74 61 62 61 73 65  ength > Database
91b0: 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20  NameIndex))..   
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d      return argum
91f0: 65 6e 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d  ents[DatabaseNam
9200: 65 49 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  eIndex];..      
9210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
9230: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
9240: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9250: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9260: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
9270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9280: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9290: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
92a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
92f0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
9300: 20 73 74 72 69 6e 67 20 54 61 62 6c 65 4e 61 6d   string TableNam
9310: 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  e..        {..  
9320: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
9330: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
9350: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
9360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9370: 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d    string[] argum
9380: 65 6e 74 73 20 3d 20 41 72 67 75 6d 65 6e 74 73  ents = Arguments
9390: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
93a0: 20 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65       if ((argume
93b0: 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d  nts != null) &&.
93c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
93d0: 20 20 20 20 20 28 61 72 67 75 6d 65 6e 74 73 2e       (arguments.
93e0: 4c 65 6e 67 74 68 20 3e 20 54 61 62 6c 65 4e 61  Length > TableNa
93f0: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
9400: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e    return argumen
9430: 74 73 5b 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65  ts[TableNameInde
9440: 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
9450: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9460: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9490: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
94a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
94b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
94c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
94d0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
94e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9540: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
9550: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
9560: 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20   public virtual 
9570: 62 6f 6f 6c 20 52 65 6e 61 6d 65 28 0d 0a 20 20  bool Rename(..  
9580: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9590: 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20   name..         
95a0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
95b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65  .            Che
95c0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
95d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
95e0: 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20 6e  ((arguments != n
95f0: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
9600: 20 20 20 20 20 20 20 20 20 28 61 72 67 75 6d 65           (argume
9610: 6e 74 73 2e 4c 65 6e 67 74 68 20 3e 20 54 61 62  nts.Length > Tab
9620: 6c 65 4e 61 6d 65 49 6e 64 65 78 29 29 0d 0a 20  leNameIndex)).. 
9630: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
9650: 67 75 6d 65 6e 74 73 5b 54 61 62 6c 65 4e 61 6d  guments[TableNam
9660: 65 49 6e 64 65 78 5d 20 3d 20 6e 61 6d 65 3b 0d  eIndex] = name;.
9670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9680: 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
9690: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
96b0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
96c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
96d0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
96e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9730: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
9740: 53 51 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64  SQLiteNativeHand
9750: 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
9760: 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 74 50      private IntP
9770: 74 72 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b  tr nativeHandle;
9780: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
9790: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
97a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
97b0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51 4c 69   underlying SQLi
97c0: 74 65 20 6e 61 74 69 76 65 20 68 61 6e 64 6c 65  te native handle
97d0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
97e0: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
97f0: 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  // object instan
9800: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ce...        ///
9810: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9820: 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
9830: 75 61 6c 20 49 6e 74 50 74 72 20 4e 61 74 69 76  ual IntPtr Nativ
9840: 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20  eHandle..       
9850: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9860: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
9870: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6e 61  sed(); return na
9880: 74 69 76 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20  tiveHandle; }.. 
9890: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 65 72             inter
98a0: 6e 61 6c 20 73 65 74 20 7b 20 6e 61 74 69 76 65  nal set { native
98b0: 48 61 6e 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20  Handle = value; 
98c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
98d0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
98e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
98f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9930: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
9940: 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62  region IDisposab
9950: 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  le Members..    
9960: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
9970: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
9980: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9990: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
99a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 43  ..            GC
99b0: 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a  .SuppressFinaliz
99c0: 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20  e(this);..      
99d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
99e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
99f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9a40: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
9a50: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
9a60: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
9a70: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
9a80: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
9a90: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
9aa0: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
9ab0: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
9ac0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
9ad0: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
9ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
9af0: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
9b00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9b10: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
9b20: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
9b30: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
9b60: 56 69 72 74 75 61 6c 54 61 62 6c 65 29 2e 4e 61  VirtualTable).Na
9b70: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
9b80: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20    }..#endif..   
9b90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9ba0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9bf0: 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
9c00: 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69 73 70  irtual void Disp
9c10: 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
9c20: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng)..        {..
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9c40: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
9c50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9c60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20             //if 
9c70: 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20  (disposing)..   
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b               //{
9c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ca0: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
9cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9ce0: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
9cf0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
9d00: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
9d10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
9d50: 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20        //}....   
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
9da0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
9db0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
9dc0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
9de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9e10: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
9e20: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
9e30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9e40: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
9e50: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
9e60: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
9e70: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9ec0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
9ed0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
9ee0: 65 43 75 72 73 6f 72 20 42 61 73 65 20 43 6c 61  eCursor Base Cla
9ef0: 73 73 0d 0a 20 20 20 20 2f 2a 20 4e 4f 54 20 53  ss..    /* NOT S
9f00: 45 41 4c 45 44 20 2a 2f 0d 0a 20 20 20 20 70 75  EALED */..    pu
9f10: 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  blic class SQLit
9f20: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
9f30: 73 6f 72 20 3a 20 49 53 51 4c 69 74 65 4e 61 74  sor : ISQLiteNat
9f40: 69 76 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70  iveHandle, IDisp
9f50: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  osable..    {.. 
9f60: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
9f70: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
9f80: 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  rs..        publ
9f90: 69 63 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  ic SQLiteVirtual
9fa0: 54 61 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20  TableCursor(..  
9fb0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
9fc0: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
9fd0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
9fe0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
9ff0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
a000: 61 62 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20  able = table;.. 
a010: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a020: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a030: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a080: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
a090: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
a0a0: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ties..        pr
a0b0: 69 76 61 74 65 20 53 51 4c 69 74 65 56 69 72 74  ivate SQLiteVirt
a0c0: 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d  ualTable table;.
a0d0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
a0e0: 76 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 69  virtual SQLiteVi
a0f0: 72 74 75 61 6c 54 61 62 6c 65 20 54 61 62 6c 65  rtualTable Table
a100: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a110: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
a120: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
a130: 72 65 74 75 72 6e 20 74 61 62 6c 65 3b 20 7d 0d  return table; }.
a140: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
a150: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a1a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
a1b0: 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72   int indexNumber
a1c0: 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ;..        publi
a1d0: 63 20 76 69 72 74 75 61 6c 20 69 6e 74 20 49 6e  c virtual int In
a1e0: 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20 20 20 20  dexNumber..     
a1f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a200: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
a210: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
a220: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a  indexNumber; }..
a230: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a240: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a290: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a2a0: 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
a2b0: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ng;..        pub
a2c0: 6c 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69  lic virtual stri
a2d0: 6e 67 20 49 6e 64 65 78 53 74 72 69 6e 67 0d 0a  ng IndexString..
a2e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a2f0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
a300: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
a310: 74 75 72 6e 20 69 6e 64 65 78 53 74 72 69 6e 67  turn indexString
a320: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ; }..        }..
a330: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
a340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a380: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
a390: 76 61 74 65 20 53 51 4c 69 74 65 56 61 6c 75 65  vate SQLiteValue
a3a0: 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a 20 20 20 20  [] values;..    
a3b0: 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75      public virtu
a3c0: 61 6c 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d  al SQLiteValue[]
a3d0: 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20   Values..       
a3e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a3f0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
a400: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 76 61  sed(); return va
a410: 6c 75 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  lues; }..       
a420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a440: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a490: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f       #region Pro
a4a0: 74 65 63 74 65 64 20 4d 65 74 68 6f 64 73 0d 0a  tected Methods..
a4b0: 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
a4c0: 64 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54 72  d virtual int Tr
a4d0: 79 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 0d  yPersistValues(.
a4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
a4f0: 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65  iteValue[] value
a500: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
a510: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
a520: 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73           int res
a530: 75 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ult = 0;....    
a540: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
a550: 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es != null)..   
a560: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a570: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
a580: 61 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75 65  ach (SQLiteValue
a590: 20 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65 73   value in values
a5a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a5b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a5c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
a5d0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a5f0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
a600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a610: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
a620: 2e 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20 20  .Persist())..   
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a640: 20 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a       result++;..
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a660: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a680: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
a690: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
a6a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
a6b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
a710: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
a720: 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ds..        publ
a730: 69 63 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20  ic virtual void 
a740: 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20  Filter(..       
a750: 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78 4e 75       int indexNu
a760: 6d 62 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  mber,..         
a770: 20 20 20 73 74 72 69 6e 67 20 69 6e 64 65 78 53     string indexS
a780: 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
a790: 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
a7a0: 5d 20 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  ] values..      
a7b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a7c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a7d0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a7e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a7f0: 69 66 20 28 28 76 61 6c 75 65 73 20 21 3d 20 6e  if ((values != n
a800: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
a810: 20 20 20 20 20 20 20 20 20 28 54 72 79 50 65 72           (TryPer
a820: 73 69 73 74 56 61 6c 75 65 73 28 76 61 6c 75 65  sistValues(value
a830: 73 29 20 21 3d 20 76 61 6c 75 65 73 2e 4c 65 6e  s) != values.Len
a840: 67 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20  gth))..         
a850: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a860: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
a870: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
a880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a890: 20 20 20 20 20 20 22 66 61 69 6c 65 64 20 74 6f        "failed to
a8a0: 20 70 65 72 73 69 73 74 20 6f 6e 65 20 6f 72 20   persist one or 
a8b0: 6d 6f 72 65 20 76 61 6c 75 65 73 22 29 3b 0d 0a  more values");..
a8c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a8d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
a8e0: 73 2e 69 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20  s.indexNumber = 
a8f0: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 0d 0a 20 20  indexNumber;..  
a900: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
a910: 6e 64 65 78 53 74 72 69 6e 67 20 3d 20 69 6e 64  ndexString = ind
a920: 65 78 53 74 72 69 6e 67 3b 0d 0a 20 20 20 20 20  exString;..     
a930: 20 20 20 20 20 20 20 74 68 69 73 2e 76 61 6c 75         this.valu
a940: 65 73 20 3d 20 76 61 6c 75 65 73 3b 0d 0a 20 20  es = values;..  
a950: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
a960: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a970: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
a9d0: 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65 48  n ISQLiteNativeH
a9e0: 61 6e 64 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20  andle Members.. 
a9f0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
aa00: 6e 74 50 74 72 20 6e 61 74 69 76 65 48 61 6e 64  ntPtr nativeHand
aa10: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le;..        ///
aa20: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
aa30: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
aa40: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 53  the underlying S
aa50: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 68 61 6e  QLite native han
aa60: 64 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  dle associated w
aa70: 69 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20  ith this..      
aa80: 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20 69 6e 73    /// object ins
aa90: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20  tance...        
aaa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
aab0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
aac0: 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 4e 61  irtual IntPtr Na
aad0: 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20  tiveHandle..    
aae0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aaf0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
ab00: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
ab10: 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 20 7d   nativeHandle; }
ab20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
ab30: 74 65 72 6e 61 6c 20 73 65 74 20 7b 20 6e 61 74  ternal set { nat
ab40: 69 76 65 48 61 6e 64 6c 65 20 3d 20 76 61 6c 75  iveHandle = valu
ab50: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  e; }..        }.
ab60: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
ab70: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
abd0: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
abe0: 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20  sable Members.. 
abf0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
ac00: 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20  id Dispose()..  
ac10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ac20: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
ac30: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
ac40: 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61   GC.SuppressFina
ac50: 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20  lize(this);..   
ac60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ac70: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
ac80: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
acd0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
ace0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
acf0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
ad00: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ad10: 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a  bool disposed;..
ad20: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ad30: 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
ad40: 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
ad50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
ad60: 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53   THROW_ON_DISPOS
ad70: 45 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ED..            
ad80: 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20  if (disposed).. 
ad90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
adb0: 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69  row new ObjectDi
adc0: 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28  sposedException(
add0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ade0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
adf0: 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
ae00: 75 72 73 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20  ursor).Name);.. 
ae10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
ae20: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
ae30: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
ae90: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
aea0: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f  void Dispose(boo
aeb0: 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20  l disposing)..  
aec0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aed0: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
aee0: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
aef0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
af00: 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73      //if (dispos
af10: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
af20: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
af30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
af40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
af70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20         //    // 
af80: 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20  dispose managed 
af90: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
afa0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
afb0: 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f     //    ///////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aff0: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
b000: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b040: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
b050: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
b060: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
b070: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0b0: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
b0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b0d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
b0e0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
b0f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
b100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b140: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
b150: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
b160: 0a 20 20 20 20 20 20 20 20 7e 53 51 4c 69 74 65  .        ~SQLite
b170: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
b180: 6f 72 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  or()..        {.
b190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
b1a0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b1b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b1c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
b1d0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
b1e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
b1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
b240: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
b250: 76 65 48 61 6e 64 6c 65 20 49 6e 74 65 72 66 61  veHandle Interfa
b260: 63 65 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69  ce..    public i
b270: 6e 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65  nterface ISQLite
b280: 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20  NativeHandle..  
b290: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74    {..        Int
b2a0: 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65  Ptr NativeHandle
b2b0: 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 7d   { get; }..    }
b2c0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
b2d0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b320: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
b330: 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  on ISQLiteNative
b340: 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61 63 65  Module Interface
b350: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74  ..    public int
b360: 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61  erface ISQLiteNa
b370: 74 69 76 65 4d 6f 64 75 6c 65 0d 0a 20 20 20 20  tiveModule..    
b380: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
b390: 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65 61  eErrorCode xCrea
b3a0: 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
b3b0: 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20   IntPtr pDb,..  
b3c0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
b3d0: 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20   pAux,..        
b3e0: 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20      int argc,.. 
b3f0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
b400: 72 5b 5d 20 61 72 67 76 2c 0d 0a 20 20 20 20 20  r[] argv,..     
b410: 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
b420: 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
b430: 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
b440: 20 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20   pError..       
b450: 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
b460: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b4b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
b4c0: 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28 0d  rCode xConnect(.
b4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
b4e0: 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20  Ptr pDb,..      
b4f0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75        IntPtr pAu
b500: 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
b510: 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20  int argc,..     
b520: 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20         IntPtr[] 
b530: 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20  argv,..         
b540: 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56     ref IntPtr pV
b550: 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
b560: 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45 72    ref IntPtr pEr
b570: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
b580: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
b590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b5e0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
b5f0: 65 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20  e xBestIndex(.. 
b600: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
b610: 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
b620: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49 6e        IntPtr pIn
b630: 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dex..           
b640: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b6a0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
b6b0: 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a  e xDisconnect(..
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
b6d0: 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
b6e0: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
b6f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b740: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
b750: 6f 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28  orCode xDestroy(
b760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
b770: 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
b780: 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
b790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b7e0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
b7f0: 72 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d  rrorCode xOpen(.
b800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
b810: 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
b820: 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
b830: 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
b840: 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
b850: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b8a0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
b8b0: 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65 28  rrorCode xClose(
b8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
b8d0: 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
b8e0: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
b8f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b940: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
b950: 65 45 72 72 6f 72 43 6f 64 65 20 78 46 69 6c 74  eErrorCode xFilt
b960: 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
b970: 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
b980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
b990: 74 20 69 64 78 4e 75 6d 2c 0d 0a 20 20 20 20 20  t idxNum,..     
b9a0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 69 64         IntPtr id
b9b0: 78 53 74 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  xStr,..         
b9c0: 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
b9d0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
b9e0: 5b 5d 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20  [] argv..       
b9f0: 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
ba00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ba50: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
ba60: 72 43 6f 64 65 20 78 4e 65 78 74 28 0d 0a 20 20  rCode xNext(..  
ba70: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
ba80: 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20   pCursor..      
ba90: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
baa0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
bab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
baf0: 20 20 20 20 20 20 20 69 6e 74 20 78 45 6f 66 28         int xEof(
bb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
bb10: 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20  tPtr pCursor..  
bb20: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
bb30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
bb80: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
bb90: 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75  eErrorCode xColu
bba0: 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
bbb0: 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
bbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
bbd0: 74 50 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a  tPtr pContext,..
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
bbf0: 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20  index..         
bc00: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
bc10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bc60: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
bc70: 6f 64 65 20 78 52 6f 77 49 64 28 0d 0a 20 20 20  ode xRowId(..   
bc80: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
bc90: 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20  pCursor,..      
bca0: 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
bcb0: 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
bcc0: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
bcd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
bd20: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
bd30: 64 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20  de xUpdate(..   
bd40: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
bd50: 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
bd60: 20 20 20 20 69 6e 74 20 6e 44 61 74 61 2c 0d 0a      int nData,..
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
bd80: 74 72 20 61 70 44 61 74 61 2c 0d 0a 20 20 20 20  tr apData,..    
bd90: 20 20 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67          ref long
bda0: 20 72 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20   rowId..        
bdb0: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
bdc0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
be10: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
be20: 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20 20  Code xBegin(..  
be30: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
be40: 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
be50: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
be60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
be70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
beb0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
bec0: 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20  Code xSync(..   
bed0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
bee0: 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20  pVtab..         
bef0: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
bf00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
bf50: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
bf60: 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d 0a 20 20  ode xCommit(..  
bf70: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
bf80: 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
bf90: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
bfa0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bfb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
bff0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c000: 43 6f 64 65 20 78 52 6f 6c 6c 62 61 63 6b 28 0d  Code xRollback(.
c010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
c020: 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20  Ptr pVtab..     
c030: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
c040: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c090: 20 20 20 20 20 20 20 20 69 6e 74 20 78 46 69 6e          int xFin
c0a0: 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
c0b0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
c0c0: 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
c0d0: 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20     int nArg,..  
c0e0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
c0f0: 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20   zName,..       
c100: 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
c110: 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
c120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
c130: 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
c140: 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
c150: 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
c160: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c1b0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
c1c0: 6f 64 65 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20  ode xRename(..  
c1d0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
c1e0: 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
c1f0: 20 20 20 20 20 49 6e 74 50 74 72 20 7a 4e 65 77       IntPtr zNew
c200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
c210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c260: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
c270: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
c280: 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20  Savepoint(..    
c290: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
c2a0: 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
c2b0: 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e     int iSavepoin
c2c0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
c2d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c320: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c330: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c340: 78 52 65 6c 65 61 73 65 28 0d 0a 20 20 20 20 20  xRelease(..     
c350: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
c360: 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
c370: 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
c390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
c3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
c3f0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
c400: 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20  RollbackTo(..   
c410: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
c420: 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
c430: 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69      int iSavepoi
c440: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
c450: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  );..    }..    #
c460: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
c470: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c4c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
c4d0: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
c4e0: 20 49 6e 74 65 72 66 61 63 65 0d 0a 20 20 20 20   Interface..    
c4f0: 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63 65  public interface
c500: 20 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d   ISQLiteManagedM
c510: 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20  odule..    {..  
c520: 20 20 20 20 20 20 62 6f 6f 6c 20 44 65 63 6c 61        bool Decla
c530: 72 65 64 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20  red { get; }..  
c540: 20 20 20 20 20 20 73 74 72 69 6e 67 20 4e 61 6d        string Nam
c550: 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 0d 0a 20 20  e { get; }....  
c560: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
c570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
c5b0: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
c5c0: 72 72 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28  rrorCode Create(
c5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
c5e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
c5f0: 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69  onnection,  /* i
c600: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
c610: 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74    IntPtr pClient
c620: 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20  Data,           
c630: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
c640: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
c650: 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20  rguments,       
c660: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
c670: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51            ref SQ
c680: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
c690: 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a   table, /* out *
c6a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
c6b0: 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20  ef string error 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c6d0: 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
c6e0: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
c6f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c740: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
c750: 43 6f 64 65 20 43 6f 6e 6e 65 63 74 28 0d 0a 20  Code Connect(.. 
c760: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
c770: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
c780: 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20 2a  ection,  /* in *
c790: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  /..            I
c7a0: 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61 74  ntPtr pClientDat
c7b0: 61 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  a,           /* 
c7c0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
c7d0: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75     string[] argu
c7e0: 6d 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20 20  ments,          
c7f0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
c800: 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74         ref SQLit
c810: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
c820: 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a  ble, /* out */..
c830: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
c840: 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20  string error    
c850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
c860: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
c870: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
c880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c8c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c8d0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
c8e0: 65 20 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20  e BestIndex(..  
c8f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
c900: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
c910: 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
c920: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
c930: 49 6e 64 65 78 20 69 6e 64 65 78 20 20 20 20 20  Index index     
c940: 20 20 20 20 2f 2a 20 69 6e 2c 20 6f 75 74 20 2a      /* in, out *
c950: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
c960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
c970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c9b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c9c0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
c9d0: 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20  Disconnect(..   
c9e0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
c9f0: 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
ca00: 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  e /* in */..    
ca10: 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20          );....  
ca20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ca70: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
ca80: 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72 6f 79  rrorCode Destroy
ca90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
caa0: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
cab0: 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f  e table /* in */
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
cad0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
cae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ///....        S
cb30: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 4f  QLiteErrorCode O
cb40: 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  pen(..          
cb50: 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
cb60: 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 20  able table,     
cb70: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
cb90: 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
cba0: 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20  leCursor cursor 
cbb0: 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
cbc0: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
cbd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cc20: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
cc30: 72 6f 72 43 6f 64 65 20 43 6c 6f 73 65 28 0d 0a  rorCode Close(..
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
cc50: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
cc60: 72 73 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69  rsor cursor /* i
cc70: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
cc80: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
cc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
cce0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
ccf0: 64 65 20 46 69 6c 74 65 72 28 0d 0a 20 20 20 20  de Filter(..    
cd00: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
cd10: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
cd20: 20 63 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a   cursor, /* in *
cd30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
cd40: 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 20  nt indexNumber, 
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd60: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
cd70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 64        string ind
cd80: 65 78 53 74 72 69 6e 67 2c 20 20 20 20 20 20 20  exString,       
cd90: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
cda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
cdb0: 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65  iteValue[] value
cdc0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s             /*
cdd0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
cde0: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
cdf0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ce40: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
ce50: 43 6f 64 65 20 4e 65 78 74 28 0d 0a 20 20 20 20  Code Next(..    
ce60: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
ce70: 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
ce80: 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f   cursor /* in */
ce90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
cea0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
ceb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ced0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cef0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62  ///....        b
cf00: 6f 6f 6c 20 45 6f 66 28 0d 0a 20 20 20 20 20 20  ool Eof(..      
cf10: 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
cf20: 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
cf30: 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ursor /* in */..
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
cf50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  /....        SQL
cfb0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f 6c  iteErrorCode Col
cfc0: 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
cfd0: 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
cfe0: 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
cff0: 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  r, /* in */..   
d000: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
d010: 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74 2c 20  ontext context, 
d020: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
d030: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
d040: 69 6e 74 20 69 6e 64 65 78 20 20 20 20 20 20 20  int index       
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
d070: 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
d080: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d0d0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
d0e0: 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d 0a  rorCode RowId(..
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
d100: 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
d110: 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a 20  rsor cursor, /* 
d120: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
d130: 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49     ref long rowI
d140: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d               
d150: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
d160: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
d170: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d1d0: 74 65 45 72 72 6f 72 43 6f 64 65 20 55 70 64 61  teErrorCode Upda
d1e0: 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te(..           
d1f0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
d200: 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e  ble table, /* in
d210: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
d220: 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76   SQLiteValue[] v
d230: 61 6c 75 65 73 2c 20 20 20 20 20 2f 2a 20 69 6e  alues,     /* in
d240: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
d250: 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 20   ref long rowId 
d260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
d270: 2c 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  , out */..      
d280: 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
d290: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d2e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
d2f0: 6f 72 43 6f 64 65 20 42 65 67 69 6e 28 0d 0a 20  orCode Begin(.. 
d300: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
d310: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
d320: 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ble /* in */..  
d330: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
d340: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d390: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
d3a0: 65 45 72 72 6f 72 43 6f 64 65 20 53 79 6e 63 28  eErrorCode Sync(
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
d3c0: 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
d3d0: 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d   table /* in */.
d3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
d3f0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d440: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  //....        SQ
d450: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f  LiteErrorCode Co
d460: 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
d470: 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
d480: 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
d490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
d4a0: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d500: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
d510: 64 65 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20  de Rollback(..  
d520: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
d530: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
d540: 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  le /* in */..   
d550: 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
d560: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d5b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 46  ..        bool F
d5c0: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
d5d0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
d5e0: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
d5f0: 6c 65 2c 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d  le,    /* in */.
d600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
d610: 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 20   argumentCount, 
d620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
d630: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
d640: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20  string name,    
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d660: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  in */..         
d670: 20 20 20 72 65 66 20 53 51 4c 69 74 65 46 75 6e     ref SQLiteFun
d680: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20  ction function, 
d690: 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20  /* out */..     
d6a0: 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
d6b0: 72 20 70 43 6c 69 65 6e 74 44 61 74 61 20 20 20  r pClientData   
d6c0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
d6d0: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
d6e0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
d6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
d740: 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61  teErrorCode Rena
d750: 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
d760: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
d770: 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e  ble table, /* in
d780: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
d790: 20 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20   string newName 
d7a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
d7b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
d7c0: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
d7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d810: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d820: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
d830: 65 20 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20  e Savepoint(..  
d840: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
d850: 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
d860: 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  le, /* in */..  
d870: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 61            int sa
d880: 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20 20  vepoint         
d890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
d8a0: 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
d8b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d900: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
d910: 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61  eErrorCode Relea
d920: 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se(..           
d930: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
d940: 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e  ble table, /* in
d950: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
d960: 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 20   int savepoint  
d970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
d980: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
d990: 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d9f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
da00: 65 20 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20  e RollbackTo(.. 
da10: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
da20: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
da30: 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20  ble, /* in */.. 
da40: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73             int s
da50: 61 76 65 70 6f 69 6e 74 20 20 20 20 20 20 20 20  avepoint        
da60: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
da70: 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 20             );.. 
da80: 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
da90: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
daa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dae0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
daf0: 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 4d 65 6d  region SQLiteMem
db00: 6f 72 79 20 53 74 61 74 69 63 20 43 6c 61 73 73  ory Static Class
db10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
db20: 74 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69  tatic class SQLi
db30: 74 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 7b 0d  teMemory..    {.
db40: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
db50: 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 23   Private Data..#
db60: 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  if TRACK_MEMORY_
db70: 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 70  BYTES..        p
db80: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
db90: 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
dba0: 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d  new object();...
dbb0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
dc10: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 62  ate static int b
dc20: 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a  ytesAllocated;..
dc30: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
dc40: 73 74 61 74 69 63 20 69 6e 74 20 6d 61 78 69 6d  static int maxim
dc50: 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  umBytesAllocated
dc60: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
dc70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
dc80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
dce0: 69 6f 6e 20 4d 65 6d 6f 72 79 20 41 6c 6c 6f 63  ion Memory Alloc
dcf0: 61 74 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74  ation Helper Met
dd00: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75  hods..        pu
dd10: 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50  blic static IntP
dd20: 74 72 20 41 6c 6c 6f 63 61 74 65 28 69 6e 74 20  tr Allocate(int 
dd30: 73 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20 7b  size)..        {
dd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
dd50: 74 50 74 72 20 70 4d 65 6d 6f 72 79 20 3d 20 55  tPtr pMemory = U
dd60: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
dd70: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  ds.sqlite3_mallo
dd80: 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23 69 66 20  c(size);....#if 
dd90: 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
dda0: 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ES..            
ddb0: 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d 20 49  if (pMemory != I
ddc0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
ddd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
ddf0: 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69 7a 65  blockSize = Size
de00: 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a 20 20  (pMemory);....  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
de20: 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20 30 29   (blockSize > 0)
de30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
de50: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
de60: 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
de80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de90: 20 20 20 20 20 20 20 20 20 62 79 74 65 73 41 6c           bytesAl
dea0: 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c 6f 63 6b  located += block
deb0: 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ded0: 20 69 66 20 28 62 79 74 65 73 41 6c 6c 6f 63 61   if (bytesAlloca
dee0: 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d 42 79 74  ted > maximumByt
def0: 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d 0a 20 20  esAllocated)..  
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 6d 61 78 69 6d 75            maximu
df20: 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20  mBytesAllocated 
df30: 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  = bytesAllocated
df40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
df50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
df60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
df70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64           }..#end
df80: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
df90: 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 6f 72 79    return pMemory
dfa0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
dfb0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
dfc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e000: 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
e010: 63 20 73 74 61 74 69 63 20 69 6e 74 20 53 69 7a  c static int Siz
e020: 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79  e(IntPtr pMemory
e030: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  )..        {..#i
e040: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
e050: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
e060: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
e070: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
e080: 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65 5f 69  e3_malloc_size_i
e090: 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72 79 29 3b  nterop(pMemory);
e0a0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
e0b0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
e0c0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
e0d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
e0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e120: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e130: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
e140: 69 64 20 46 72 65 65 28 49 6e 74 50 74 72 20 70  id Free(IntPtr p
e150: 4d 65 6d 6f 72 79 29 0d 0a 20 20 20 20 20 20 20  Memory)..       
e160: 20 7b 0d 0a 23 69 66 20 54 52 41 43 4b 5f 4d 45   {..#if TRACK_ME
e170: 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20 20 20  MORY_BYTES..    
e180: 20 20 20 20 20 20 20 20 69 66 20 28 70 4d 65 6d          if (pMem
e190: 6f 72 79 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ory != IntPtr.Ze
e1a0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
e1b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e1c0: 20 20 20 20 69 6e 74 20 62 6c 6f 63 6b 53 69 7a      int blockSiz
e1d0: 65 20 3d 20 53 69 7a 65 28 70 4d 65 6d 6f 72 79  e = Size(pMemory
e1e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e1f0: 20 20 20 20 20 20 69 66 20 28 62 6c 6f 63 6b 53        if (blockS
e200: 69 7a 65 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ize > 0)..      
e210: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e230: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
e240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e250: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 20   bytesAllocated 
e280: 2d 3d 20 62 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20  -= blockSize;.. 
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e2b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e2c0: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
e2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
e2e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e2f0: 73 2e 73 71 6c 69 74 65 33 5f 66 72 65 65 28 70  s.sqlite3_free(p
e300: 4d 65 6d 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  Memory);..      
e310: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
e320: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
e330: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e340: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
e350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e390: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
e3a0: 20 53 51 4c 69 74 65 53 74 72 69 6e 67 20 53 74   SQLiteString St
e3b0: 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20 20  atic Class..    
e3c0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
e3d0: 63 6c 61 73 73 20 53 51 4c 69 74 65 53 74 72 69  class SQLiteStri
e3e0: 6e 67 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ng..    {..     
e3f0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
e400: 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
e410: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
e420: 61 74 69 63 20 69 6e 74 20 54 68 69 72 74 79 42  atic int ThirtyB
e430: 69 74 73 20 3d 20 30 78 33 66 66 66 66 66 66 66  its = 0x3fffffff
e440: 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
e450: 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
e460: 6c 79 20 45 6e 63 6f 64 69 6e 67 20 55 74 66 38  ly Encoding Utf8
e470: 45 6e 63 6f 64 69 6e 67 20 3d 20 45 6e 63 6f 64  Encoding = Encod
e480: 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
e490: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e4a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e500: 69 6f 6e 20 55 54 46 2d 38 20 45 6e 63 6f 64 69  ion UTF-8 Encodi
e510: 6e 67 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64  ng Helper Method
e520: 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  s..        publi
e530: 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20  c static byte[] 
e540: 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
e550: 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
e560: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
e570: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
e580: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e590: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
e5a0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
e5c0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
e5d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e5e0: 55 74 66 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74  Utf8Encoding.Get
e5f0: 42 79 74 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20  Bytes(value);.. 
e600: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e610: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e660: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
e670: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
e680: 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74  tringFromUtf8Byt
e690: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
e6a0: 20 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20   byte[] bytes.. 
e6b0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
e6c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e6d0: 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
e6e0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e6f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e700: 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  null;....#if !PL
e710: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
e720: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
e730: 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38       return Utf8
e740: 45 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72 69  Encoding.GetStri
e750: 6e 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73  ng(bytes);..#els
e760: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  e..            r
e770: 65 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69  eturn Utf8Encodi
e780: 6e 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74  ng.GetString(byt
e790: 65 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e  es, 0, bytes.Len
e7a0: 67 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  gth);..#endif.. 
e7b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e7c0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
e7d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e820: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
e830: 6f 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20  on UTF-8 String 
e840: 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
e850: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
e860: 74 61 74 69 63 20 69 6e 74 20 50 72 6f 62 65 46  tatic int ProbeF
e870: 6f 72 55 74 66 38 42 79 74 65 4c 65 6e 67 74 68  orUtf8ByteLength
e880: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
e890: 6e 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a 20  ntPtr pValue,.. 
e8a0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
e8b0: 69 6d 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  imit..          
e8c0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
e8e0: 6c 65 6e 67 74 68 20 3d 20 30 3b 0d 0a 0d 0a 20  length = 0;.... 
e8f0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
e900: 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74 72 2e  Value != IntPtr.
e910: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
e920: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e930: 20 20 20 20 20 20 64 6f 0d 0a 20 20 20 20 20 20        do..      
e940: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e960: 20 69 66 20 28 4d 61 72 73 68 61 6c 2e 52 65 61   if (Marshal.Rea
e970: 64 42 79 74 65 28 70 56 61 6c 75 65 2c 20 6c 65  dByte(pValue, le
e980: 6e 67 74 68 29 20 3d 3d 20 30 29 0d 0a 20 20 20  ngth) == 0)..   
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20       break;.... 
e9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9c0: 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3e 3d     if (length >=
e9d0: 20 6c 69 6d 69 74 29 0d 0a 20 20 20 20 20 20 20   limit)..       
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 20 62 72 65 61 6b 3b 0d 0a 0d 0a 20 20 20 20 20   break;....     
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
ea10: 65 6e 67 74 68 2b 2b 3b 0d 0a 20 20 20 20 20 20  ength++;..      
ea20: 20 20 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c            } whil
ea30: 65 20 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  e (true);..     
ea40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ea50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c          return l
ea60: 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20  ength;..        
ea70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eac0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ead0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
eae0: 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f 6d 55  ring StringFromU
eaf0: 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
eb00: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
eb10: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
eb20: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
eb30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
eb40: 75 72 6e 20 53 74 72 69 6e 67 46 72 6f 6d 55 74  urn StringFromUt
eb50: 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65 2c  f8IntPtr(pValue,
eb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb70: 20 20 50 72 6f 62 65 46 6f 72 55 74 66 38 42 79    ProbeForUtf8By
eb80: 74 65 4c 65 6e 67 74 68 28 70 56 61 6c 75 65 2c  teLength(pValue,
eb90: 20 54 68 69 72 74 79 42 69 74 73 29 29 3b 0d 0a   ThirtyBits));..
eba0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ebb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ebc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ec00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
ec10: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 74 72  tatic string Str
ec20: 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74  ingFromUtf8IntPt
ec30: 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
ec40: 49 6e 74 50 74 72 20 70 56 61 6c 75 65 2c 0d 0a  IntPtr pValue,..
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
ec60: 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20  length..        
ec70: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
ec80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
ec90: 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50   (pValue == IntP
eca0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
ecb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ecc0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
ecd0: 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68        if (length
ece0: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
ecf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ed00: 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74        byte[] byt
ed10: 65 73 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65  es = new byte[le
ed20: 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth];....      
ed30: 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
ed40: 6c 2e 43 6f 70 79 28 70 56 61 6c 75 65 2c 20 62  l.Copy(pValue, b
ed50: 79 74 65 73 2c 20 30 2c 20 6c 65 6e 67 74 68 29  ytes, 0, length)
ed60: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ed70: 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53       return GetS
ed80: 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74  tringFromUtf8Byt
ed90: 65 73 28 62 79 74 65 73 29 3b 0d 0a 20 20 20 20  es(bytes);..    
eda0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
edb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
edc0: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20  String.Empty;.. 
edd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ede0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ee30: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
ee40: 61 74 69 63 20 49 6e 74 50 74 72 20 55 74 66 38  atic IntPtr Utf8
ee50: 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
ee60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
ee70: 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a 20 20 20  tring value..   
ee80: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
ee90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eea0: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
eeb0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
eec0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
eed0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
eee0: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
eef0: 20 72 65 73 75 6c 74 20 3d 20 49 6e 74 50 74 72   result = IntPtr
ef00: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
ef10: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
ef20: 20 3d 20 47 65 74 55 74 66 38 42 79 74 65 73 46   = GetUtf8BytesF
ef30: 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65 29  romString(value)
ef40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ef50: 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e 75   if (bytes == nu
ef60: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ef70: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
ef80: 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
ef90: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67          int leng
efa0: 74 68 20 3d 20 62 79 74 65 73 2e 4c 65 6e 67 74  th = bytes.Lengt
efb0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
efc0: 20 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74    result = SQLit
efd0: 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
efe0: 28 6c 65 6e 67 74 68 20 2b 20 31 29 3b 0d 0a 0d  (length + 1);...
eff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
f000: 28 72 65 73 75 6c 74 20 3d 3d 20 49 6e 74 50 74  (result == IntPt
f010: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
f020: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f030: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
f040: 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72 73              Mars
f050: 68 61 6c 2e 43 6f 70 79 28 62 79 74 65 73 2c 20  hal.Copy(bytes, 
f060: 30 2c 20 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74  0, result, lengt
f070: 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h);..           
f080: 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 42 79   Marshal.WriteBy
f090: 74 65 28 72 65 73 75 6c 74 2c 20 6c 65 6e 67 74  te(result, lengt
f0a0: 68 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  h, 0);....      
f0b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
f0c0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
f0d0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
f0e0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f130: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f140: 20 20 23 72 65 67 69 6f 6e 20 55 54 46 2d 38 20    #region UTF-8 
f150: 53 74 72 69 6e 67 20 41 72 72 61 79 20 48 65 6c  String Array Hel
f160: 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
f170: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
f180: 69 63 20 73 74 72 69 6e 67 5b 5d 20 53 74 72 69  ic string[] Stri
f190: 6e 67 41 72 72 61 79 46 72 6f 6d 55 74 66 38 49  ngArrayFromUtf8I
f1a0: 6e 74 50 74 72 41 72 72 61 79 28 0d 0a 20 20 20  ntPtrArray(..   
f1b0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b           IntPtr[
f1c0: 5d 20 70 56 61 6c 75 65 73 0d 0a 20 20 20 20 20  ] pValues..     
f1d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
f1e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f1f0: 20 69 66 20 28 70 56 61 6c 75 65 73 20 3d 3d 20   if (pValues == 
f200: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f210: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
f220: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
f230: 20 20 20 73 74 72 69 6e 67 5b 5d 20 72 65 73 75     string[] resu
f240: 6c 74 20 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b  lt = new string[
f250: 70 56 61 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b  pValues.Length];
f260: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f270: 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
f280: 20 30 3b 20 69 6e 64 65 78 20 3c 20 72 65 73 75   0; index < resu
f290: 6c 74 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78  lt.Length; index
f2a0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
f2b0: 20 20 20 20 20 72 65 73 75 6c 74 5b 69 6e 64 65       result[inde
f2c0: 78 5d 20 3d 20 53 74 72 69 6e 67 46 72 6f 6d 55  x] = StringFromU
f2d0: 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75 65  tf8IntPtr(pValue
f2e0: 73 5b 69 6e 64 65 78 5d 29 3b 0d 0a 0d 0a 20 20  s[index]);....  
f2f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
f300: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
f310: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
f320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f360: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f370: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
f380: 49 6e 74 50 74 72 5b 5d 20 55 74 66 38 49 6e 74  IntPtr[] Utf8Int
f390: 50 74 72 41 72 72 61 79 46 72 6f 6d 53 74 72 69  PtrArrayFromStri
f3a0: 6e 67 41 72 72 61 79 28 0d 0a 20 20 20 20 20 20  ngArray(..      
f3b0: 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 76        string[] v
f3c0: 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20 20  alues..         
f3d0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
f3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
f3f0: 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29  (values == null)
f400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f410: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
f420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
f430: 74 50 74 72 5b 5d 20 72 65 73 75 6c 74 20 3d 20  tPtr[] result = 
f440: 6e 65 77 20 49 6e 74 50 74 72 5b 76 61 6c 75 65  new IntPtr[value
f450: 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20 20  s.Length];....  
f460: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
f470: 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
f480: 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e  dex < result.Len
f490: 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f4b0: 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20 55  esult[index] = U
f4c0: 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
f4d0: 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64 65 78  ing(values[index
f4e0: 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]);....         
f4f0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
f500: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
f510: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
f520: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
f530: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f590: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
f5a0: 4d 61 72 73 68 61 6c 20 53 74 61 74 69 63 20 43  Marshal Static C
f5b0: 6c 61 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e  lass..    intern
f5c0: 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
f5d0: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 0d 0a 20  SQLiteMarshal.. 
f5e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
f5f0: 65 67 69 6f 6e 20 49 6e 74 50 74 72 20 48 65 6c  egion IntPtr Hel
f600: 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
f610: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
f620: 69 63 20 49 6e 74 50 74 72 20 49 6e 74 50 74 72  ic IntPtr IntPtr
f630: 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20  ForOffset(..    
f640: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
f650: 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20 20  ointer,..       
f660: 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 0d       int offset.
f670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
f680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f690: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
f6a0: 77 20 49 6e 74 50 74 72 28 70 6f 69 6e 74 65 72  w IntPtr(pointer
f6b0: 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6f 66 66  .ToInt64() + off
f6c0: 73 65 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  set);..        }
f6d0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
f6e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
f6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f730: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f740: 20 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73 68     #region Marsh
f750: 61 6c 20 52 65 61 64 20 48 65 6c 70 65 72 20 4d  al Read Helper M
f760: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
f770: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
f780: 74 20 52 65 61 64 49 6e 74 33 32 28 0d 0a 20 20  t ReadInt32(..  
f790: 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
f7a0: 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
f7b0: 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
f7c0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
f7d0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
f7e0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
f7f0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
f800: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f810: 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33  Marshal.ReadInt3
f820: 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  2(pointer, offse
f830: 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  t);..#else..    
f840: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
f850: 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33 32  arshal.ReadInt32
f860: 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74  (IntPtrForOffset
f870: 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
f880: 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ));..#endif..   
f890: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f8a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f8f0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
f900: 69 63 20 64 6f 75 62 6c 65 20 52 65 61 64 44 6f  ic double ReadDo
f910: 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  uble(..         
f920: 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
f930: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
f940: 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20  int offset..    
f950: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
f960: 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
f970: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
f980: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
f990: 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f 6e 76    return BitConv
f9a0: 65 72 74 65 72 2e 49 6e 74 36 34 42 69 74 73 54  erter.Int64BitsT
f9b0: 6f 44 6f 75 62 6c 65 28 4d 61 72 73 68 61 6c 2e  oDouble(Marshal.
f9c0: 52 65 61 64 49 6e 74 36 34 28 0d 0a 20 20 20 20  ReadInt64(..    
f9d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 6f 69 6e              poin
f9e0: 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a  ter, offset));..
f9f0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
fa00: 20 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f 6e     return BitCon
fa10: 76 65 72 74 65 72 2e 54 6f 44 6f 75 62 6c 65 28  verter.ToDouble(
fa20: 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47 65 74  BitConverter.Get
fa30: 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Bytes(..        
fa40: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
fa50: 52 65 61 64 49 6e 74 36 34 28 49 6e 74 50 74 72  ReadInt64(IntPtr
fa60: 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65  ForOffset(pointe
fa70: 72 2c 20 6f 66 66 73 65 74 29 29 29 2c 20 30 29  r, offset))), 0)
fa80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
fa90: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
faa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
faf0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
fb00: 20 49 6e 74 50 74 72 20 52 65 61 64 49 6e 74 50   IntPtr ReadIntP
fb10: 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
fb20: 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65 72 2c   IntPtr pointer,
fb30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
fb40: 74 20 6f 66 66 73 65 74 0d 0a 20 20 20 20 20 20  t offset..      
fb50: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
fb60: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
fb70: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
fb80: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
fb90: 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52  return Marshal.R
fba0: 65 61 64 49 6e 74 50 74 72 28 70 6f 69 6e 74 65  eadIntPtr(pointe
fbb0: 72 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 23 65 6c  r, offset);..#el
fbc0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
fbd0: 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 52  return Marshal.R
fbe0: 65 61 64 49 6e 74 50 74 72 28 49 6e 74 50 74 72  eadIntPtr(IntPtr
fbf0: 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e 74 65  ForOffset(pointe
fc00: 72 2c 20 6f 66 66 73 65 74 29 29 3b 0d 0a 23 65  r, offset));..#e
fc10: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
fc20: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
fc30: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
fc90: 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73 68 61    #region Marsha
fca0: 6c 20 57 72 69 74 65 20 48 65 6c 70 65 72 20 4d  l Write Helper M
fcb0: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
fcc0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
fcd0: 69 64 20 57 72 69 74 65 49 6e 74 33 32 28 0d 0a  id WriteInt32(..
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
fcf0: 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20  tr pointer,..   
fd00: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
fd10: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  set,..          
fd20: 20 20 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20    int value..   
fd30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
fd40: 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
fd50: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
fd60: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
fd70: 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
fd80: 49 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f  Int32(pointer, o
fd90: 66 66 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a  ffset, value);..
fda0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
fdb0: 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65     Marshal.Write
fdc0: 49 6e 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f  Int32(IntPtrForO
fdd0: 66 66 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f  ffset(pointer, o
fde0: 66 66 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d  ffset), value);.
fdf0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
fe00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
fe10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fe60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
fe70: 6f 69 64 20 57 72 69 74 65 44 6f 75 62 6c 65 28  oid WriteDouble(
fe80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
fe90: 74 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20  tPtr pointer,.. 
fea0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f             int o
feb0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
fec0: 20 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65      double value
fed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
fee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
fef0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
ff00: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
ff10: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
ff20: 57 72 69 74 65 49 6e 74 36 34 28 70 6f 69 6e 74  WriteInt64(point
ff30: 65 72 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20  er, offset,..   
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 42 69 74               Bit
ff50: 43 6f 6e 76 65 72 74 65 72 2e 44 6f 75 62 6c 65  Converter.Double
ff60: 54 6f 49 6e 74 36 34 42 69 74 73 28 76 61 6c 75  ToInt64Bits(valu
ff70: 65 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  e));..#else..   
ff80: 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c           Marshal
ff90: 2e 57 72 69 74 65 49 6e 74 36 34 28 49 6e 74 50  .WriteInt64(IntP
ffa0: 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e  trForOffset(poin
ffb0: 74 65 72 2c 20 6f 66 66 73 65 74 29 2c 0d 0a 20  ter, offset),.. 
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
ffd0: 69 74 43 6f 6e 76 65 72 74 65 72 2e 54 6f 49 6e  itConverter.ToIn
ffe0: 74 36 34 28 42 69 74 43 6f 6e 76 65 72 74 65 72  t64(BitConverter
fff0: 2e 47 65 74 42 79 74 65 73 28 76 61 6c 75 65 29  .GetBytes(value)
10000 2c 20 30 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , 0));..#endif..
10010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10020 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10070 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
10080 74 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65  tatic void Write
10090 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20  IntPtr(..       
100a0 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
100b0 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
100c0 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20    int offset,.. 
100d0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
100e0 72 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  r value..       
100f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10100 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  {..#if !PLATFORM
10110 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
10120 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  K..            M
10130 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50  arshal.WriteIntP
10140 74 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73  tr(pointer, offs
10150 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  et, value);..#el
10160 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10170 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74  Marshal.WriteInt
10180 50 74 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  Ptr(IntPtrForOff
10190 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
101a0 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  set), value);..#
101b0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
101c0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
101d0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
101e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10220 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10230 20 20 20 23 72 65 67 69 6f 6e 20 42 79 74 65 20     #region Byte 
10240 41 72 72 61 79 20 48 65 6c 70 65 72 20 4d 65 74  Array Helper Met
10250 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 75  hods..        pu
10260 62 6c 69 63 20 73 74 61 74 69 63 20 62 79 74 65  blic static byte
10270 5b 5d 20 42 79 74 65 73 46 72 6f 6d 49 6e 74 50  [] BytesFromIntP
10280 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
10290 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65 2c 0d   IntPtr pValue,.
102a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
102b0 20 6c 65 6e 67 74 68 0d 0a 20 20 20 20 20 20 20   length..       
102c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
102d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
102e0 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
102f0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
10300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10310 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
10320 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74         if (lengt
10330 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  h == 0)..       
10340 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10350 6e 65 77 20 62 79 74 65 5b 30 5d 3b 0d 0a 0d 0a  new byte[0];....
10360 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
10370 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  [] result = new 
10380 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b 0d 0a 0d  byte[length];...
10390 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
103a0 73 68 61 6c 2e 43 6f 70 79 28 70 56 61 6c 75 65  shal.Copy(pValue
103b0 2c 20 72 65 73 75 6c 74 2c 20 30 2c 20 6c 65 6e  , result, 0, len
103c0 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth);....       
103d0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
103e0 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lt;..        }..
103f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
10400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10440 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62  /....        pub
10450 6c 69 63 20 73 74 61 74 69 63 20 49 6e 74 50 74  lic static IntPt
10460 72 20 42 79 74 65 73 54 6f 49 6e 74 50 74 72 28  r BytesToIntPtr(
10470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 79  ..            by
10480 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20 20 20 20  te[] value..    
10490 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
104a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
104b0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
104c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
104d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
104e0 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
104f0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
10500 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65 6e 67  gth = value.Leng
10510 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
10520 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20 3d 3d     if (length ==
10530 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
10540 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50       return IntP
10550 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
10560 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 72          IntPtr r
10570 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65 4d 65  esult = SQLiteMe
10580 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28 6c 65  mory.Allocate(le
10590 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ngth);....      
105a0 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
105b0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
105c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105d0 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e    return IntPtr.
105e0 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
105f0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
10600 79 28 76 61 6c 75 65 2c 20 30 2c 20 72 65 73 75  y(value, 0, resu
10610 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a  lt, length);....
10620 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10630 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
10640 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
10650 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
10660 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
10670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
106b0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
106c0 53 51 4c 69 74 65 56 61 6c 75 65 20 48 65 6c 70  SQLiteValue Help
106d0 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
106e0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
106f0 63 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 5d 20  c SQLiteValue[] 
10700 56 61 6c 75 65 41 72 72 61 79 46 72 6f 6d 53 69  ValueArrayFromSi
10710 7a 65 41 6e 64 49 6e 74 50 74 72 28 0d 0a 20 20  zeAndIntPtr(..  
10720 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e 44            int nD
10730 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
10740 20 20 49 6e 74 50 74 72 20 61 70 44 61 74 61 0d    IntPtr apData.
10750 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
10760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10770 20 20 20 20 20 20 20 69 66 20 28 6e 44 61 74 61         if (nData
10780 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   < 0)..         
10790 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
107a0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
107b0 20 20 20 69 66 20 28 61 70 44 61 74 61 20 3d 3d     if (apData ==
107c0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
107e0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
107f0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
10800 65 56 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20  eValue[] result 
10810 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75  = new SQLiteValu
10820 65 5b 6e 44 61 74 61 5d 3b 0d 0a 0d 0a 20 20 20  e[nData];....   
10830 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
10840 74 20 69 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66  t index = 0, off
10850 73 65 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  set = 0;..      
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
10870 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e  dex < result.Len
10880 67 74 68 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gth;..          
10890 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b            index+
108a0 2b 2c 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74  +, offset += Int
108b0 50 74 72 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20  Ptr.Size)..     
108c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
108d0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
108e0 20 70 44 61 74 61 20 3d 20 52 65 61 64 49 6e 74   pData = ReadInt
108f0 50 74 72 28 61 70 44 61 74 61 2c 20 6f 66 66 73  Ptr(apData, offs
10900 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
10910 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5b 69          result[i
10920 6e 64 65 78 5d 20 3d 20 28 70 44 61 74 61 20 21  ndex] = (pData !
10930 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f  = IntPtr.Zero) ?
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10950 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
10960 56 61 6c 75 65 28 70 44 61 74 61 29 20 3a 20 6e  Value(pData) : n
10970 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
10980 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10990 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
109a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
109b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
109c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10a00 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
10a10 63 20 73 74 61 74 69 63 20 53 51 4c 69 74 65 56  c static SQLiteV
10a20 61 6c 75 65 5b 5d 20 56 61 6c 75 65 41 72 72 61  alue[] ValueArra
10a30 79 46 72 6f 6d 49 6e 74 50 74 72 41 72 72 61 79  yFromIntPtrArray
10a40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
10a50 6e 74 50 74 72 5b 5d 20 76 61 6c 75 65 73 0d 0a  ntPtr[] values..
10a60 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10a70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10a80 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 73        if (values
10a90 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10aa0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10ab0 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
10ac0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c         SQLiteVal
10ad0 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e 65  ue[] result = ne
10ae0 77 20 53 51 4c 69 74 65 56 61 6c 75 65 5b 76 61  w SQLiteValue[va
10af0 6c 75 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d  lues.Length];...
10b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
10b10 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
10b20 20 69 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e   index < result.
10b30 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  Length; index++)
10b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b50 20 20 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20    result[index] 
10b60 3d 20 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75  = new SQLiteValu
10b70 65 28 76 61 6c 75 65 73 5b 69 6e 64 65 78 5d 29  e(values[index])
10b80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10b90 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
10ba0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
10bb0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
10bc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
10bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
10c20 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78  gion SQLiteIndex
10c30 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
10c40 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
10c50 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 64 65  static void Inde
10c60 78 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20  xFromIntPtr(..  
10c70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
10c80 20 70 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20   pIndex,..      
10c90 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
10ca0 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20 20 20  Index index..   
10cb0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
10cc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10cd0 20 20 20 69 66 20 28 70 49 6e 64 65 78 20 3d 3d     if (pIndex ==
10ce0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10d00 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
10d10 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
10d20 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   = 0;....       
10d30 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72       int nConstr
10d40 61 69 6e 74 20 3d 20 52 65 61 64 49 6e 74 33 32  aint = ReadInt32
10d50 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29  (pIndex, offset)
10d60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10d70 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f   offset += sizeo
10d80 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  f(int);....     
10d90 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
10da0 6f 6e 73 74 72 61 69 6e 74 20 3d 20 52 65 61 64  onstraint = Read
10db0 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f  IntPtr(pIndex, o
10dc0 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffset);....     
10dd0 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d         offset +=
10de0 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d   IntPtr.Size;...
10df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
10e00 20 6e 4f 72 64 65 72 42 79 20 3d 20 52 65 61 64   nOrderBy = Read
10e10 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66  Int32(pIndex, of
10e20 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
10e30 20 20 20 20 20 20 69 6e 64 65 78 20 3d 20 6e 65        index = ne
10e40 77 20 53 51 4c 69 74 65 49 6e 64 65 78 28 6e 43  w SQLiteIndex(nC
10e50 6f 6e 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65  onstraint, nOrde
10e60 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rBy);....       
10e70 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73       offset += s
10e80 69 7a 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20  izeof(int);.... 
10e90 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
10ea0 72 20 70 4f 72 64 65 72 42 79 20 3d 20 52 65 61  r pOrderBy = Rea
10eb0 64 49 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20  dIntPtr(pIndex, 
10ec0 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20  offset);....    
10ed0 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b          offset +
10ee0 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a  = IntPtr.Size;..
10ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
10f00 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e 74  tPtr pConstraint
10f10 55 73 61 67 65 20 3d 20 52 65 61 64 49 6e 74 50  Usage = ReadIntP
10f20 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  tr(pIndex, offse
10f30 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
10f40 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
10f50 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
10f60 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 4f           index.O
10f70 75 74 70 75 74 73 2e 49 6e 64 65 78 4e 75 6d 62  utputs.IndexNumb
10f80 65 72 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70  er = ReadInt32(p
10f90 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
10fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
10fb0 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28  ffset += sizeof(
10fc0 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  int);....       
10fd0 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
10fe0 74 73 2e 49 6e 64 65 78 53 74 72 69 6e 67 20 3d  ts.IndexString =
10ff0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
11000 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50  ringFromUtf8IntP
11010 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
11020 20 20 20 20 20 49 6e 74 50 74 72 46 6f 72 4f 66       IntPtrForOf
11030 66 73 65 74 28 70 49 6e 64 65 78 2c 20 6f 66 66  fset(pIndex, off
11040 73 65 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  set));....      
11050 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
11060 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a  IntPtr.Size;....
11070 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
11080 78 2e 4f 75 74 70 75 74 73 2e 4e 65 65 64 54 6f  x.Outputs.NeedTo
11090 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20  FreeIndexString 
110a0 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64  = ReadInt32(pInd
110b0 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
110c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
110d0 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74  et += sizeof(int
110e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
110f0 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
11100 4f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20  OrderByConsumed 
11110 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64  = ReadInt32(pInd
11120 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
11130 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73              offs
11140 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74  et += sizeof(int
11150 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
11160 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
11170 45 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20  EstimatedCost = 
11180 52 65 61 64 44 6f 75 62 6c 65 28 70 49 6e 64 65  ReadDouble(pInde
11190 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
111a0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73             int s
111b0 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54  izeOfConstraintT
111c0 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69  ype = Marshal.Si
111d0 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20  zeOf(typeof(..  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
111f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11200 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
11210 63 6f 6e 73 74 72 61 69 6e 74 29 29 3b 0d 0a 0d  constraint));...
11220 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
11230 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e   (int iConstrain
11240 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69  t = 0; iConstrai
11250 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74  nt < nConstraint
11260 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29  ; iConstraint++)
11270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11290 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
112a0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
112b0 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  ex_constraint co
112c0 6e 73 74 72 61 69 6e 74 20 3d 0d 0a 20 20 20 20  nstraint =..    
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
112f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
11300 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
11310 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
11320 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 50         Marshal.P
11330 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 49 6e  trToStructure(In
11340 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43  tPtrForOffset(pC
11350 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a 20 20 20 20  onstraint,..    
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20 73 69  iConstraint * si
11380 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74 54 79  zeOfConstraintTy
11390 70 65 29 2c 20 63 6f 6e 73 74 72 61 69 6e 74 29  pe), constraint)
113a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
113b0 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74       index.Input
113c0 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43  s.Constraints[iC
113d0 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20  onstraint] =..  
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65    new SQLiteInde
11400 78 43 6f 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73  xConstraint(cons
11410 74 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  traint);..      
11420 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11430 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f         int sizeO
11440 66 4f 72 64 65 72 42 79 54 79 70 65 20 3d 20 4d  fOrderByType = M
11450 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79  arshal.SizeOf(ty
11460 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20  peof(..         
11470 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
11480 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11490 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
114a0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
114b0 20 20 20 66 6f 72 20 28 69 6e 74 20 69 4f 72 64     for (int iOrd
114c0 65 72 42 79 20 3d 20 30 3b 20 69 4f 72 64 65 72  erBy = 0; iOrder
114d0 42 79 20 3c 20 6e 4f 72 64 65 72 42 79 3b 20 69  By < nOrderBy; i
114e0 4f 72 64 65 72 42 79 2b 2b 29 0d 0a 20 20 20 20  OrderBy++)..    
114f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11500 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
11510 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
11520 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64  qlite3_index_ord
11530 65 72 62 79 20 6f 72 64 65 72 42 79 20 3d 0d 0a  erby orderBy =..
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61      new UnsafeNa
11560 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11570 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
11580 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
11590 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
115a0 50 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 49  PtrToStructure(I
115b0 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
115c0 4f 72 64 65 72 42 79 2c 0d 0a 20 20 20 20 20 20  OrderBy,..      
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 4f                iO
115e0 72 64 65 72 42 79 20 2a 20 73 69 7a 65 4f 66 4f  rderBy * sizeOfO
115f0 72 64 65 72 42 79 54 79 70 65 29 2c 20 6f 72 64  rderByType), ord
11600 65 72 42 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  erBy);....      
11610 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
11620 49 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 5b  Inputs.OrderBys[
11630 69 4f 72 64 65 72 42 79 5d 20 3d 0d 0a 20 20 20  iOrderBy] =..   
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78   new SQLiteIndex
11660 4f 72 64 65 72 42 79 28 6f 72 64 65 72 42 79 29  OrderBy(orderBy)
11670 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11690 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72  int sizeOfConstr
116a0 61 69 6e 74 55 73 61 67 65 54 79 70 65 20 3d 20  aintUsageType = 
116b0 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74  Marshal.SizeOf(t
116c0 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20  ypeof(..        
116d0 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
116e0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
116f0 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72  te3_index_constr
11700 61 69 6e 74 5f 75 73 61 67 65 29 29 3b 0d 0a 0d  aint_usage));...
11710 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
11720 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69 6e   (int iConstrain
11730 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61 69  t = 0; iConstrai
11740 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e 74  nt < nConstraint
11750 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b 29  ; iConstraint++)
11760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11780 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11790 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64  hods.sqlite3_ind
117a0 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73  ex_constraint_us
117b0 61 67 65 20 63 6f 6e 73 74 72 61 69 6e 74 55 73  age constraintUs
117c0 61 67 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  age =..         
117d0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 55             new U
117e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
117f0 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
11800 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67  _constraint_usag
11810 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
11820 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
11830 50 74 72 54 6f 53 74 72 75 63 74 75 72 65 28 49  PtrToStructure(I
11840 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70  ntPtrForOffset(p
11850 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c  ConstraintUsage,
11860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11870 20 20 20 20 20 20 69 43 6f 6e 73 74 72 61 69 6e        iConstrain
11880 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72  t * sizeOfConstr
11890 61 69 6e 74 55 73 61 67 65 54 79 70 65 29 2c 20  aintUsageType), 
118a0 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 29  constraintUsage)
118b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
118c0 20 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75       index.Outpu
118d0 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  ts.ConstraintUsa
118e0 67 65 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d  ges[iConstraint]
118f0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
11900 20 20 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69          new SQLi
11910 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
11920 74 55 73 61 67 65 28 63 6f 6e 73 74 72 61 69 6e  tUsage(constrain
11930 74 55 73 61 67 65 29 3b 0d 0a 20 20 20 20 20 20  tUsage);..      
11940 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11950 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
11960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
119a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
119b0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
119c0 6f 69 64 20 49 6e 64 65 78 54 6f 49 6e 74 50 74  oid IndexToIntPt
119d0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
119e0 53 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65  SQLiteIndex inde
119f0 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
11a00 49 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20  IntPtr pIndex.. 
11a10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
11a20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11a30 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78 20       if ((index 
11a40 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64  == null) || (ind
11a50 65 78 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75 6c  ex.Inputs == nul
11a60 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  l) ||..         
11a70 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e         (index.In
11a80 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73  puts.Constraints
11a90 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20   == null) ||..  
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
11ab0 6e 64 65 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65  ndex.Inputs.Orde
11ac0 72 42 79 73 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  rBys == null) ||
11ad0 20 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 20   (index.Outputs 
11ae0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20  == null) ||..   
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
11b00 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e 73  dex.Outputs.Cons
11b10 74 72 61 69 6e 74 55 73 61 67 65 73 20 3d 3d 20  traintUsages == 
11b20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
11b30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11b40 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
11b50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
11b70 28 70 49 6e 64 65 78 20 3d 3d 20 49 6e 74 50 74  (pIndex == IntPt
11b80 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
11b90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
11ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11bb0 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d  int offset = 0;.
11bc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
11bd0 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 3d  nt nConstraint =
11be0 20 52 65 61 64 49 6e 74 33 32 28 70 49 6e 64 65   ReadInt32(pInde
11bf0 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a 20  x, offset);.... 
11c00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
11c10 43 6f 6e 73 74 72 61 69 6e 74 20 21 3d 20 69 6e  Constraint != in
11c20 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74  dex.Inputs.Const
11c30 72 61 69 6e 74 73 2e 4c 65 6e 67 74 68 29 0d 0a  raints.Length)..
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
11c60 20 20 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73         if (nCons
11c70 74 72 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e  traint != index.
11c80 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  Outputs.Constrai
11c90 6e 74 55 73 61 67 65 73 2e 4c 65 6e 67 74 68 29  ntUsages.Length)
11ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cb0 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
11cc0 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20           offset 
11cd0 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d  += sizeof(int);.
11ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
11cf0 6e 74 50 74 72 20 70 43 6f 6e 73 74 72 61 69 6e  ntPtr pConstrain
11d00 74 20 3d 20 52 65 61 64 49 6e 74 50 74 72 28 70  t = ReadIntPtr(p
11d10 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d  Index, offset);.
11d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
11d30 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e  ffset += IntPtr.
11d40 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Size;....       
11d50 20 20 20 20 20 69 6e 74 20 6e 4f 72 64 65 72 42       int nOrderB
11d60 79 20 3d 20 52 65 61 64 49 6e 74 33 32 28 70 49  y = ReadInt32(pI
11d70 6e 64 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  ndex, offset);..
11d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
11d90 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
11da0 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
11db0 20 20 20 20 49 6e 74 50 74 72 20 70 4f 72 64 65      IntPtr pOrde
11dc0 72 42 79 20 3d 20 52 65 61 64 49 6e 74 50 74 72  rBy = ReadIntPtr
11dd0 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74 29  (pIndex, offset)
11de0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11df0 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74   offset += IntPt
11e00 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  r.Size;....     
11e10 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
11e20 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20 3d  onstraintUsage =
11e30 20 52 65 61 64 49 6e 74 50 74 72 28 70 49 6e 64   ReadIntPtr(pInd
11e40 65 78 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  ex, offset);....
11e50 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
11e60 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
11e70 54 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53  Type = Marshal.S
11e80 69 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20  izeOf(typeof(.. 
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55                 U
11ea0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11eb0 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78  ds.sqlite3_index
11ec0 5f 63 6f 6e 73 74 72 61 69 6e 74 29 29 3b 0d 0a  _constraint));..
11ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
11ee0 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72 61 69  r (int iConstrai
11ef0 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74 72 61  nt = 0; iConstra
11f00 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61 69 6e  int < nConstrain
11f10 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74 2b 2b  t; iConstraint++
11f20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
11f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f40 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
11f50 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
11f60 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 63  dex_constraint c
11f70 6f 6e 73 74 72 61 69 6e 74 20 3d 0d 0a 20 20 20  onstraint =..   
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
11fa0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11fb0 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
11fc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
11fe0 78 2e 49 6e 70 75 74 73 2e 43 6f 6e 73 74 72 61  x.Inputs.Constra
11ff0 69 6e 74 73 5b 69 43 6f 6e 73 74 72 61 69 6e 74  ints[iConstraint
12000 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ]);....         
12010 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 53         Marshal.S
12020 74 72 75 63 74 75 72 65 54 6f 50 74 72 28 0d 0a  tructureToPtr(..
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20      constraint, 
12050 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28  IntPtrForOffset(
12060 70 43 6f 6e 73 74 72 61 69 6e 74 2c 0d 0a 20 20  pConstraint,..  
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 69 43 6f 6e 73 74 72 61 69 6e 74 20 2a 20    iConstraint * 
12090 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61 69 6e 74  sizeOfConstraint
120a0 54 79 70 65 29 2c 20 66 61 6c 73 65 29 3b 0d 0a  Type), false);..
120b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
120c0 20 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43    index.Inputs.C
120d0 6f 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73  onstraints[iCons
120e0 74 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20  traint] =..     
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
12100 65 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  ew SQLiteIndexCo
12110 6e 73 74 72 61 69 6e 74 28 63 6f 6e 73 74 72 61  nstraint(constra
12120 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
12130 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12140 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72      int sizeOfOr
12150 64 65 72 42 79 54 79 70 65 20 3d 20 4d 61 72 73  derByType = Mars
12160 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f  hal.SizeOf(typeo
12170 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f(..            
12180 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
12190 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
121a0 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 29 29 3b  index_orderby));
121b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
121c0 66 6f 72 20 28 69 6e 74 20 69 4f 72 64 65 72 42  for (int iOrderB
121d0 79 20 3d 20 30 3b 20 69 4f 72 64 65 72 42 79 20  y = 0; iOrderBy 
121e0 3c 20 6e 4f 72 64 65 72 42 79 3b 20 69 4f 72 64  < nOrderBy; iOrd
121f0 65 72 42 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20  erBy++)..       
12200 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12210 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
12220 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12230 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62  te3_index_orderb
12240 79 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20 20 20  y orderBy =..   
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
12270 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12280 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 28 0d  _index_orderby(.
12290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
122a0 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e 49           index.I
122b0 6e 70 75 74 73 2e 4f 72 64 65 72 42 79 73 5b 69  nputs.OrderBys[i
122c0 4f 72 64 65 72 42 79 5d 29 3b 0d 0a 0d 0a 20 20  OrderBy]);....  
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
122e0 72 73 68 61 6c 2e 53 74 72 75 63 74 75 72 65 54  rshal.StructureT
122f0 6f 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  oPtr(..         
12300 20 20 20 20 20 20 20 20 20 20 20 6f 72 64 65 72             order
12310 42 79 2c 20 49 6e 74 50 74 72 46 6f 72 4f 66 66  By, IntPtrForOff
12320 73 65 74 28 70 4f 72 64 65 72 42 79 2c 0d 0a 20  set(pOrderBy,.. 
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 20 69 4f 72 64 65 72 42 79 20 2a 20 73 69     iOrderBy * si
12350 7a 65 4f 66 4f 72 64 65 72 42 79 54 79 70 65 29  zeOfOrderByType)
12360 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20  , false);....   
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
12380 65 78 2e 49 6e 70 75 74 73 2e 4f 72 64 65 72 42  ex.Inputs.OrderB
12390 79 73 5b 69 4f 72 64 65 72 42 79 5d 20 3d 0d 0a  ys[iOrderBy] =..
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123b0 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e      new SQLiteIn
123c0 64 65 78 4f 72 64 65 72 42 79 28 6f 72 64 65 72  dexOrderBy(order
123d0 42 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  By);..          
123e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
123f0 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e     int sizeOfCon
12400 73 74 72 61 69 6e 74 55 73 61 67 65 54 79 70 65  straintUsageType
12410 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f   = Marshal.SizeO
12420 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20  f(typeof(..     
12430 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
12440 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12450 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
12460 73 74 72 61 69 6e 74 5f 75 73 61 67 65 29 29 3b  straint_usage));
12470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12480 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e 73 74 72  for (int iConstr
12490 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f 6e 73 74  aint = 0; iConst
124a0 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73 74 72 61  raint < nConstra
124b0 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61 69 6e 74  int; iConstraint
124c0 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
124d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
124e0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
124f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12500 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74  index_constraint
12510 5f 75 73 61 67 65 20 63 6f 6e 73 74 72 61 69 6e  _usage constrain
12520 74 55 73 61 67 65 20 3d 0d 0a 20 20 20 20 20 20  tUsage =..      
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
12540 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
12550 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69 6e  thods.sqlite3_in
12560 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f 75  dex_constraint_u
12570 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  sage(..         
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12590 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43 6f 6e  ndex.Outputs.Con
125a0 73 74 72 61 69 6e 74 55 73 61 67 65 73 5b 69 43  straintUsages[iC
125b0 6f 6e 73 74 72 61 69 6e 74 5d 29 3b 0d 0a 0d 0a  onstraint]);....
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 4d 61 72 73 68 61 6c 2e 53 74 72 75 63 74 75 72  Marshal.Structur
125e0 65 54 6f 50 74 72 28 0d 0a 20 20 20 20 20 20 20  eToPtr(..       
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
12600 73 74 72 61 69 6e 74 55 73 61 67 65 2c 20 49 6e  straintUsage, In
12610 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 43  tPtrForOffset(pC
12620 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c 0d  onstraintUsage,.
12630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12640 20 20 20 20 20 69 43 6f 6e 73 74 72 61 69 6e 74       iConstraint
12650 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74 72 61   * sizeOfConstra
12660 69 6e 74 55 73 61 67 65 54 79 70 65 29 2c 20 66  intUsageType), f
12670 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alse);....      
12680 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2e            index.
12690 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  Outputs.Constrai
126a0 6e 74 55 73 61 67 65 73 5b 69 43 6f 6e 73 74 72  ntUsages[iConstr
126b0 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20 20  aint] =..       
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
126d0 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73   SQLiteIndexCons
126e0 74 72 61 69 6e 74 55 73 61 67 65 28 63 6f 6e 73  traintUsage(cons
126f0 74 72 61 69 6e 74 55 73 61 67 65 29 3b 0d 0a 20  traintUsage);.. 
12700 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
12710 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12720 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
12730 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
12740 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
12750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12790 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
127a0 67 69 6f 6e 20 53 51 4c 69 74 65 4d 6f 64 75 6c  gion SQLiteModul
127b0 65 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20  e Base Class..  
127c0 20 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45 44 20    /* NOT SEALED 
127d0 2a 2f 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 61  */..    public a
127e0 62 73 74 72 61 63 74 20 63 6c 61 73 73 20 53 51  bstract class SQ
127f0 4c 69 74 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20  LiteModule :..  
12800 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
12810 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2c 20  eManagedModule, 
12820 2f 2a 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  /*ISQLiteNativeM
12830 6f 64 75 6c 65 2c 2a 2f 20 49 44 69 73 70 6f 73  odule,*/ IDispos
12840 61 62 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  able..    {..   
12850 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
12860 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
12870 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
12880 63 6f 6e 73 74 20 64 6f 75 62 6c 65 20 44 65 66  const double Def
12890 61 75 6c 74 43 6f 73 74 20 3d 20 64 6f 75 62 6c  aultCost = doubl
128a0 65 2e 4d 61 78 56 61 6c 75 65 3b 0d 0a 20 20 20  e.MaxValue;..   
128b0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
128c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
128d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12910 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
12920 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
12930 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
12940 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65  ate UnsafeNative
12950 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12960 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64  module nativeMod
12970 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ule;..        pr
12980 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
12990 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56  <IntPtr, SQLiteV
129a0 69 72 74 75 61 6c 54 61 62 6c 65 3e 20 74 61 62  irtualTable> tab
129b0 6c 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  les;..        pr
129c0 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72 79  ivate Dictionary
129d0 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56  <IntPtr, SQLiteV
129e0 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
129f0 72 3e 20 63 75 72 73 6f 72 73 3b 0d 0a 20 20 20  r> cursors;..   
12a00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
12a10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
12a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
12a70 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 4d  egion Internal M
12a80 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
12a90 69 6e 74 65 72 6e 61 6c 20 55 6e 73 61 66 65 4e  internal UnsafeN
12aa0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12ab0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 43 72 65 61  ite3_module Crea
12ac0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29  teNativeModule()
12ad0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
12ae0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12af0 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  CreateNativeModu
12b00 6c 65 28 43 72 65 61 74 65 4e 61 74 69 76 65 4d  le(CreateNativeM
12b10 6f 64 75 6c 65 49 6d 70 6c 28 29 29 3b 0d 0a 20  oduleImpl());.. 
12b20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12b30 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
12b40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12b90 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
12ba0 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
12bb0 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
12bc0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4d 6f 64  public SQLiteMod
12bd0 75 6c 65 28 73 74 72 69 6e 67 20 6e 61 6d 65 29  ule(string name)
12be0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
12bf0 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 61 6d           if (nam
12c00 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
12c10 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
12c20 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
12c30 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6e 61 6d  llException("nam
12c40 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e");....        
12c50 20 20 20 20 74 68 69 73 2e 6e 61 6d 65 20 3d 20      this.name = 
12c60 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  name;..         
12c70 20 20 20 74 68 69 73 2e 74 61 62 6c 65 73 20 3d     this.tables =
12c80 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
12c90 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69  IntPtr, SQLiteVi
12ca0 72 74 75 61 6c 54 61 62 6c 65 3e 28 29 3b 0d 0a  rtualTable>();..
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
12cc0 2e 63 75 72 73 6f 72 73 20 3d 20 6e 65 77 20 44  .cursors = new D
12cd0 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50 74 72  ictionary<IntPtr
12ce0 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  , SQLiteVirtualT
12cf0 61 62 6c 65 43 75 72 73 6f 72 3e 28 29 3b 0d 0a  ableCursor>();..
12d00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12d10 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
12d20 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
12d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
12d80 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
12d90 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ods..        pri
12da0 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76  vate UnsafeNativ
12db0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12dc0 5f 6d 6f 64 75 6c 65 20 43 72 65 61 74 65 4e 61  _module CreateNa
12dd0 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20  tiveModule(..   
12de0 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
12df0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 6d 6f 64  NativeModule mod
12e00 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ule..           
12e10 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
12e20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
12e30 65 4d 6f 64 75 6c 65 20 3d 20 6e 65 77 20 55 6e  eModule = new Un
12e40 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12e50 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  s.sqlite3_module
12e60 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
12e70 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 69 56   nativeModule.iV
12e80 65 72 73 69 6f 6e 20 3d 20 32 3b 0d 0a 0d 0a 20  ersion = 2;.... 
12e90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
12ea0 6f 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  odule != null)..
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
12ed0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65  ativeModule.xCre
12ee0 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ate = new Unsafe
12ef0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
12f00 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
12f10 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
12f20 6c 65 2e 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a  le.xCreate);....
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  nativeModule.xCo
12f50 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61  nnect = new Unsa
12f60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12f70 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  xConnect(..     
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
12f90 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 29 3b  odule.xConnect);
12fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12fb0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
12fc0 2e 78 42 65 73 74 49 6e 64 65 78 20 3d 20 6e 65  .xBestIndex = ne
12fd0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
12fe0 74 68 6f 64 73 2e 78 42 65 73 74 49 6e 64 65 78  thods.xBestIndex
12ff0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13000 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42         module.xB
13010 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  estIndex);....  
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
13030 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
13040 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73  onnect = new Uns
13050 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13060 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20  .xDisconnect(.. 
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f     module.xDisco
13090 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
130a0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
130b0 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79  eModule.xDestroy
130c0 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
130d0 69 76 65 4d 65 74 68 6f 64 73 2e 78 44 65 73 74  iveMethods.xDest
130e0 72 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  roy(..          
130f0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
13100 2e 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20  .xDestroy);.... 
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
13120 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f 70 65  ativeModule.xOpe
13130 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
13140 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f 70 65  tiveMethods.xOpe
13150 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
13160 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
13170 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Open);....      
13180 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
13190 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65 20 3d 20  Module.xClose = 
131a0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
131b0 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73 65 28 0d  Methods.xClose(.
131c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
131d0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f       module.xClo
131e0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
131f0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
13200 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 3d 20 6e  dule.xFilter = n
13210 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
13220 65 74 68 6f 64 73 2e 78 46 69 6c 74 65 72 28 0d  ethods.xFilter(.
13230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13240 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6c       module.xFil
13250 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ter);....       
13260 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
13270 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65  odule.xNext = ne
13280 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
13290 74 68 6f 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20  thods.xNext(..  
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 20 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 29 3b    module.xNext);
132c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
132d0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
132e0 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61  .xEof = new Unsa
132f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13300 78 45 6f 66 28 6d 6f 64 75 6c 65 2e 78 45 6f 66  xEof(module.xEof
13310 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13320 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
13330 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77  le.xColumn = new
13340 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13350 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20  hods.xColumn(.. 
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13370 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d     module.xColum
13380 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
13390 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
133a0 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e 65 77  ule.xRowId = new
133b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
133c0 68 6f 64 73 2e 78 52 6f 77 49 64 28 0d 0a 20 20  hods.xRowId(..  
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 29    module.xRowId)
133f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13400 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
13410 65 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20  e.xUpdate = new 
13420 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13430 6f 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20  ods.xUpdate(..  
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 6d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65    module.xUpdate
13460 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13470 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
13480 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20  le.xBegin = new 
13490 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
134a0 6f 64 73 2e 78 42 65 67 69 6e 28 0d 0a 20 20 20  ods.xBegin(..   
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 29 3b   module.xBegin);
134d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
134e0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
134f0 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73  .xSync = new Uns
13500 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13510 2e 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20 20  .xSync(..       
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
13530 75 6c 65 2e 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20  ule.xSync);.... 
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
13550 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6d  ativeModule.xCom
13560 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  mit = new Unsafe
13570 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
13580 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20  ommit(..        
13590 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
135a0 6c 65 2e 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a  le.xCommit);....
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f  nativeModule.xRo
135d0 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73  llback = new Uns
135e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
135f0 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  .xRollback(..   
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63   module.xRollbac
13620 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
13630 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
13640 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f  ule.xFindFunctio
13650 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  n = new UnsafeNa
13660 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e  tiveMethods.xFin
13670 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  module.xFindFunc
136a0 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tion);....      
136b0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
136c0 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d  Module.xRename =
136d0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
136e0 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65  eMethods.xRename
136f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13700 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52         module.xR
13710 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ename);....     
13720 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
13730 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69  eModule.xSavepoi
13740 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  nt = new UnsafeN
13750 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61  ativeMethods.xSa
13760 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
13780 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 29  dule.xSavepoint)
13790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
137a0 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c       nativeModul
137b0 65 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77  e.xRelease = new
137c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
137d0 68 6f 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a  hods.xRelease(..
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 65 6c 65      module.xRele
13800 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ase);....       
13810 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
13820 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54  odule.xRollbackT
13830 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  o = new UnsafeNa
13840 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c  tiveMethods.xRol
13850 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f                mo
13870 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f  dule.xRollbackTo
13880 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
13890 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
138a0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
138b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
138c0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
138d0 2e 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55  .xCreate = new U
138e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
138f0 64 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20  ds.xCreate(..   
13900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13910 20 78 43 72 65 61 74 65 29 3b 0d 0a 0d 0a 20 20   xCreate);....  
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
13930 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e  tiveModule.xConn
13940 65 63 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ect = new Unsafe
13950 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
13960 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f               xCo
13980 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
13990 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
139a0 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64  eModule.xBestInd
139b0 65 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  ex = new UnsafeN
139c0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
139d0 73 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20  stIndex(..      
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 42                xB
139f0 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  estIndex);....  
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
13a10 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69 73 63  tiveModule.xDisc
13a20 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73  onnect = new Uns
13a30 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13a40 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20  .xDisconnect(.. 
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 20 20 20 78 44 69 73 63 6f 6e 6e 65 63 74 29 3b     xDisconnect);
13a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13a80 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
13a90 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20  .xDestroy = new 
13aa0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13ab0 6f 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20  ods.xDestroy(.. 
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 78 44 65 73 74 72 6f 79 29 3b 0d 0a 0d     xDestroy);...
13ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13af0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4f   nativeModule.xO
13b00 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  pen = new Unsafe
13b10 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 4f  NativeMethods.xO
13b20 70 65 6e 28 78 4f 70 65 6e 29 3b 0d 0a 20 20 20  pen(xOpen);..   
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
13b40 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
13b50 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
13b60 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73  iveMethods.xClos
13b70 65 28 78 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20  e(xClose);....  
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
13b90 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74  tiveModule.xFilt
13ba0 65 72 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  er = new UnsafeN
13bb0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69  ativeMethods.xFi
13bc0 6c 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  lter(..         
13bd0 20 20 20 20 20 20 20 20 20 20 20 78 46 69 6c 74             xFilt
13be0 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  er);....        
13bf0 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
13c00 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77  dule.xNext = new
13c10 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13c20 68 6f 64 73 2e 78 4e 65 78 74 28 78 4e 65 78 74  hods.xNext(xNext
13c30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
13c40 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
13c50 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55 6e 73 61  .xEof = new Unsa
13c60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13c70 78 45 6f 66 28 78 45 6f 66 29 3b 0d 0a 0d 0a 20  xEof(xEof);.... 
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
13c90 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c  ativeModule.xCol
13ca0 75 6d 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  umn = new Unsafe
13cb0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
13cc0 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20  olumn(..        
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 78 43 6f 6c              xCol
13ce0 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  umn);....       
13cf0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
13d00 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20 6e  odule.xRowId = n
13d10 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
13d20 65 74 68 6f 64 73 2e 78 52 6f 77 49 64 28 78 52  ethods.xRowId(xR
13d30 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  owId);....      
13d40 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
13d50 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d  Module.xUpdate =
13d60 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
13d70 65 4d 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65  eMethods.xUpdate
13d80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13d90 20 20 20 20 20 20 20 78 55 70 64 61 74 65 29 3b         xUpdate);
13da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13db0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
13dc0 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77 20 55 6e  .xBegin = new Un
13dd0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
13de0 73 2e 78 42 65 67 69 6e 28 78 42 65 67 69 6e 29  s.xBegin(xBegin)
13df0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13e00 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
13e10 78 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e 73 61  xSync = new Unsa
13e20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13e30 78 53 79 6e 63 28 78 53 79 6e 63 29 3b 0d 0a 0d  xSync(xSync);...
13e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e50 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
13e60 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73 61  ommit = new Unsa
13e70 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13e80 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20  xCommit(..      
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 43                xC
13ea0 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ommit);....     
13eb0 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
13ec0 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
13ed0 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  k = new UnsafeNa
13ee0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 6c  tiveMethods.xRol
13ef0 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
13f00 20 20 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c              xRol
13f10 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
13f20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
13f30 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
13f40 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61  ction = new Unsa
13f50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13f60 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  xFindFunction(..
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 78 46 69 6e 64 46 75 6e 63 74 69 6f      xFindFunctio
13f90 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
13fa0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
13fb0 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d 20 6e 65  ule.xRename = ne
13fc0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
13fd0 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65 28 0d 0a  thods.xRename(..
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d      xRename);...
14000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14010 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53   nativeModule.xS
14020 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55  avepoint = new U
14030 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14040 64 73 2e 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a  ds.xSavepoint(..
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 78 53 61 76 65 70 6f 69 6e 74 29 3b      xSavepoint);
14070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14080 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
14090 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77 20  .xRelease = new 
140a0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
140b0 6f 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a 20  ods.xRelease(.. 
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 78 52 65 6c 65 61 73 65 29 3b 0d 0a 0d     xRelease);...
140e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
140f0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52   nativeModule.xR
14100 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e 65 77 20  ollbackTo = new 
14110 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14120 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 28  ods.xRollbackTo(
14130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14140 20 20 20 20 20 20 78 52 6f 6c 6c 62 61 63 6b 54        xRollbackT
14150 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o);..           
14160 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14170 20 20 72 65 74 75 72 6e 20 6e 61 74 69 76 65 4d    return nativeM
14180 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  odule;..        
14190 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
141a0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
141b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
141c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14200 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 6f 74      #region Prot
14210 65 63 74 65 64 20 4d 65 6d 62 65 72 73 0d 0a 20  ected Members.. 
14220 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d         #region M
14230 6f 64 75 6c 65 20 48 65 6c 70 65 72 20 4d 65 74  odule Helper Met
14240 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72  hods..        pr
14250 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
14260 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
14270 75 6c 65 20 43 72 65 61 74 65 4e 61 74 69 76 65  ule CreateNative
14280 4d 6f 64 75 6c 65 49 6d 70 6c 28 29 0d 0a 20 20  ModuleImpl()..  
14290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
142a0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
142b0 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 73 65 20 62  ; /* NOTE: Use b
142c0 75 69 6c 74 2d 69 6e 20 64 65 66 61 75 6c 74 73  uilt-in defaults
142d0 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d 0d  . */..        }.
142e0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
142f0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
14300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14340 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14350 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65    #region Native
14360 20 54 61 62 6c 65 20 48 65 6c 70 65 72 20 4d 65   Table Helper Me
14370 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70  thods..        p
14380 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
14390 20 49 6e 74 50 74 72 20 41 6c 6c 6f 63 61 74 65   IntPtr Allocate
143a0 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20  Table()..       
143b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
143c0 69 6e 74 20 73 69 7a 65 20 3d 20 4d 61 72 73 68  int size = Marsh
143d0 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66  al.SizeOf(typeof
143e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
143f0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14400 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
14410 74 61 62 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tab));....      
14420 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
14430 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61  iteMemory.Alloca
14440 74 65 28 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20  te(size);..     
14450 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
144b0 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72     protected vir
144c0 74 75 61 6c 20 76 6f 69 64 20 5a 65 72 6f 54 61  tual void ZeroTa
144d0 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ble(..          
144e0 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a    IntPtr pVtab..
144f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
14500 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14510 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62 20        if (pVtab 
14520 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
14530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14540 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
14550 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
14560 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  et = 0;....     
14570 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72         SQLiteMar
14580 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72  shal.WriteIntPtr
14590 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20  (pVtab, offset, 
145a0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d  IntPtr.Zero);...
145b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
145c0 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69  set += IntPtr.Si
145d0 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ze;....         
145e0 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
145f0 2e 57 72 69 74 65 49 6e 74 33 32 28 70 56 74 61  .WriteInt32(pVta
14600 62 2c 20 6f 66 66 73 65 74 2c 20 30 29 3b 0d 0a  b, offset, 0);..
14610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
14620 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
14630 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
14640 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
14650 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 56  l.WriteIntPtr(pV
14660 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 49 6e 74  tab, offset, Int
14670 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
14680 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14690 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
146a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
146e0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
146f0 72 74 75 61 6c 20 76 6f 69 64 20 46 72 65 65 54  rtual void FreeT
14700 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
14710 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
14720 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
14730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14740 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45         SetTableE
14750 72 72 6f 72 28 70 56 74 61 62 2c 20 6e 75 6c 6c  rror(pVtab, null
14760 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
14770 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
14780 65 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20  e(pVtab);..     
14790 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
147a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
147b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
147c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
14800 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e         #region N
14810 61 74 69 76 65 20 43 75 72 73 6f 72 20 48 65 6c  ative Cursor Hel
14820 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
14830 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76       protected v
14840 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 41 6c  irtual IntPtr Al
14850 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 29 0d 0a  locateCursor()..
14860 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14870 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20         int size 
14880 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f 66  = Marshal.SizeOf
14890 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20 20  (typeof(..      
148a0 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
148b0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
148c0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
148d0 72 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r));....        
148e0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
148f0 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65  eMemory.Allocate
14900 28 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20  (size);..       
14910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
14920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14960 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14970 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
14980 61 6c 20 76 6f 69 64 20 46 72 65 65 43 75 72 73  al void FreeCurs
14990 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
149a0 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
149b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
149c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
149d0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
149e0 6f 72 79 2e 46 72 65 65 28 70 43 75 72 73 6f 72  ory.Free(pCursor
149f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
14a00 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
14a10 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
14a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14a70 23 72 65 67 69 6f 6e 20 54 61 62 6c 65 20 4c 6f  #region Table Lo
14a80 6f 6b 75 70 20 4d 65 74 68 6f 64 73 0d 0a 20 20  okup Methods..  
14a90 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
14aa0 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 54  virtual IntPtr T
14ab0 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 0d  ableFromCursor(.
14ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
14ad0 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
14ae0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
14af0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14b00 20 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d     if (pCursor =
14b10 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65  return IntPtr.Ze
14b40 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ro;....         
14b50 20 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61     return Marsha
14b60 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70 43 75  l.ReadIntPtr(pCu
14b70 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
14b80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
14b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14be0 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61  protected virtua
14bf0 6c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  l SQLiteVirtualT
14c00 61 62 6c 65 20 54 61 62 6c 65 46 72 6f 6d 49 6e  able TableFromIn
14c10 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
14c20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
14c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
14c40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14c50 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62         if (pVtab
14c60 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
14c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c90 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70   SetTableError(p
14ca0 56 74 61 62 2c 20 22 69 6e 76 61 6c 69 64 20 6e  Vtab, "invalid n
14cb0 61 74 69 76 65 20 74 61 62 6c 65 22 29 3b 0d 0a  ative table");..
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
14ce0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14cf0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
14d00 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
14d10 62 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ble;....        
14d20 20 20 20 20 69 66 20 28 28 74 61 62 6c 65 73 20      if ((tables 
14d30 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62               tab
14d50 6c 65 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  les.TryGetValue(
14d60 70 56 74 61 62 2c 20 6f 75 74 20 74 61 62 6c 65  pVtab, out table
14d70 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14d90 20 20 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b     return table;
14da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14db0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  ...            S
14dc0 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
14dd0 61 62 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ab, String.Forma
14de0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14df0 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
14e00 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
14e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e20 20 22 6d 61 6e 61 67 65 64 20 74 61 62 6c 65 20   "managed table 
14e30 66 6f 72 20 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e  for {0} not foun
14e40 64 22 2c 20 70 56 74 61 62 29 29 3b 0d 0a 0d 0a  d", pVtab));....
14e50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
14e60 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
14e70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
14e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ec0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14ed0 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
14ee0 75 61 6c 20 49 6e 74 50 74 72 20 54 61 62 6c 65  ual IntPtr Table
14ef0 54 6f 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20  ToIntPtr(..     
14f00 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72         SQLiteVir
14f10 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d  tualTable table.
14f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
14f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14f40 20 20 20 20 20 20 20 69 66 20 28 28 74 61 62 6c         if ((tabl
14f50 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 74  e == null) || (t
14f60 61 62 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 29 0d  ables == null)).
14f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f80 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72 2e 5a   return IntPtr.Z
14f90 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
14fa0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
14fb0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
14fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
14fd0 6c 20 73 75 63 63 65 73 73 20 3d 20 66 61 6c 73  l success = fals
14fe0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14ff0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
15000 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15010 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 41 6c        pVtab = Al
15020 6c 6f 63 61 74 65 54 61 62 6c 65 28 29 3b 0d 0a  locateTable();..
15030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15040 20 20 69 66 20 28 70 56 74 61 62 20 21 3d 20 49    if (pVtab != I
15050 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 5a 65 72 6f 54 61 62 6c 65 28 70 56      ZeroTable(pV
15090 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tab);..         
150a0 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c 65             table
150b0 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d 20  .NativeHandle = 
150c0 70 56 74 61 62 3b 0d 0a 20 20 20 20 20 20 20 20  pVtab;..        
150d0 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
150e0 65 73 2e 41 64 64 28 70 56 74 61 62 2c 20 74 61  es.Add(pVtab, ta
150f0 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
15100 20 20 20 20 20 20 20 20 20 20 20 73 75 63 63 65             succe
15110 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ss = true;..    
15120 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
15140 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
15150 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
15160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15170 20 20 69 66 20 28 21 73 75 63 63 65 73 73 20 26    if (!success &
15180 26 20 28 70 56 74 61 62 20 21 3d 20 49 6e 74 50  & (pVtab != IntP
15190 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20  tr.Zero))..     
151a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 46 72 65 65 54 61 62 6c 65 28 70 56 74 61    FreeTable(pVta
151d0 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
151e0 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20 3d           pVtab =
151f0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
15230 65 74 75 72 6e 20 70 56 74 61 62 3b 0d 0a 20 20  eturn pVtab;..  
15240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15250 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
15260 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
152b0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
152c0 6e 20 43 75 72 73 6f 72 20 4c 6f 6f 6b 75 70 20  n Cursor Lookup 
152d0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
152e0 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
152f0 61 6c 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  al SQLiteVirtual
15300 54 61 62 6c 65 43 75 72 73 6f 72 20 43 75 72 73  TableCursor Curs
15310 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  orFromIntPtr(.. 
15320 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
15330 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
15340 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
15350 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rsor..          
15360 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
15370 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15380 70 43 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74  pCursor == IntPt
15390 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
153a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
153b0 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
153c0 45 72 72 6f 72 28 70 56 74 61 62 2c 20 22 69 6e  Error(pVtab, "in
153d0 76 61 6c 69 64 20 6e 61 74 69 76 65 20 63 75 72  valid native cur
153e0 73 6f 72 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  sor");..        
153f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
15400 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
15410 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15420 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
15430 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
15440 6f 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  or;....         
15450 20 20 20 69 66 20 28 28 63 75 72 73 6f 72 73 20     if ((cursors 
15460 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20  != null) &&..   
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
15480 73 6f 72 73 2e 54 72 79 47 65 74 56 61 6c 75 65  sors.TryGetValue
15490 28 70 43 75 72 73 6f 72 2c 20 6f 75 74 20 63 75  (pCursor, out cu
154a0 72 73 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rsor))..        
154b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
154c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
154d0 72 73 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  rsor;..         
154e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
154f0 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f      SetTableErro
15500 72 28 70 56 74 61 62 2c 20 53 74 72 69 6e 67 2e  r(pVtab, String.
15510 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15520 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
15530 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
15540 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
15550 20 20 20 20 20 20 22 6d 61 6e 61 67 65 64 20 63        "managed c
15560 75 72 73 6f 72 20 66 6f 72 20 7b 30 7d 20 6e 6f  ursor for {0} no
15570 74 20 66 6f 75 6e 64 22 2c 20 70 43 75 72 73 6f  t found", pCurso
15580 72 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r));....        
15590 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
155a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
155b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
155c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15600 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
15610 74 65 64 20 76 69 72 74 75 61 6c 20 49 6e 74 50  ted virtual IntP
15620 74 72 20 43 75 72 73 6f 72 54 6f 49 6e 74 50 74  tr CursorToIntPt
15630 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
15640 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
15650 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d  leCursor cursor.
15660 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
15670 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15680 20 20 20 20 20 20 20 69 66 20 28 28 63 75 72 73         if ((curs
15690 6f 72 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  or == null) || (
156a0 63 75 72 73 6f 72 73 20 3d 3d 20 6e 75 6c 6c 29  cursors == null)
156b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
156c0 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74 72     return IntPtr
156d0 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
156e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75        IntPtr pCu
156f0 72 73 6f 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  rsor = IntPtr.Ze
15700 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
15710 20 62 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d 20   bool success = 
15720 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
15730 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
15740 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15750 20 20 20 20 20 20 20 20 20 20 70 43 75 72 73 6f            pCurso
15760 72 20 3d 20 41 6c 6c 6f 63 61 74 65 43 75 72 73  r = AllocateCurs
15770 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
15780 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 75           if (pCu
15790 72 73 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  rsor != IntPtr.Z
157a0 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
157b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
157d0 73 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64 6c 65  sor.NativeHandle
157e0 20 3d 20 70 43 75 72 73 6f 72 3b 0d 0a 20 20 20   = pCursor;..   
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 63 75 72 73 6f 72 73 2e 41 64 64 28 70 43 75   cursors.Add(pCu
15810 72 73 6f 72 2c 20 63 75 72 73 6f 72 29 3b 0d 0a  rsor, cursor);..
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 73 75 63 63 65 73 73 20 3d 20 74 72      success = tr
15840 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15850 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15860 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15870 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
15880 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
158a0 73 75 63 63 65 73 73 20 26 26 20 28 70 43 75 72  success && (pCur
158b0 73 6f 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  sor != IntPtr.Ze
158c0 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ro))..          
158d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 72 65               Fre
158f0 65 43 75 72 73 6f 72 28 70 43 75 72 73 6f 72 29  eCursor(pCursor)
15900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15910 20 20 20 20 20 20 20 70 43 75 72 73 6f 72 20 3d         pCursor =
15920 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
15960 65 74 75 72 6e 20 70 43 75 72 73 6f 72 3b 0d 0a  eturn pCursor;..
15970 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15980 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
15990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
159a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
159f0 69 6f 6e 20 54 61 62 6c 65 20 44 65 63 6c 61 72  ion Table Declar
15a00 61 74 69 6f 6e 20 48 65 6c 70 65 72 20 4d 65 74  ation Helper Met
15a10 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 70 72  hods..        pr
15a20 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
15a30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
15a40 44 65 63 6c 61 72 65 54 61 62 6c 65 28 0d 0a 20  DeclareTable(.. 
15a50 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
15a60 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
15a70 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ection,..       
15a80 20 20 20 20 20 73 74 72 69 6e 67 20 73 71 6c 2c       string sql,
15a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
15aa0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
15ac0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15ad0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63        if (connec
15ae0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
15af0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
15b10 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63  ror = "invalid c
15b20 6f 6e 6e 65 63 74 69 6f 6e 22 3b 0d 0a 20 20 20  onnection";..   
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15b40 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
15b50 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20  ode.Error;..    
15b60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15b70 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42           SQLiteB
15b80 61 73 65 20 73 71 6c 69 74 65 42 61 73 65 20 3d  ase sqliteBase =
15b90 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c   connection._sql
15ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15bb0 20 69 66 20 28 73 71 6c 69 74 65 42 61 73 65 20   if (sqliteBase 
15bc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15bd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15be0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
15bf0 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73   "connection has
15c00 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22   invalid handle"
15c10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15c20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
15c30 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
15c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
15c60 65 74 75 72 6e 20 73 71 6c 69 74 65 42 61 73 65  eturn sqliteBase
15c70 2e 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54  .DeclareVirtualT
15c80 61 62 6c 65 28 74 68 69 73 2c 20 73 71 6c 2c 20  able(this, sql, 
15c90 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
15ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15cb0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
15cc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
15cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15d10 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
15d20 20 45 72 72 6f 72 20 48 61 6e 64 6c 69 6e 67 20   Error Handling 
15d30 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
15d40 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
15d50 64 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53  d virtual bool S
15d60 65 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20  etTableError(.. 
15d70 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
15d80 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20  r pVtab,..      
15d90 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
15da0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
15db0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
15dc0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
15dd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15df0 20 28 4c 6f 67 45 72 72 6f 72 73 29 0d 0a 20 20   (LogErrors)..  
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
15e30 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
15e40 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 2c  ErrorCode.Error,
15e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e60 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
15e70 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
15e80 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
15e90 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69               "Vi
15eb0 72 74 75 61 6c 20 74 61 62 6c 65 20 65 72 72 6f  rtual table erro
15ec0 72 3a 20 7b 30 7d 22 2c 20 65 72 72 6f 72 29 29  r: {0}", error))
15ed0 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
15f10 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
15f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15f30 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
15f40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
15f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15f60 69 66 20 28 70 56 74 61 62 20 3d 3d 20 49 6e 74  if (pVtab == Int
15f70 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
15f80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15f90 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15fa0 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73          int offs
15fb0 65 74 20 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65  et = IntPtr.Size
15fc0 20 2b 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b 0d   + sizeof(int);.
15fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
15fe0 50 74 72 20 70 45 72 72 6f 72 20 3d 20 53 51 4c  Ptr pError = SQL
15ff0 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
16000 6e 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66  ntPtr(pVtab, off
16010 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
16020 20 20 20 20 20 69 66 20 28 70 45 72 72 6f 72 20       if (pError 
16030 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
16040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
16070 65 28 70 45 72 72 6f 72 29 3b 20 70 45 72 72 6f  e(pError); pErro
16080 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
16090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
160a0 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e    SQLiteMarshal.
160b0 57 72 69 74 65 49 6e 74 50 74 72 28 70 56 74 61  WriteIntPtr(pVta
160c0 62 2c 20 6f 66 66 73 65 74 2c 20 70 45 72 72 6f  b, offset, pErro
160d0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
160e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
160f0 20 20 69 66 20 28 65 72 72 6f 72 20 3d 3d 20 6e    if (error == n
16100 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16110 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
16120 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
16130 20 20 62 6f 6f 6c 20 73 75 63 63 65 73 73 20 3d    bool success =
16140 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16150 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
16160 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16170 20 20 20 20 20 20 20 20 20 20 20 70 45 72 72 6f             pErro
16180 72 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67  r = SQLiteString
16190 2e 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53  .Utf8IntPtrFromS
161a0 74 72 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20  tring(error);.. 
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
161c0 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
161d0 74 65 49 6e 74 50 74 72 28 70 56 74 61 62 2c 20  teIntPtr(pVtab, 
161e0 6f 66 66 73 65 74 2c 20 70 45 72 72 6f 72 29 3b  offset, pError);
161f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16200 20 20 73 75 63 63 65 73 73 20 3d 20 74 72 75 65    success = true
16210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
16230 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
16240 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16250 20 20 20 20 20 20 69 66 20 28 21 73 75 63 63 65        if (!succe
16260 73 73 20 26 26 20 28 70 45 72 72 6f 72 20 21 3d  ss && (pError !=
16270 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
162a0 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d         SQLiteMem
162b0 6f 72 79 2e 46 72 65 65 28 70 45 72 72 6f 72 29  ory.Free(pError)
162c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
162d0 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
162e0 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16300 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
16320 74 75 72 6e 20 73 75 63 63 65 73 73 3b 0d 0a 20  turn success;.. 
16330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16340 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16390 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
163a0 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65   virtual bool Se
163b0 74 54 61 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20  tTableError(..  
163c0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
163d0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
163e0 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
163f0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
16400 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
16410 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16420 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 3d       if (table =
16430 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16440 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16450 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16460 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
16470 61 62 20 3d 20 74 61 62 6c 65 2e 4e 61 74 69 76  ab = table.Nativ
16480 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20  eHandle;....    
16490 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61          if (pVta
164a0 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
164b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
164c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
164d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
164e0 72 65 74 75 72 6e 20 53 65 74 54 61 62 6c 65 45  return SetTableE
164f0 72 72 6f 72 28 70 56 74 61 62 2c 20 65 72 72 6f  rror(pVtab, erro
16500 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  r);..        }..
16510 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
16520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16560 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 6f  /....        pro
16570 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 62  tected virtual b
16580 6f 6f 6c 20 53 65 74 43 75 72 73 6f 72 45 72 72  ool SetCursorErr
16590 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  or(..           
165a0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
165b0 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
165c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
165d0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
165e0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
165f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16600 20 20 20 69 66 20 28 63 75 72 73 6f 72 20 3d 3d     if (cursor ==
16610 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16620 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
16630 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16640 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
16650 73 6f 72 20 3d 20 63 75 72 73 6f 72 2e 4e 61 74  sor = cursor.Nat
16660 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20  iveHandle;....  
16670 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43            if (pC
16680 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e  ursor == IntPtr.
16690 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
166a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
166b0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
166c0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
166d0 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73   = TableFromCurs
166e0 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a  or(pCursor);....
166f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16700 70 56 74 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e  pVtab == IntPtr.
16710 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
16720 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16730 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
16740 20 20 20 20 72 65 74 75 72 6e 20 53 65 74 54 61      return SetTa
16750 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
16760 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
16770 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
16780 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
16790 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
167a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
167e0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 64       #region Ind
167f0 65 78 20 48 61 6e 64 6c 69 6e 67 20 48 65 6c 70  ex Handling Help
16800 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
16810 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
16820 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74 45 73  rtual bool SetEs
16830 74 69 6d 61 74 65 64 43 6f 73 74 28 0d 0a 20 20  timatedCost(..  
16840 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16850 49 6e 64 65 78 20 69 6e 64 65 78 2c 0d 0a 20 20  Index index,..  
16860 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
16870 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 0d 0a   estimatedCost..
16880 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
16890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
168a0 20 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78        if ((index
168b0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e   == null) || (in
168c0 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d 20 6e  dex.Outputs == n
168d0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
168e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
168f0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
16900 20 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74      index.Output
16910 73 2e 45 73 74 69 6d 61 74 65 64 43 6f 73 74 20  s.EstimatedCost 
16920 3d 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 3b  = estimatedCost;
16930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
16940 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
16950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16960 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
169b0 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
169c0 72 74 75 61 6c 20 62 6f 6f 6c 20 53 65 74 45 73  rtual bool SetEs
169d0 74 69 6d 61 74 65 64 43 6f 73 74 28 0d 0a 20 20  timatedCost(..  
169e0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
169f0 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20 20 20  Index index..   
16a00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
16a10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16a20 20 20 20 72 65 74 75 72 6e 20 53 65 74 45 73 74     return SetEst
16a30 69 6d 61 74 65 64 43 6f 73 74 28 69 6e 64 65 78  imatedCost(index
16a40 2c 20 44 65 66 61 75 6c 74 43 6f 73 74 29 3b 0d  , DefaultCost);.
16a50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
16a60 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
16a70 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
16a80 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
16a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ad0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16ae0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
16af0 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
16b00 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
16b10 20 6c 6f 67 45 72 72 6f 72 73 3b 0d 0a 20 20 20   logErrors;..   
16b20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72 74       public virt
16b30 75 61 6c 20 62 6f 6f 6c 20 4c 6f 67 45 72 72 6f  ual bool LogErro
16b40 72 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  rs..        {.. 
16b50 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
16b60 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
16b70 3b 20 72 65 74 75 72 6e 20 6c 6f 67 45 72 72 6f  ; return logErro
16b80 72 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  rs; }..         
16b90 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69     set { CheckDi
16ba0 73 70 6f 73 65 64 28 29 3b 20 6c 6f 67 45 72 72  sposed(); logErr
16bb0 6f 72 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ors = value; }..
16bc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16bd0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
16c20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16c30 62 6f 6f 6c 20 6c 6f 67 45 78 63 65 70 74 69 6f  bool logExceptio
16c40 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns;..        pub
16c50 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c  lic virtual bool
16c60 20 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 0d 0a   LogExceptions..
16c70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16c80 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
16c90 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
16ca0 74 75 72 6e 20 6c 6f 67 45 78 63 65 70 74 69 6f  turn logExceptio
16cb0 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ns; }..         
16cc0 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69     set { CheckDi
16cd0 73 70 6f 73 65 64 28 29 3b 20 6c 6f 67 45 78 63  sposed(); logExc
16ce0 65 70 74 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b  eptions = value;
16cf0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
16d00 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
16d10 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
16d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16d70 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e  #region ISQLiteN
16d80 61 74 69 76 65 4d 6f 64 75 6c 65 20 4d 65 6d 62  ativeModule Memb
16d90 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ers..        pri
16da0 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
16db0 43 6f 64 65 20 78 43 72 65 61 74 65 28 0d 0a 20  Code xCreate(.. 
16dc0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
16dd0 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20 20 20  r pDb,..        
16de0 20 20 20 20 49 6e 74 50 74 72 20 70 41 75 78 2c      IntPtr pAux,
16df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
16e00 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
16e10 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20 61 72       IntPtr[] ar
16e20 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gv,..           
16e30 20 72 65 66 20 49 6e 74 50 74 72 20 70 56 74 61   ref IntPtr pVta
16e40 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
16e50 72 65 66 20 49 6e 74 50 74 72 20 70 45 72 72 6f  ref IntPtr pErro
16e60 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
16e70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
16e80 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
16e90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
16eb0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 53  ing fileName = S
16ec0 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69  QLiteString.Stri
16ed0 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72  ngFromUtf8IntPtr
16ee0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16ef0 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
16f00 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
16f10 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65 28 70  e3_db_filename(p
16f20 44 62 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  Db, IntPtr.Zero)
16f30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16f40 20 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c        using (SQL
16f50 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
16f60 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77 20 53  nnection = new S
16f70 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
16f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f90 20 20 20 20 20 20 20 20 20 20 70 44 62 2c 20 66            pDb, f
16fa0 69 6c 65 4e 61 6d 65 2c 20 66 61 6c 73 65 29 29  ileName, false))
16fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16fc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16fd0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
16fe0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
16ff0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17010 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75  tring error = nu
17020 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
17030 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 43             if (C
17040 72 65 61 74 65 28 63 6f 6e 6e 65 63 74 69 6f 6e  reate(connection
17050 2c 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  , pAux,..       
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 53 51 4c 69 74 65 53 74 72 69 6e       SQLiteStrin
17080 67 2e 53 74 72 69 6e 67 41 72 72 61 79 46 72 6f  g.StringArrayFro
17090 6d 55 74 66 38 49 6e 74 50 74 72 41 72 72 61 79  mUtf8IntPtrArray
170a0 28 61 72 67 76 29 2c 0d 0a 20 20 20 20 20 20 20  (argv),..       
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 72 65 66 20 74 61 62 6c 65 2c 20       ref table, 
170d0 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53 51  ref error) == SQ
170e0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
170f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
17130 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17160 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
17170 61 62 20 3d 20 54 61 62 6c 65 54 6f 49 6e 74 50  ab = TableToIntP
17180 74 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20 20  tr(table);..    
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
171b0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
171c0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
171d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c      pError = SQL
17240 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
17250 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d  tPtrFromString(.
17260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 22 6e 6f 20 74 61 62 6c 65 20 77 61 73 20 63   "no table was c
17290 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20 20  reated");..     
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
172c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
172f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53        pError = S
17320 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
17330 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
17340 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20  (error);..      
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17370 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17380 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
17390 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
173a0 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
173b0 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
173c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
173e0 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53 74  Error = SQLiteSt
173f0 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
17400 72 6f 6d 53 74 72 69 6e 67 28 65 2e 54 6f 53 74  romString(e.ToSt
17410 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
17420 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17430 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
17440 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
17450 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
17460 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
17470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
174c0 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
174d0 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28 0d  rCode xConnect(.
174e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
174f0 50 74 72 20 70 44 62 2c 0d 0a 20 20 20 20 20 20  Ptr pDb,..      
17500 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41 75        IntPtr pAu
17510 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
17520 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20  int argc,..     
17530 20 20 20 20 20 20 20 49 6e 74 50 74 72 5b 5d 20         IntPtr[] 
17540 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20  argv,..         
17550 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 56     ref IntPtr pV
17560 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
17570 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45 72    ref IntPtr pEr
17580 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
17590 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
175a0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
175b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
175d0 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
175e0 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
175f0 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50  ringFromUtf8IntP
17600 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tr(..           
17610 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
17620 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17630 69 74 65 33 5f 64 62 5f 66 69 6c 65 6e 61 6d 65  ite3_db_filename
17640 28 70 44 62 2c 20 49 6e 74 50 74 72 2e 5a 65 72  (pDb, IntPtr.Zer
17650 6f 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  o));....        
17660 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 53          using (S
17670 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection 
17680 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d 20 6e 65 77  connection = new
17690 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
176a0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
176b0 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2c              pDb,
176c0 20 66 69 6c 65 4e 61 6d 65 2c 20 66 61 6c 73 65   fileName, false
176d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
176e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
176f0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
17700 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
17710 62 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ble = null;..   
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17730 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20   string error = 
17740 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17760 28 43 6f 6e 6e 65 63 74 28 63 6f 6e 6e 65 63 74  (Connect(connect
17770 69 6f 6e 2c 20 70 41 75 78 2c 0d 0a 20 20 20 20  ion, pAux,..    
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
177a0 72 69 6e 67 2e 53 74 72 69 6e 67 41 72 72 61 79  ring.StringArray
177b0 46 72 6f 6d 55 74 66 38 49 6e 74 50 74 72 41 72  FromUtf8IntPtrAr
177c0 72 61 79 28 61 72 67 76 29 2c 0d 0a 20 20 20 20  ray(argv),..    
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 20 20 20 20 72 65 66 20 74 61 62 6c          ref tabl
177f0 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 3d 3d  e, ref error) ==
17800 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17810 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .Ok)..          
17820 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21       if (table !
17850 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 70 56 74 61 62 20 3d 20 54 61 62 6c 65 54 6f 49  pVtab = TableToI
178a0 6e 74 50 74 72 28 74 61 62 6c 65 29 3b 0d 0a 20  ntPtr(table);.. 
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
178d0 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
178e0 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok;..         
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17910 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
17960 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
17970 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
17980 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 22 6e 6f 20 74 61 62 6c 65 20 77 61      "no table wa
179b0 73 20 63 72 65 61 74 65 64 22 29 3b 0d 0a 20 20  s created");..  
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a30 20 20 20 20 20 20 20 20 20 70 45 72 72 6f 72 20           pError 
17a40 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
17a50 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
17a60 69 6e 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ing(error);..   
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17a90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17aa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17ab0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
17ac0 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
17ad0 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
17ae0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
17af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b00 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74    pError = SQLit
17b10 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50  eString.Utf8IntP
17b20 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65 2e 54  trFromString(e.T
17b30 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
17b40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17b50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17b60 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17b70 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
17b80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
17b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17be0 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
17bf0 72 72 6f 72 43 6f 64 65 20 78 42 65 73 74 49 6e  rrorCode xBestIn
17c00 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
17c10 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d    IntPtr pVtab,.
17c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
17c30 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20  Ptr pIndex..    
17c40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
17c50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17c60 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
17c70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17c80 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
17c90 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d  ualTable table =
17ca0 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72   TableFromIntPtr
17cb0 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20  (pVtab);....    
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17cd0 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  table != null)..
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17d00 20 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64         SQLiteInd
17d10 65 78 20 69 6e 64 65 78 20 3d 20 6e 75 6c 6c 3b  ex index = null;
17d20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17d30 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61          SQLiteMa
17d40 72 73 68 61 6c 2e 49 6e 64 65 78 46 72 6f 6d 49  rshal.IndexFromI
17d50 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 72 65  ntPtr(pIndex, re
17d60 66 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  f index);....   
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 69 66 20 28 42 65 73 74 49 6e 64 65 78 28 74   if (BestIndex(t
17d90 61 62 6c 65 2c 20 69 6e 64 65 78 29 20 3d 3d 20  able, index) == 
17da0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
17db0 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok)..           
17dc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
17df0 6c 2e 49 6e 64 65 78 54 6f 49 6e 74 50 74 72 28  l.IndexToIntPtr(
17e00 69 6e 64 65 78 2c 20 70 49 6e 64 65 78 29 3b 0d  index, pIndex);.
17e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
17e30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
17e40 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok;..           
17e50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17e60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17e80 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
17e90 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
17ea0 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
17eb0 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
17ec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17ed0 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62            SetTab
17ee0 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65  leError(pVtab, e
17ef0 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
17f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17f10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17f20 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
17f30 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
17f40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17fa0 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
17fb0 65 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73 63  eErrorCode xDisc
17fc0 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20  onnect(..       
17fd0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
17fe0 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
17ff0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18000 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
18010 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18030 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
18040 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f  table = TableFro
18050 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d  mIntPtr(pVtab);.
18060 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18070 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
18080 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18090 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
180b0 20 28 44 69 73 63 6f 6e 6e 65 63 74 28 74 61 62   (Disconnect(tab
180c0 6c 65 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  le) == SQLiteErr
180d0 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18100 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
18110 61 62 6c 65 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ables != null)..
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 20 20 20 20 20 20 20 74 61 62 6c              tabl
18140 65 73 2e 52 65 6d 6f 76 65 28 70 56 74 61 62 29  es.Remove(pVtab)
18150 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18170 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43  urn SQLiteErrorC
18180 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20  ode.Ok;..       
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
181c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
181d0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
181e0 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20  ) /* NOTE: Must 
181f0 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20  catch ALL. */.. 
18200 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18230 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 74 20 74 68    // NOTE: At th
18240 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 72 65 20  is point, there 
18250 69 73 20 6e 6f 20 77 61 79 20 74 6f 20 72 65 70  is no way to rep
18260 6f 72 74 20 74 68 65 20 65 72 72 6f 72 0d 0a 20  ort the error.. 
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18280 2f 20 20 20 20 20 20 20 63 6f 6e 64 69 74 69 6f  /       conditio
18290 6e 20 62 61 63 6b 20 74 6f 20 74 68 65 20 63 61  n back to the ca
182a0 6c 6c 65 72 3b 20 74 68 65 72 65 66 6f 72 65 2c  ller; therefore,
182b0 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20   use the..      
182c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
182d0 20 20 20 6c 6f 67 67 69 6e 67 20 66 61 63 69 6c     logging facil
182e0 69 74 79 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20  ity instead...  
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18310 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
18320 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18340 20 28 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 29   (LogExceptions)
18350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
18390 73 73 61 67 65 28 53 51 4c 69 74 65 42 61 73 65  ssage(SQLiteBase
183a0 2e 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f 4e  .COR_E_EXCEPTION
183b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
183d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c  tring.Format(Cul
183e0 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
183f0 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 20 22 43 61 75 67 68 74 20 65 78        "Caught ex
18420 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22 78 44 69  ception in \"xDi
18430 73 63 6f 6e 6e 65 63 74 5c 22 20 6d 65 74 68 6f  sconnect\" metho
18440 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  d: {0}",..      
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74 68        e)); /* th
18470 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
18480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
184a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184b0 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
184c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
18510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
18520 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
18530 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18540 20 20 20 20 20 20 46 72 65 65 54 61 62 6c 65 28        FreeTable(
18550 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20  pVtab);..       
18560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18570 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
18580 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72  iteErrorCode.Err
18590 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  or;..        }..
185a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
185b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
18600 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72  vate SQLiteError
18610 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d 0a  Code xDestroy(..
18620 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
18630 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
18640 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
18650 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18660 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
18670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18680 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
18690 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54  lTable table = T
186a0 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70  ableFromIntPtr(p
186b0 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
186c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61            if (ta
186d0 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ble != null)..  
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
186f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18700 20 20 20 20 20 69 66 20 28 44 65 73 74 72 6f 79       if (Destroy
18710 28 74 61 62 6c 65 29 20 3d 3d 20 53 51 4c 69 74  (table) == SQLit
18720 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18760 66 20 28 74 61 62 6c 65 73 20 21 3d 20 6e 75 6c  f (tables != nul
18770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 74 61 62 6c 65 73 2e 52 65 6d 6f 76 65 28 70 56  tables.Remove(pV
187a0 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
187d0 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20  rorCode.Ok;..   
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18800 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18810 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18820 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
18830 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
18840 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
18850 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
18860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18870 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18880 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
18890 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68  t this point, th
188a0 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 74 6f  ere is no way to
188b0 20 72 65 70 6f 72 74 20 74 68 65 20 65 72 72 6f   report the erro
188c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
188d0 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 64     //       cond
188e0 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 74 68  ition back to th
188f0 65 20 63 61 6c 6c 65 72 3b 20 74 68 65 72 65 66  e caller; theref
18900 6f 72 65 2c 20 75 73 65 20 74 68 65 0d 0a 20 20  ore, use the..  
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18920 20 20 20 20 20 20 20 6c 6f 67 67 69 6e 67 20 66         logging f
18930 61 63 69 6c 69 74 79 20 69 6e 73 74 65 61 64 2e  acility instead.
18940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18950 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18960 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
18970 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 69 66 20 28 4c 6f 67 45 78 63 65 70 74 69    if (LogExcepti
189a0 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
189b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c       SQLiteLog.L
189e0 6f 67 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65  ogMessage(SQLite
189f0 42 61 73 65 2e 43 4f 52 5f 45 5f 45 58 43 45 50  Base.COR_E_EXCEP
18a00 54 49 4f 4e 2c 0d 0a 20 20 20 20 20 20 20 20 20  TION,..         
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
18a30 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72  (CultureInfo.Cur
18a40 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 20 20 20 20 20 20 22 43 61 75 67 68            "Caugh
18a70 74 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 5c  t exception in \
18a80 22 78 44 65 73 74 72 6f 79 5c 22 20 6d 65 74 68  "xDestroy\" meth
18a90 6f 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  od: {0}",..     
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a 20 74         e)); /* t
18ac0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18b00 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
18b10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b30 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
18b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18b60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
18b70 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
18b80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18b90 20 20 20 20 20 20 20 46 72 65 65 54 61 62 6c 65         FreeTable
18ba0 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20  (pVtab);..      
18bb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18bc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
18bd0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
18be0 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
18bf0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
18c50 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
18c60 72 43 6f 64 65 20 78 4f 70 65 6e 28 0d 0a 20 20  rCode xOpen(..  
18c70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
18c80 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
18c90 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
18ca0 70 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20  pCursor..       
18cb0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
18cc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
18cd0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18cf0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
18d00 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61  Table table = Ta
18d10 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56  bleFromIntPtr(pV
18d20 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
18d30 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62           if (tab
18d40 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
18d80 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
18d90 73 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  sor = null;.... 
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 69 66 20 28 4f 70 65 6e 28 74 61 62 6c     if (Open(tabl
18dc0 65 2c 20 72 65 66 20 63 75 72 73 6f 72 29 20 3d  e, ref cursor) =
18dd0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
18de0 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
18df0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f 72        if (cursor
18e20 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 70 43 75 72 73 6f 72 20 3d 20 43 75 72 73    pCursor = Curs
18e70 6f 72 54 6f 49 6e 74 50 74 72 28 63 75 72 73 6f  orToIntPtr(curso
18e80 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 21     if (pCursor !
18eb0 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18f00 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
18f10 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20  rCode.Ok;..     
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
18fa0 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 0d  bleError(pVtab,.
18fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 20 22 6e 6f 20 6e 61 74 69 76 65 20       "no native 
18fe0 63 75 72 73 6f 72 20 77 61 73 20 63 72 65 61 74  cursor was creat
18ff0 65 64 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed");..         
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19040 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72        SetTableEr
19090 72 6f 72 28 70 56 74 61 62 2c 0d 0a 20 20 20 20  ror(pVtab,..    
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no 
190c0 6d 61 6e 61 67 65 64 20 63 75 72 73 6f 72 20 77  managed cursor w
190d0 61 73 20 63 72 65 61 74 65 64 22 29 3b 0d 0a 20  as created");.. 
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19120 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19130 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
19140 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
19150 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
19160 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
19170 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19190 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
191a0 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29  ab, e.ToString()
191b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
191c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
191d0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
191e0 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
191f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19200 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19250 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
19260 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
19270 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  xClose(..       
19280 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
19290 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
192a0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
192b0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
192c0 72 20 70 56 74 61 62 20 3d 20 49 6e 74 50 74 72  r pVtab = IntPtr
192d0 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Zero;....      
192e0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
192f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19300 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62 20            pVtab 
19310 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73 6f  = TableFromCurso
19320 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  r(pCursor);.... 
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19340 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
19350 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72 20 3d  eCursor cursor =
19360 20 43 75 72 73 6f 72 46 72 6f 6d 49 6e 74 50 74   CursorFromIntPt
19370 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
19380 20 20 20 20 20 20 20 20 70 56 74 61 62 2c 20 70          pVtab, p
19390 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
193a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
193b0 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d  cursor != null).
193c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
193d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
193e0 20 20 20 20 20 20 20 20 69 66 20 28 43 6c 6f 73          if (Clos
193f0 65 28 63 75 72 73 6f 72 29 20 3d 3d 20 53 51 4c  e(cursor) == SQL
19400 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
19410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 69 66 20 28 63 75 72 73 6f 72 73 20 21 3d 20   if (cursors != 
19450 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 63 75 72 73 6f 72 73 2e 52 65 6d 6f 76     cursors.Remov
19480 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  e(pCursor);.... 
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
194b0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
194c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
194d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
194e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
194f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19500 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
19510 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
19520 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
19530 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
19540 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19550 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
19560 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
19570 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
19580 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19590 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
195a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 46 72 65 65 43 75 72 73 6f 72 28 70 43 75 72 73  FreeCursor(pCurs
195d0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
195e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
195f0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
19600 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
19610 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
19620 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19670 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
19680 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
19690 65 20 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20  e xFilter(..    
196a0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
196b0 43 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20  Cursor,..       
196c0 20 20 20 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c       int idxNum,
196d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
196e0 74 50 74 72 20 69 64 78 53 74 72 2c 0d 0a 20 20  tPtr idxStr,..  
196f0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72            int ar
19700 67 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gc,..           
19710 20 49 6e 74 50 74 72 5b 5d 20 61 72 67 76 0d 0a   IntPtr[] argv..
19720 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
19730 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19740 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
19750 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ab = IntPtr.Zero
19760 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19770 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
19780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19790 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61 62       pVtab = Tab
197a0 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75  leFromCursor(pCu
197b0 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
197c0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
197d0 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
197e0 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72 73  or cursor = Curs
197f0 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  orFromIntPtr(.. 
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73 6f     pVtab, pCurso
19820 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
19830 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f         if (curso
19840 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
19850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 69 66 20 28 46 69 6c 74 65 72 28 63 75     if (Filter(cu
19880 72 73 6f 72 2c 20 69 64 78 4e 75 6d 2c 0d 0a 20  rsor, idxNum,.. 
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
198b0 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72  eString.StringFr
198c0 6f 6d 55 74 66 38 49 6e 74 50 74 72 28 69 64 78  omUtf8IntPtr(idx
198d0 53 74 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Str),..         
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198f0 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c     SQLiteMarshal
19900 2e 56 61 6c 75 65 41 72 72 61 79 46 72 6f 6d 49  .ValueArrayFromI
19910 6e 74 50 74 72 41 72 72 61 79 28 0d 0a 20 20 20  ntPtrArray(..   
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
19940 76 29 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  v)) == SQLiteErr
19950 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19980 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19990 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  n SQLiteErrorCod
199a0 65 2e 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok;..         
199b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
199c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
199d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
199e0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
199f0 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20  h (Exception e) 
19a00 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61  /* NOTE: Must ca
19a10 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20  tch ALL. */..   
19a20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19a30 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
19a40 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c  ableError(pVtab,
19a50 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d   e.ToString());.
19a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
19a80 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
19a90 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
19aa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19ab0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
19b00 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
19b10 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e 65  iteErrorCode xNe
19b20 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
19b30 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d   IntPtr pCursor.
19b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
19b50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19b60 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
19b70 74 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tab = IntPtr.Zer
19b80 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  o;....          
19b90 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
19ba0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19bb0 20 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61        pVtab = Ta
19bc0 62 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43  bleFromCursor(pC
19bd0 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
19be0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
19bf0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
19c00 73 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72  sor cursor = Cur
19c10 73 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a  sorFromIntPtr(..
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73      pVtab, pCurs
19c40 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
19c50 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73          if (curs
19c60 6f 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  or != null)..   
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 69 66 20 28 4e 65 78 74 28 63 75 72      if (Next(cur
19ca0 73 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65 45 72  sor) == SQLiteEr
19cb0 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
19ce0 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d  teErrorCode.Ok;.
19cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19d10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
19d20 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
19d30 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
19d40 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
19d50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19d70 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
19d80 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29  ab, e.ToString()
19d90 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19da0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19db0 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
19dc0 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
19dd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19de0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19e30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
19e40 69 6e 74 20 78 45 6f 66 28 0d 0a 20 20 20 20 20  int xEof(..     
19e50 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
19e60 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
19e70 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
19e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
19e90 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74 50  Ptr pVtab = IntP
19ea0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
19eb0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
19ec0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61              pVta
19ee0 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75 72  b = TableFromCur
19ef0 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a 0d  sor(pCursor);...
19f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f10 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
19f20 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f 72  bleCursor cursor
19f30 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49 6e 74   = CursorFromInt
19f40 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
19f50 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62 2c            pVtab,
19f60 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20   pCursor);....  
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19f80 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c 6c   (cursor != null
19f90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19fa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6f         return Eo
19fb0 66 28 63 75 72 73 6f 72 29 20 3f 20 31 20 3a 20  f(cursor) ? 1 : 
19fc0 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
19fd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
19fe0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
19ff0 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
1a000 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
1a010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1a030 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
1a040 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29  ab, e.ToString()
1a050 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a060 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a070 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20   return 1;..    
1a080 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a090 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a0e0 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
1a0f0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c  teErrorCode xCol
1a100 75 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  umn(..          
1a110 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
1a120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
1a130 6e 74 50 74 72 20 70 43 6f 6e 74 65 78 74 2c 0d  ntPtr pContext,.
1a140 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
1a150 20 69 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20   index..        
1a160 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1a170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
1a180 74 50 74 72 20 70 56 74 61 62 20 3d 20 49 6e 74  tPtr pVtab = Int
1a190 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20  Ptr.Zero;....   
1a1a0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1a1b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56 74               pVt
1a1d0 61 62 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75  ab = TableFromCu
1a1e0 72 73 6f 72 28 70 43 75 72 73 6f 72 29 3b 0d 0a  rsor(pCursor);..
1a1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a200 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1a210 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
1a220 72 20 3d 20 43 75 72 73 6f 72 46 72 6f 6d 49 6e  r = CursorFromIn
1a230 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
1a240 20 20 20 20 20 20 20 20 20 20 20 70 56 74 61 62             pVtab
1a250 2c 20 70 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20  , pCursor);.... 
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a270 66 20 28 63 75 72 73 6f 72 20 21 3d 20 6e 75 6c  f (cursor != nul
1a280 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1a290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a2a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1a2b0 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65 78 74  eContext context
1a2c0 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
1a2d0 74 65 78 74 28 70 43 6f 6e 74 65 78 74 29 3b 0d  text(pContext);.
1a2e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a2f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
1a300 6c 75 6d 6e 28 63 75 72 73 6f 72 2c 20 63 6f 6e  lumn(cursor, con
1a310 74 65 78 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  text, index);.. 
1a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a340 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1a350 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1a360 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
1a370 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
1a380 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a390 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74               Set
1a3a0 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
1a3b0 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  , e.ToString());
1a3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a3d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1a3e0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
1a3f0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
1a400 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a410 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a460 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
1a470 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52  LiteErrorCode xR
1a480 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20  owId(..         
1a490 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f     IntPtr pCurso
1a4a0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
1a4b0 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a  ref long rowId..
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1a4d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a4e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1a4f0 61 62 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  ab = IntPtr.Zero
1a500 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a510 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1a520 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a530 20 20 20 20 20 70 56 74 61 62 20 3d 20 54 61 62       pVtab = Tab
1a540 6c 65 46 72 6f 6d 43 75 72 73 6f 72 28 70 43 75  leFromCursor(pCu
1a550 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
1a560 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1a570 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1a580 6f 72 20 63 75 72 73 6f 72 20 3d 20 43 75 72 73  or cursor = Curs
1a590 6f 72 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20  orFromIntPtr(.. 
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5b0 20 20 20 70 56 74 61 62 2c 20 70 43 75 72 73 6f     pVtab, pCurso
1a5c0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
1a5d0 20 20 20 20 20 20 20 69 66 20 28 63 75 72 73 6f         if (curso
1a5e0 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 72 65 74 75 72 6e 20 52 6f 77 49 64 28 63 75 72  return RowId(cur
1a610 73 6f 72 2c 20 72 65 66 20 72 6f 77 49 64 29 3b  sor, ref rowId);
1a620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a630 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1a640 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1a650 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
1a660 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
1a670 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74               Set
1a690 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
1a6a0 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  , e.ToString());
1a6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a6c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1a6d0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
1a6e0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
1a6f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
1a760 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 55  LiteErrorCode xU
1a770 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  pdate(..        
1a780 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
1a790 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
1a7a0 6e 74 20 6e 44 61 74 61 2c 0d 0a 20 20 20 20 20  nt nData,..     
1a7b0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 70         IntPtr ap
1a7c0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
1a7d0 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49     ref long rowI
1a7e0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  d..            )
1a7f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1a800 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1a810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1a830 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
1a840 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f  table = TableFro
1a850 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d  mIntPtr(pVtab);.
1a860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a870 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
1a880 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1a8b0 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
1a8c0 65 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  es =..          
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
1a8e0 4c 69 74 65 4d 61 72 73 68 61 6c 2e 56 61 6c 75  LiteMarshal.Valu
1a8f0 65 41 72 72 61 79 46 72 6f 6d 53 69 7a 65 41 6e  eArrayFromSizeAn
1a900 64 49 6e 74 50 74 72 28 0d 0a 20 20 20 20 20 20  dIntPtr(..      
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 20 20 6e 44 61 74 61 2c 20 61 70 44        nData, apD
1a930 61 74 61 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ata);....       
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a950 75 72 6e 20 55 70 64 61 74 65 28 74 61 62 6c 65  urn Update(table
1a960 2c 20 76 61 6c 75 65 73 2c 20 72 65 66 20 72 6f  , values, ref ro
1a970 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  wId);..         
1a980 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a990 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a9a0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1a9b0 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45  ption e) /* NOTE
1a9c0 3a 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c  : Must catch ALL
1a9d0 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  . */..          
1a9e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a9f0 20 20 20 20 20 53 65 74 54 61 62 6c 65 45 72 72       SetTableErr
1aa00 6f 72 28 70 56 74 61 62 2c 20 65 2e 54 6f 53 74  or(pVtab, e.ToSt
1aa10 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20  ring());..      
1aa20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1aa30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
1aa40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
1aa50 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ror;..        }.
1aa60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1aa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aab0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1aac0 69 76 61 74 65 20 53 51 4c 69 74 65 45 72 72 6f  ivate SQLiteErro
1aad0 72 43 6f 64 65 20 78 42 65 67 69 6e 28 0d 0a 20  rCode xBegin(.. 
1aae0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1aaf0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
1ab00 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1ab10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1ab20 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1ab30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ab40 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1ab50 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61  Table table = Ta
1ab60 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56  bleFromIntPtr(pV
1ab70 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
1ab80 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62           if (tab
1ab90 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abb0 20 72 65 74 75 72 6e 20 42 65 67 69 6e 28 74 61   return Begin(ta
1abc0 62 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ble);..         
1abd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1abe0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1abf0 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
1ac00 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
1ac10 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
1ac20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac30 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
1ac40 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e  pVtab, e.ToStrin
1ac50 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1ac60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ac70 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
1ac80 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
1ac90 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1aca0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1acb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ace0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1acf0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1ad00 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
1ad10 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20 20  de xSync(..     
1ad20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
1ad30 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tab..           
1ad40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1ad50 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1ad60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1ad80 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1ad90 65 20 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46  e table = TableF
1ada0 72 6f 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29  romIntPtr(pVtab)
1adb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1adc0 20 20 20 20 20 69 66 20 28 74 61 62 6c 65 20 21       if (table !
1add0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1adf0 75 72 6e 20 53 79 6e 63 28 74 61 62 6c 65 29 3b  urn Sync(table);
1ae00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1ae10 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1ae20 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1ae30 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
1ae40 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
1ae50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74               Set
1ae70 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
1ae80 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  , e.ToString());
1ae90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1aea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1aeb0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
1aec0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
1aed0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1aee0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1aef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1af30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
1af40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43  LiteErrorCode xC
1af50 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20  ommit(..        
1af60 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
1af70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1af80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1af90 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1afa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1afc0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1afd0 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d  able = TableFrom
1afe0 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d 0a  IntPtr(pVtab);..
1aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b000 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20 6e    if (table != n
1b010 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b020 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b030 20 43 6f 6d 6d 69 74 28 74 61 62 6c 65 29 3b 0d   Commit(table);.
1b040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b050 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1b060 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20  h (Exception e) 
1b070 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61  /* NOTE: Must ca
1b080 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20  tch ALL. */..   
1b090 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54              SetT
1b0b0 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c  ableError(pVtab,
1b0c0 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d   e.ToString());.
1b0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1b0f0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
1b100 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
1b110 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b120 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b160 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b170 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c       private SQL
1b180 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f  iteErrorCode xRo
1b190 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
1b1a0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1b1b0 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
1b1c0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1b1d0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1b1e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1b200 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20  iteVirtualTable 
1b210 74 61 62 6c 65 20 3d 20 54 61 62 6c 65 46 72 6f  table = TableFro
1b220 6d 49 6e 74 50 74 72 28 70 56 74 61 62 29 3b 0d  mIntPtr(pVtab);.
1b230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b240 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
1b250 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b260 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b270 6e 20 52 6f 6c 6c 62 61 63 6b 28 74 61 62 6c 65  n Rollback(table
1b280 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1b290 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  }..            c
1b2a0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1b2b0 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74  e) /* NOTE: Must
1b2c0 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a   catch ALL. */..
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1b2f0 65 74 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74  etTableError(pVt
1b300 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29  ab, e.ToString()
1b310 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1b320 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b330 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72   return SQLiteEr
1b340 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a  rorCode.Error;..
1b350 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b360 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1b3b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b3c0 69 6e 74 20 78 46 69 6e 64 46 75 6e 63 74 69 6f  int xFindFunctio
1b3d0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1b3e0 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1b3f0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
1b400 41 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Arg,..          
1b410 20 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c 0d    IntPtr zName,.
1b420 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1b430 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
1b440 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
1b450 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74         ref IntPt
1b460 72 20 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20  r pClientData.. 
1b470 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1b480 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b490 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1b4a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b4b0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
1b4c0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
1b4d0 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  e = TableFromInt
1b4e0 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  Ptr(pVtab);.... 
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b500 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c  f (table != null
1b510 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b520 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b530 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1b540 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  Function functio
1b550 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  n = null;....   
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 69 66 20 28 46 69 6e 64 46 75 6e 63 74 69 6f   if (FindFunctio
1b580 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 74 61 62 6c 65 2c 20 6e 41 72 67 2c 0d 0a 20 20  table, nArg,..  
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5c0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1b5d0 53 74 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f  String.StringFro
1b5e0 6d 55 74 66 38 49 6e 74 50 74 72 28 7a 4e 61 6d  mUtf8IntPtr(zNam
1b5f0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 72 65 66 20 66 75 6e 63 74 69 6f 6e 2c 20 72   ref function, r
1b620 65 66 20 70 43 6c 69 65 6e 74 44 61 74 61 29 29  ef pClientData))
1b630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b640 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 21 3d   if (function !=
1b670 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b690 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b6b0 61 6c 6c 62 61 63 6b 20 3d 20 66 75 6e 63 74 69  allback = functi
1b6c0 6f 6e 2e 53 63 61 6c 61 72 43 61 6c 6c 62 61 63  on.ScalarCallbac
1b6d0 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k;..            
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20  return 1;..     
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1b730 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1b740 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61             SetTa
1b770 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20  bleError(pVtab, 
1b780 22 6e 6f 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  "no function was
1b790 20 63 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20   created");..   
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1b800 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1b810 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63   /* NOTE: Must c
1b820 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20  atch ALL. */..  
1b830 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74               Set
1b850 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
1b860 2c 20 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  , e.ToString());
1b870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b880 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1b890 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20  eturn 0;..      
1b8a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1b8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8f0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1b900 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
1b910 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6e 61 6d  ErrorCode xRenam
1b920 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1b930 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1b940 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1b950 72 20 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20 20  r zNew..        
1b960 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1b970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
1b980 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1b990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b9a0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1b9b0 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62  able table = Tab
1b9c0 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74  leFromIntPtr(pVt
1b9d0 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
1b9e0 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
1b9f0 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 20 72 65 74 75 72 6e 20 52 65 6e 61 6d 65     return Rename
1ba30 28 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  (table,..       
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 53 74   SQLiteString.St
1ba60 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e 74 50  ringFromUtf8IntP
1ba70 74 72 28 7a 4e 65 77 29 29 3b 0d 0a 20 20 20 20  tr(zNew));..    
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ba90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1baa0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
1bab0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a  (Exception e) /*
1bac0 20 4e 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63   NOTE: Must catc
1bad0 68 20 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20  h ALL. */..     
1bae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1baf0 20 20 20 20 20 20 20 20 20 20 53 65 74 54 61 62            SetTab
1bb00 6c 65 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65  leError(pVtab, e
1bb10 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20  .ToString());.. 
1bb20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1bb40 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  rn SQLiteErrorCo
1bb50 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20  de.Error;..     
1bb60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1bbc0 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74     private SQLit
1bbd0 65 45 72 72 6f 72 43 6f 64 65 20 78 53 61 76 65  eErrorCode xSave
1bbe0 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
1bbf0 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
1bc00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
1bc10 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20  nt iSavepoint.. 
1bc20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1bc30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bc40 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1bc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bc60 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
1bc70 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
1bc80 65 20 3d 20 54 61 62 6c 65 46 72 6f 6d 49 6e 74  e = TableFromInt
1bc90 50 74 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  Ptr(pVtab);.... 
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bcb0 66 20 28 74 61 62 6c 65 20 21 3d 20 6e 75 6c 6c  f (table != null
1bcc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1bcd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 61         return Sa
1bce0 76 65 70 6f 69 6e 74 28 74 61 62 6c 65 2c 20 69  vepoint(table, i
1bcf0 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20  Savepoint);..   
1bd00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1bd10 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1bd20 78 63 65 70 74 69 6f 6e 20 65 29 20 2f 2a 20 4e  xception e) /* N
1bd30 4f 54 45 3a 20 4d 75 73 74 20 63 61 74 63 68 20  OTE: Must catch 
1bd40 41 4c 4c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ALL. */..       
1bd50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bd60 20 20 20 20 20 20 20 20 53 65 74 54 61 62 6c 65          SetTable
1bd70 45 72 72 6f 72 28 70 56 74 61 62 2c 20 65 2e 54  Error(pVtab, e.T
1bd80 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20  oString());..   
1bd90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bda0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1bdb0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1bdc0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
1bdd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1bde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1be20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1be30 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 45   private SQLiteE
1be40 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65 61 73  rrorCode xReleas
1be50 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1be60 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1be70 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
1be80 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
1be90 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1bea0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1beb0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
1bec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bed0 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1bee0 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20  alTable table = 
1bef0 54 61 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28  TableFromIntPtr(
1bf00 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
1bf10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
1bf20 61 62 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  able != null).. 
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 20 20 20 72 65 74 75 72 6e 20 52 65 6c 65 61 73     return Releas
1bf50 65 28 74 61 62 6c 65 2c 20 69 53 61 76 65 70 6f  e(table, iSavepo
1bf60 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
1bf70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1bf80 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1bf90 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
1bfa0 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
1bfb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
1bfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bfd0 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
1bfe0 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e  pVtab, e.ToStrin
1bff0 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1c000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c010 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
1c020 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
1c030 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1c040 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c090 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1c0a0 74 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  te SQLiteErrorCo
1c0b0 64 65 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d  de xRollbackTo(.
1c0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
1c0d0 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20  Ptr pVtab,..    
1c0e0 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61 76          int iSav
1c0f0 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20  epoint..        
1c100 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1c110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
1c120 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1c130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c140 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1c150 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61 62  able table = Tab
1c160 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56 74  leFromIntPtr(pVt
1c170 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ab);....        
1c180 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62 6c          if (tabl
1c190 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e != null)..    
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 72 65 74 75 72 6e 20 52 6f 6c 6c 62 61 63 6b 54  return RollbackT
1c1c0 6f 28 74 61 62 6c 65 2c 20 69 53 61 76 65 70 6f  o(table, iSavepo
1c1d0 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  int);..         
1c1e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c1f0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1c200 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d  on e) /* NOTE: M
1c210 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a  ust catch ALL. *
1c220 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
1c230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c240 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
1c250 70 56 74 61 62 2c 20 65 2e 54 6f 53 74 72 69 6e  pVtab, e.ToStrin
1c260 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
1c270 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c280 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
1c290 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
1c2a0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1c2b0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1c2c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1c2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c310 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1c320 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4d 61  region ISQLiteMa
1c330 6e 61 67 65 64 4d 6f 64 75 6c 65 20 4d 65 6d 62  nagedModule Memb
1c340 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ers..        pri
1c350 76 61 74 65 20 62 6f 6f 6c 20 64 65 63 6c 61 72  vate bool declar
1c360 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ed;..        pub
1c370 6c 69 63 20 76 69 72 74 75 61 6c 20 62 6f 6f 6c  lic virtual bool
1c380 20 44 65 63 6c 61 72 65 64 0d 0a 20 20 20 20 20   Declared..     
1c390 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c3a0 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
1c3b0 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
1c3c0 64 65 63 6c 61 72 65 64 3b 20 7d 0d 0a 20 20 20  declared; }..   
1c3d0 20 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61           interna
1c3e0 6c 20 73 65 74 20 7b 20 64 65 63 6c 61 72 65 64  l set { declared
1c3f0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1c400 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1c410 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c460 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1c470 69 6e 67 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20  ing name;..     
1c480 20 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61     public virtua
1c490 6c 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a 20  l string Name.. 
1c4a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c4b0 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
1c4c0 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
1c4d0 75 72 6e 20 6e 61 6d 65 3b 20 7d 0d 0a 20 20 20  urn name; }..   
1c4e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1c4f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c530 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c540 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74       public abst
1c550 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72  ract SQLiteError
1c560 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a 20 20  Code Create(..  
1c570 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1c580 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65  Connection conne
1c590 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ction,..        
1c5a0 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65      IntPtr pClie
1c5b0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
1c5c0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
1c5d0 67 75 6d 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20  guments,..      
1c5e0 20 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65        ref SQLite
1c5f0 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1c600 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
1c610 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1c620 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
1c630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c680 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c690 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
1c6a0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1c6b0 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  Connect(..      
1c6c0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
1c6d0 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
1c6e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1c6f0 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
1c700 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
1c710 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65   string[] argume
1c720 6e 74 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nts,..          
1c730 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
1c740 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d  ualTable table,.
1c750 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1c760 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1c770 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1c780 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1c7e0 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
1c7f0 74 65 45 72 72 6f 72 43 6f 64 65 20 42 65 73 74  teErrorCode Best
1c800 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20  Index(..        
1c810 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1c820 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
1c830 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1c840 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a 20 20  eIndex index..  
1c850 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1c860 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c8b0 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
1c8c0 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  c abstract SQLit
1c8d0 65 45 72 72 6f 72 43 6f 64 65 20 44 69 73 63 6f  eErrorCode Disco
1c8e0 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20 20 20  nnect(..        
1c8f0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1c900 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20  lTable table..  
1c910 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1c920 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c970 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
1c980 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  c abstract SQLit
1c990 65 45 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72  eErrorCode Destr
1c9a0 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
1c9b0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1c9c0 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20  ble table..     
1c9d0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1c9e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ca30 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61          public a
1ca40 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
1ca50 72 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20  rorCode Open(.. 
1ca60 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1ca70 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
1ca80 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
1ca90 20 20 72 65 66 20 53 51 4c 69 74 65 56 69 72 74    ref SQLiteVirt
1caa0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1cab0 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
1cac0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1cad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1cb20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72      public abstr
1cb30 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43  act SQLiteErrorC
1cb40 6f 64 65 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20  ode Close(..    
1cb50 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
1cb60 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1cb70 20 63 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20   cursor..       
1cb80 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1cb90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cbe0 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73        public abs
1cbf0 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
1cc00 72 43 6f 64 65 20 46 69 6c 74 65 72 28 0d 0a 20  rCode Filter(.. 
1cc10 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1cc20 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
1cc30 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20 20 20  sor cursor,..   
1cc40 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
1cc50 65 78 4e 75 6d 62 65 72 2c 0d 0a 20 20 20 20 20  exNumber,..     
1cc60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
1cc70 64 65 78 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  dexString,..    
1cc80 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61          SQLiteVa
1cc90 6c 75 65 5b 5d 20 76 61 6c 75 65 73 0d 0a 20 20  lue[] values..  
1cca0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1ccb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ccc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1cd00 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
1cd10 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  c abstract SQLit
1cd20 65 45 72 72 6f 72 43 6f 64 65 20 4e 65 78 74 28  eErrorCode Next(
1cd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1cd40 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1cd50 43 75 72 73 6f 72 20 63 75 72 73 6f 72 0d 0a 20  Cursor cursor.. 
1cd60 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1cd70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1cdd0 69 63 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  ic abstract bool
1cde0 20 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20   Eof(..         
1cdf0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1ce00 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
1ce10 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1ce20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1ce30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ce80 20 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74   public abstract
1ce90 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1cea0 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20   Column(..      
1ceb0 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1cec0 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1ced0 75 72 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20  ursor,..        
1cee0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 74 65 78      SQLiteContex
1cef0 74 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20  t context,..    
1cf00 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
1cf10 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  x..            )
1cf20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1cf80 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
1cf90 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1cfa0 52 6f 77 49 64 28 0d 0a 20 20 20 20 20 20 20 20  RowId(..        
1cfb0 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1cfc0 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72  lTableCursor cur
1cfd0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
1cfe0 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
1cff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1d000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1d010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d050 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1d060 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53  ublic abstract S
1d070 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 55  QLiteErrorCode U
1d080 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  pdate(..        
1d090 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1d0a0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
1d0b0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1d0c0 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73 2c  eValue[] values,
1d0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1d0e0 66 20 6c 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20  f long rowId..  
1d0f0 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a            );....
1d100 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d150 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  ...        publi
1d160 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  c abstract SQLit
1d170 65 45 72 72 6f 72 43 6f 64 65 20 42 65 67 69 6e  eErrorCode Begin
1d180 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1d190 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1d1a0 65 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  e table..       
1d1b0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
1d1c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1d1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1d210 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62 73        public abs
1d220 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
1d230 72 43 6f 64 65 20 53 79 6e 63 28 0d 0a 20 20 20  rCode Sync(..   
1d240 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
1d250 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
1d260 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
1d270 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1d280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d2d0 70 75 62 6c 69 63 20 61 62 73 74 72 61 63 74 20  public abstract 
1d2e0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1d2f0 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
1d300 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
1d310 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20  alTable table.. 
1d320 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1d330 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ....        publ
1d390 69 63 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  ic abstract SQLi
1d3a0 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c 6c  teErrorCode Roll
1d3b0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
1d3c0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1d3d0 54 61 62 6c 65 20 74 61 62 6c 65 0d 0a 20 20 20  Table table..   
1d3e0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1d3f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d440 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1d450 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 46   abstract bool F
1d460 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  indFunction(..  
1d470 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1d480 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1d490 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
1d4a0 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f 75   int argumentCou
1d4b0 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
1d4c0 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
1d4d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
1d4e0 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
1d4f0 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nction,..       
1d500 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
1d510 70 43 6c 69 65 6e 74 44 61 74 61 0d 0a 20 20 20  pClientData..   
1d520 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1d530 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d580 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1d590 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
1d5a0 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61 6d 65  ErrorCode Rename
1d5b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1d5c0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1d5d0 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  e table,..      
1d5e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
1d5f0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1d600 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d650 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d660 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
1d670 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
1d680 64 65 20 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  de Savepoint(.. 
1d690 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1d6a0 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61  eVirtualTable ta
1d6b0 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
1d6c0 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e 74 0d    int savepoint.
1d6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1d6e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1d6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d730 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 75  //....        pu
1d740 62 6c 69 63 20 61 62 73 74 72 61 63 74 20 53 51  blic abstract SQ
1d750 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
1d760 6c 65 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20  lease(..        
1d770 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
1d780 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 0d 0a 20  lTable table,.. 
1d790 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 73             int s
1d7a0 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20  avepoint..      
1d7b0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1d7c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d810 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 61 62         public ab
1d820 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
1d830 6f 72 43 6f 64 65 20 52 6f 6c 6c 62 61 63 6b 54  orCode RollbackT
1d840 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o(..            
1d850 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1d860 6c 65 20 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  le table,..     
1d870 20 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70         int savep
1d880 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  oint..          
1d890 20 20 29 3b 0d 0a 20 20 20 20 20 20 20 20 23 65    );..        #e
1d8a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1d8b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d900 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
1d910 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
1d920 72 73 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  rs..        publ
1d930 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
1d940 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1d950 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
1d960 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
1d970 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
1d980 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
1d990 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d9a0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1d9b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1d9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
1da10 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
1da20 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
1da30 65 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ers..        pri
1da40 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
1da50 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ed;..        pri
1da60 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
1da70 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
1da80 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
1da90 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44  ..#if THROW_ON_D
1daa0 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20 20  ISPOSED..       
1dab0 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 65       if (dispose
1dac0 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
1dad0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1dae0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
1daf0 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
1db00 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
1db10 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
1db20 66 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 29 2e  f(SQLiteModule).
1db30 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
1db40 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
1db50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1db60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1dbb0 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
1dbc0 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69   virtual void Di
1dbd0 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
1dbe0 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
1dbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1dc00 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
1dc10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
1dc30 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dc50 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
1dc60 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
1dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dca0 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
1dcb0 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
1dcc0 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dce0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1dcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd00 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1dd10 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd50 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
1dd60 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
1dd70 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
1dd80 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ddc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ddd0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ddf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de00 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1de10 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1de20 5f 64 69 73 70 6f 73 65 5f 6d 6f 64 75 6c 65 28  _dispose_module(
1de30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de40 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6e 61            ref na
1de50 74 69 76 65 4d 6f 64 75 6c 65 29 3b 0d 0a 20 20  tiveModule);..  
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1de70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1de80 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1de90 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
1dea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ded0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 20 69 66 20 28 4c 6f 67 45 78 63 65 70 74 69 6f   if (LogExceptio
1df00 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns)..           
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1df40 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
1df50 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f  (SQLiteBase.COR_
1df60 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20  E_EXCEPTION,..  
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1df90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 43 75 6c 74  ring.Format(Cult
1dfa0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
1dfb0 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 20 20 20 20 20 20 20 22 43 61 75 67 68 74           "Caught
1dfe0 20 65 78 63 65 70 74 69 6f 6e 20 69 6e 20 5c 22   exception in \"
1dff0 44 69 73 70 6f 73 65 5c 22 20 6d 65 74 68 6f 64  Dispose\" method
1e000 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e020 20 20 20 20 20 20 20 20 20 65 29 29 3b 20 2f 2a           e)); /*
1e030 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1e060 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
1e090 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0b0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1e0c0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1e0d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e0f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e100 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
1e110 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e120 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
1e130 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1e140 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e190 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e1a0 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74  #region Destruct
1e1b0 6f 72 0d 0a 20 20 20 20 20 20 20 20 7e 53 51 4c  or..        ~SQL
1e1c0 69 74 65 4d 6f 64 75 6c 65 28 29 0d 0a 20 20 20  iteModule()..   
1e1d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e1e0 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
1e1f0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
1e200 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1e210 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
1e220 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a        endregion..}..