System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f5d1615ee3656c98044c3542468a270cec96b6a0:


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 49 6e 74 50       public IntP
06c0: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
06d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
06e0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
06f0: 74 75 72 6e 20 70 43 6f 6e 74 65 78 74 3b 20 7d  turn pContext; }
0700: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
0710: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
0720: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0730: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
0780: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74  egion Public Met
0790: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hods..        //
07a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
07b0: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
07c0: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
07d0: 20 74 6f 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   to NULL...     
07e0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
07f0: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
0800: 63 20 76 6f 69 64 20 53 65 74 4e 75 6c 6c 28 29  c void SetNull()
0810: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
0820: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
0830: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
0840: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
0850: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
0860: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
0870: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
0880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73  .            Uns
0890: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
08a0: 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
08b0: 6e 75 6c 6c 28 70 43 6f 6e 74 65 78 74 29 3b 0d  null(pContext);.
08c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
08d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
0920: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
0930: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
0940: 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e  /// Sets the con
0950: 74 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74  text result to t
0960: 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65  he specified <se
0970: 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
0980: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
0990: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...        
09a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
09b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
09c0: 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
09d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
09e0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  e <see cref="Dou
09f0: 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ble" /> value to
0a00: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
0a10: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
0a20: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
0a30: 20 53 65 74 44 6f 75 62 6c 65 28 64 6f 75 62 6c   SetDouble(doubl
0a40: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  e value)..      
0a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0a60: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0a70: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0a90: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0aa0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0ab0: 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  on();....#if !PL
0ac0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
0ad0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
0ae0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
0af0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
0b00: 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 70  _result_double(p
0b10: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b  Context, value);
0b20: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
0b30: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
0b40: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
0b50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
0b60: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f  3_result_double_
0b70: 69 6e 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74  interop(pContext
0b80: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23  , ref value);..#
0b90: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
0ba0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
0bb0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
0bc0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
0bd0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
0be0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
0c30: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
0c40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
0c50: 2f 2f 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74  // Sets the cont
0c60: 65 78 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68  ext result to th
0c70: 65 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65  e specified <see
0c80: 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
0c90: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61  ..        /// va
0ca0: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
0cb0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0cc0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
0cd0: 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a   name="value">..
0ce0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
0cf0: 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32  <see cref="Int32
0d00: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
0d10: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
0d20: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
0d30: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
0d40: 74 49 6e 74 28 69 6e 74 20 76 61 6c 75 65 29 0d  tInt(int value).
0d50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
0d60: 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f 6e          if (pCon
0d70: 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  text == IntPtr.Z
0d80: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
0d90: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
0da0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
0db0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
0dd0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
0de0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
0df0: 6e 74 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c  nt(pContext, val
0e00: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
0e10: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
0e70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
0e80: 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68       /// Sets th
0e90: 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74  e context result
0ea0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
0eb0: 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  d <see cref="Int
0ec0: 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20  64" />..        
0ed0: 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  /// value...    
0ee0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ef0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
0f00: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
0f10: 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ue">..        //
0f20: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
0f30: 22 49 6e 74 36 34 22 20 2f 3e 20 76 61 6c 75 65  "Int64" /> value
0f40: 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20   to use...      
0f50: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
0f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
0f70: 6f 69 64 20 53 65 74 49 6e 74 36 34 28 6c 6f 6e  oid SetInt64(lon
0f80: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  g value)..      
0f90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0fa0: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
0fb0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0fd0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
0fe0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
0ff0: 6f 6e 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  on();....#if !PL
1000: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
1010: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
1020: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1030: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1040: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 70 43  _result_int64(pC
1050: 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
1060: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
1070: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
1080: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
1090: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10a0: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 5f 69 6e  _result_int64_in
10b0: 74 65 72 6f 70 28 70 43 6f 6e 74 65 78 74 2c 20  terop(pContext, 
10c0: 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c  ref value);..#el
10d0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
10e0: 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
10f0: 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
1100: 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
1110: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1120: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1170: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1190: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
11a0: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
11b0: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
11c0: 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f 3e 0d  ref="String" />.
11d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c  .        /// val
11e0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
11f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1200: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1210: 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
1220: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1230: 73 65 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67  see cref="String
1240: 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20 75 73  " /> value to us
1250: 65 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  e.  This value w
1260: 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1270: 2f 2f 2f 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  /// converted to
1280: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
1290: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
12a0: 6e 67 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  ng used...      
12b0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
12c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
12d0: 6f 69 64 20 53 65 74 53 74 72 69 6e 67 28 73 74  oid SetString(st
12e0: 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  ring value)..   
12f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1300: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1310: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1330: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1340: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1350: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1360: 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
1370: 79 74 65 73 20 3d 20 53 51 4c 69 74 65 53 74 72  ytes = SQLiteStr
1380: 69 6e 67 2e 47 65 74 55 74 66 38 42 79 74 65 73  ing.GetUtf8Bytes
1390: 46 72 6f 6d 53 74 72 69 6e 67 28 76 61 6c 75 65  FromString(value
13a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13b0: 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d 20 6e    if (bytes == n
13c0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13d0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
13e0: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
13f0: 70 74 69 6f 6e 28 22 76 61 6c 75 65 22 29 3b 0d  ption("value");.
1400: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55  ...            U
1410: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1420: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
1430: 74 5f 74 65 78 74 28 0d 0a 20 20 20 20 20 20 20  t_text(..       
1440: 20 20 20 20 20 20 20 20 20 70 43 6f 6e 74 65 78           pContex
1450: 74 2c 20 62 79 74 65 73 2c 20 62 79 74 65 73 2e  t, bytes, bytes.
1460: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
1470: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
1480: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
14f0: 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20         /// Sets 
1500: 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75  the context resu
1510: 6c 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  lt to the specif
1520: 69 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ied <see cref="S
1530: 74 72 69 6e 67 22 20 2f 3e 0d 0a 20 20 20 20 20  tring" />..     
1540: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 63 6f 6e     /// value con
1550: 74 61 69 6e 69 6e 67 20 61 6e 20 65 72 72 6f 72  taining an error
1560: 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20   message...     
1570: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1580: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1590: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
15a0: 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
15b0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
15c0: 53 74 72 69 6e 67 22 20 2f 3e 20 76 61 6c 75 65  String" /> value
15d0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15e0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74 65  error message te
15f0: 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  xt...        ///
1600: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
1610: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
1620: 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f 64   the UTF-8 encod
1630: 69 6e 67 20 70 72 69 6f 72 20 74 6f 20 62 65 69  ing prior to bei
1640: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
1650: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1660: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1670: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
1680: 20 53 65 74 45 72 72 6f 72 28 73 74 72 69 6e 67   SetError(string
1690: 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20   value)..       
16a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b0: 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20  if (pContext == 
16c0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
16e0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
16f0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
1700: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
1710: 20 20 20 20 62 79 74 65 5b 5d 20 62 79 74 65 73      byte[] bytes
1720: 20 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e   = SQLiteString.
1730: 47 65 74 55 74 66 38 42 79 74 65 73 46 72 6f 6d  GetUtf8BytesFrom
1740: 53 74 72 69 6e 67 28 76 61 6c 75 65 29 3b 0d 0a  String(value);..
1750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1760: 20 28 62 79 74 65 73 20 3d 3d 20 6e 75 6c 6c 29   (bytes == null)
1770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1780: 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75    throw new Argu
1790: 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f  mentNullExceptio
17a0: 6e 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20  n("value");.... 
17b0: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
17c0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
17d0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
17e0: 72 6f 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ror(..          
17f0: 20 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20        pContext, 
1800: 62 79 74 65 73 2c 20 62 79 74 65 73 2e 4c 65 6e  bytes, bytes.Len
1810: 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  gth);..        }
1820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1880: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1890: 20 20 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74        /// Sets t
18a0: 68 65 20 63 6f 6e 74 65 78 74 20 72 65 73 75 6c  he context resul
18b0: 74 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  t to the specifi
18c0: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
18d0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f  LiteErrorCode" /
18e0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  >..        /// v
18f0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
1900: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1910: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1920: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
1930: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1940: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1950: 74 65 45 72 72 6f 72 43 6f 64 65 22 20 2f 3e 20  teErrorCode" /> 
1960: 76 61 6c 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20  value to use... 
1970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1980: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
1990: 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72 72 6f  lic void SetErro
19a0: 72 43 6f 64 65 28 53 51 4c 69 74 65 45 72 72 6f  rCode(SQLiteErro
19b0: 72 43 6f 64 65 20 76 61 6c 75 65 29 0d 0a 20 20  rCode value)..  
19c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d0: 20 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78       if (pContex
19e0: 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  t == IntPtr.Zero
19f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
1a10: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
1a20: 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20  eption();....   
1a30: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
1a40: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1a50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
1a60: 72 5f 63 6f 64 65 28 70 43 6f 6e 74 65 78 74 2c  r_code(pContext,
1a70: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
1a80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ae0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1af0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74  .        /// Set
1b00: 73 20 74 68 65 20 63 6f 6e 74 65 78 74 20 72 65  s the context re
1b10: 73 75 6c 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20  sult to contain 
1b20: 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 53  the error code S
1b30: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 2e 0d 0a 20  QLITE_TOOBIG... 
1b40: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1b50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
1b60: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 45 72  ublic void SetEr
1b70: 72 6f 72 54 6f 6f 42 69 67 28 29 0d 0a 20 20 20  rorTooBig()..   
1b80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b90: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1ba0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1bd0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1be0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1bf0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
1c00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1c10: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
1c20: 5f 74 6f 6f 62 69 67 28 70 43 6f 6e 74 65 78 74  _toobig(pContext
1c30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
1c40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1ca0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1cb0: 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
1cc0: 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74  context result t
1cd0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 65 72  o contain the er
1ce0: 72 6f 72 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  ror code SQLITE_
1cf0: 4e 4f 4d 45 4d 2e 0d 0a 20 20 20 20 20 20 20 20  NOMEM...        
1d00: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1d10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
1d20: 6f 69 64 20 53 65 74 45 72 72 6f 72 4e 6f 4d 65  oid SetErrorNoMe
1d30: 6d 6f 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  mory()..        
1d40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1d50: 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d 20 49  f (pContext == I
1d60: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
1d80: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1d90: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1da0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1db0: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
1dc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
1dd0: 65 73 75 6c 74 5f 65 72 72 6f 72 5f 6e 6f 6d 65  esult_error_nome
1de0: 6d 28 70 43 6f 6e 74 65 78 74 29 3b 0d 0a 20 20  m(pContext);..  
1df0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1e00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1e60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
1e70: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
1e80: 74 20 72 65 73 75 6c 74 20 74 6f 20 74 68 65 20  t result to the 
1e90: 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63  specified <see c
1ea0: 72 65 66 3d 22 42 79 74 65 22 20 2f 3e 20 61 72  ref="Byte" /> ar
1eb0: 72 61 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ray..        ///
1ec0: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...       
1ed0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1ee0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ef0: 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
1f00: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1f10: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79  he <see cref="By
1f20: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 76 61 6c  te" /> array val
1f30: 75 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20  ue to use...    
1f40: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1f50: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
1f60: 20 76 6f 69 64 20 53 65 74 42 6c 6f 62 28 62 79   void SetBlob(by
1f70: 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20  te[] value)..   
1f80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f90: 20 20 20 20 69 66 20 28 70 43 6f 6e 74 65 78 74      if (pContext
1fa0: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
1fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
1fd0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
1fe0: 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20  ption();....    
1ff0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
2000: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2010: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2020: 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
2030: 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 76 61 6c  llException("val
2040: 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
2050: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
2060: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
2070: 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 0d 0a 20  _result_blob(.. 
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2090: 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20  Context, value, 
20a0: 76 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49  value.Length, (I
20b0: 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20  ntPtr)(-1));..  
20c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2120: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2130: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
2140: 20 53 65 74 73 20 74 68 65 20 63 6f 6e 74 65 78   Sets the contex
2150: 74 20 72 65 73 75 6c 74 20 74 6f 20 61 20 42 4c  t result to a BL
2160: 4f 42 20 6f 66 20 7a 65 72 6f 73 20 6f 66 20 74  OB of zeros of t
2170: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 69 7a  he specified siz
2180: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
2190: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21a0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21b0: 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20  ame="value">..  
21c0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75        /// The nu
21d0: 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
21e0: 65 73 20 74 6f 20 75 73 65 20 66 6f 72 20 74 68  es to use for th
21f0: 65 20 42 4c 4f 42 20 63 6f 6e 74 65 78 74 20 72  e BLOB context r
2200: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
2210: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2220: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
2230: 64 20 53 65 74 5a 65 72 6f 42 6c 6f 62 28 69 6e  d SetZeroBlob(in
2240: 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  t value)..      
2250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2260: 20 69 66 20 28 70 43 6f 6e 74 65 78 74 20 3d 3d   if (pContext ==
2270: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2290: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
22a0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
22b0: 6f 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  on();....       
22c0: 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
22d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
22e0: 5f 72 65 73 75 6c 74 5f 7a 65 72 6f 62 6c 6f 62  _result_zeroblob
22f0: 28 70 43 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65  (pContext, value
2300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2310: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
2370: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2380: 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20     /// Sets the 
2390: 63 6f 6e 74 65 78 74 20 72 65 73 75 6c 74 20 74  context result t
23a0: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
23b0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
23c0: 65 56 61 6c 75 65 22 20 2f 3e 2e 0d 0a 20 20 20  eValue" />...   
23d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
23e0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
23f0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
2400: 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  lue">..        /
2410: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
2420: 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f  ="SQLiteValue" /
2430: 3e 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  > to use...     
2440: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2450: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
2460: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 53 51  void SetValue(SQ
2470: 4c 69 74 65 56 61 6c 75 65 20 76 61 6c 75 65 29  LiteValue value)
2480: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2490: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43 6f           if (pCo
24a0: 6e 74 65 78 74 20 3d 3d 20 49 6e 74 50 74 72 2e  ntext == IntPtr.
24b0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
24c0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
24d0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
24e0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d  nException();...
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2500: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
2510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2520: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
2530: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
2540: 28 22 76 61 6c 75 65 22 29 3b 0d 0a 0d 0a 20 20  ("value");....  
2550: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2560: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
2570: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c  lite3_result_val
2580: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2590: 20 20 20 20 20 70 43 6f 6e 74 65 78 74 2c 20 76       pContext, v
25a0: 61 6c 75 65 2e 4e 61 74 69 76 65 48 61 6e 64 6c  alue.NativeHandl
25b0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
25c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25d0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
25e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2640: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
2650: 74 65 56 61 6c 75 65 20 48 65 6c 70 65 72 20 43  teValue Helper C
2660: 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  lass..    /// <s
2670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2680: 20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72   This class repr
2690: 65 73 65 6e 74 73 20 61 20 76 61 6c 75 65 20 66  esents a value f
26a0: 72 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 63  rom the SQLite c
26b0: 6f 72 65 20 6c 69 62 72 61 72 79 20 74 68 61 74  ore library that
26c0: 20 63 61 6e 20 62 65 0d 0a 20 20 20 20 2f 2f 2f   can be..    ///
26d0: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
26e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 2a 28 29  qlite3_value_*()
26f0: 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 64 20   and associated 
2700: 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  functions...    
2710: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2720: 20 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65      public seale
2730: 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 56 61  d class SQLiteVa
2740: 6c 75 65 20 3a 20 49 53 51 4c 69 74 65 4e 61 74  lue : ISQLiteNat
2750: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
2760: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2770: 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
2780: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2790: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27a0: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 76 61  // The native va
27b0: 6c 75 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20  lue handle...   
27c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
27d0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ry>..        pri
27e0: 76 61 74 65 20 49 6e 74 50 74 72 20 70 56 61 6c  vate IntPtr pVal
27f0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ue;..        #en
2800: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2810: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2860: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2870: 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f  ivate Constructo
2880: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
2890: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
28a0: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
28b0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
28c0: 20 74 68 69 73 20 63 6c 61 73 73 20 75 73 69 6e   this class usin
28d0: 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
28e0: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
28f0: 2f 2f 2f 20 76 61 6c 75 65 20 68 61 6e 64 6c 65  /// value handle
2900: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2910: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2920: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2930: 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20  me="pValue">..  
2940: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
2950: 74 69 76 65 20 76 61 6c 75 65 20 68 61 6e 64 6c  tive value handl
2960: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
2970: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2980: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2990: 20 53 51 4c 69 74 65 56 61 6c 75 65 28 49 6e 74   SQLiteValue(Int
29a0: 50 74 72 20 70 56 61 6c 75 65 29 0d 0a 20 20 20  Ptr pValue)..   
29b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29c0: 20 20 20 20 74 68 69 73 2e 70 56 61 6c 75 65 20      this.pValue 
29d0: 3d 20 70 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  = pValue;..     
29e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
29f0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2a60: 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
2a70: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2a80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2a90: 2f 2f 20 49 6e 76 61 6c 69 64 61 74 65 73 20 74  // Invalidates t
2aa0: 68 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20  he native value 
2ab0: 68 61 6e 64 6c 65 2c 20 74 68 65 72 65 62 79 20  handle, thereby 
2ac0: 70 72 65 76 65 6e 74 69 6e 67 20 66 75 72 74 68  preventing furth
2ad0: 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  er..        /// 
2ae0: 61 63 63 65 73 73 20 74 6f 20 69 74 20 66 72 6f  access to it fro
2af0: 6d 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  m this object in
2b00: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
2b10: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2b20: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b30: 20 76 6f 69 64 20 50 72 65 76 65 6e 74 4e 61 74   void PreventNat
2b40: 69 76 65 41 63 63 65 73 73 28 29 0d 0a 20 20 20  iveAccess()..   
2b50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b60: 20 20 20 20 70 56 61 6c 75 65 20 3d 20 49 6e 74      pValue = Int
2b70: 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
2b80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2b90: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2ba0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2bf0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
2c00: 6e 74 65 72 6e 61 6c 20 4d 61 72 73 68 61 6c 20  nternal Marshal 
2c10: 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
2c20: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2c30: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2c40: 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c 6f  // Converts a lo
2c50: 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20 6e  gical array of n
2c60: 61 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74  ative pointers t
2c70: 6f 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  o native sqlite3
2c80: 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  _value..        
2c90: 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20 69  /// structures i
2ca0: 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 61 72  nto a managed ar
2cb0: 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ray of <see cref
2cc0: 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22 20 2f  ="SQLiteValue" /
2cd0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  >..        /// o
2ce0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2e  bject instances.
2cf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
2d00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2d10: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d20: 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20 20 20  e="argc">..     
2d30: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
2d40: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
2d50: 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 61 72 72   the logical arr
2d60: 61 79 20 6f 66 20 6e 61 74 69 76 65 20 73 71 6c  ay of native sql
2d70: 69 74 65 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20  ite3_value..    
2d80: 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
2d90: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  es...        ///
2da0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2db0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2dc0: 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
2dd0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
2de0: 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
2df0: 65 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20  e logical array 
2e00: 6f 66 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  of native sqlite
2e10: 33 5f 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  3_value..       
2e20: 20 2f 2f 2f 20 73 74 72 75 63 74 75 72 65 73 20   /// structures 
2e30: 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
2e40: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2e50: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
2e60: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2e70: 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65    /// The manage
2e80: 64 20 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20  d array of <see 
2e90: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
2ea0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
2eb0: 74 61 6e 63 65 73 20 6f 72 0d 0a 20 20 20 20 20  tances or..     
2ec0: 20 20 20 2f 2f 2f 20 6e 75 6c 6c 20 75 70 6f 6e     /// null upon
2ed0: 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
2ee0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
2ef0: 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  >..        inter
2f00: 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74  nal static SQLit
2f10: 65 56 61 6c 75 65 5b 5d 20 41 72 72 61 79 46 72  eValue[] ArrayFr
2f20: 6f 6d 53 69 7a 65 41 6e 64 49 6e 74 50 74 72 28  omSizeAndIntPtr(
2f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
2f40: 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20  t argc,..       
2f50: 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76       IntPtr argv
2f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2f70: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2f80: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 63          if (argc
2f90: 20 3c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   < 0)..         
2fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2fb0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2fc0: 20 20 20 69 66 20 28 61 72 67 76 20 3d 3d 20 49     if (argv == I
2fd0: 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ff0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
3000: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
3010: 61 6c 75 65 5b 5d 20 72 65 73 75 6c 74 20 3d 20  alue[] result = 
3020: 6e 65 77 20 53 51 4c 69 74 65 56 61 6c 75 65 5b  new SQLiteValue[
3030: 61 72 67 63 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  argc];....      
3040: 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
3050: 6e 64 65 78 20 3d 20 30 2c 20 6f 66 66 73 65 74  ndex = 0, offset
3060: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
3070: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
3080: 20 3c 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68   < result.Length
3090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30a0: 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 2c 20         index++, 
30b0: 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72  offset += IntPtr
30c0: 2e 53 69 7a 65 29 0d 0a 20 20 20 20 20 20 20 20  .Size)..        
30d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30e0: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 41         IntPtr pA
30f0: 72 67 20 3d 20 53 51 4c 69 74 65 4d 61 72 73 68  rg = SQLiteMarsh
3100: 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 61 72  al.ReadIntPtr(ar
3110: 67 76 2c 20 6f 66 66 73 65 74 29 3b 0d 0a 0d 0a  gv, offset);....
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
3140: 28 70 41 72 67 20 21 3d 20 49 6e 74 50 74 72 2e  (pArg != IntPtr.
3150: 5a 65 72 6f 29 20 3f 0d 0a 20 20 20 20 20 20 20  Zero) ?..       
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
3170: 20 53 51 4c 69 74 65 56 61 6c 75 65 28 70 41 72   SQLiteValue(pAr
3180: 67 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  g) : null;..    
3190: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31b0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
31c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
31d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
31e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
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 0d 0a 0d 0a 20 20 20  /////////....   
3230: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51       #region ISQ
3240: 4c 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65  LiteNativeHandle
3250: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
3260: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
3270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
3280: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
3290: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
32a0: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
32b0: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
32c0: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
32d0: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
32e0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
32f0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
3300: 6c 69 63 20 49 6e 74 50 74 72 20 4e 61 74 69 76  lic IntPtr Nativ
3310: 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20  eHandle..       
3320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3330: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 56 61  get { return pVa
3340: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
3350: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
3360: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
3370: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
33d0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
33e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
33f0: 6f 6f 6c 20 70 65 72 73 69 73 74 65 64 3b 0d 0a  ool persisted;..
3400: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
3410: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
3420: 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  // Returns non-z
3430: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76  ero if the nativ
3440: 65 20 53 51 4c 69 74 65 20 76 61 6c 75 65 20 68  e SQLite value h
3450: 61 73 20 62 65 65 6e 20 73 75 63 63 65 73 73 66  as been successf
3460: 75 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ully..        //
3470: 2f 20 70 65 72 73 69 73 74 65 64 20 61 73 20 61  / persisted as a
3480: 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65 20 77   managed value w
3490: 69 74 68 69 6e 20 74 68 69 73 20 6f 62 6a 65 63  ithin this objec
34a0: 74 20 69 6e 73 74 61 6e 63 65 20 28 69 2e 65 2e  t instance (i.e.
34b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
34c0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 56 61 6c  / <see cref="Val
34d0: 75 65 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 20  ue" /> property 
34e0: 6d 61 79 20 74 68 65 6e 20 62 65 20 72 65 61 64  may then be read
34f0: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 29 2e 0d   successfully)..
3500: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
3510: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
3520: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72   public bool Per
3530: 73 69 73 74 65 64 0d 0a 20 20 20 20 20 20 20 20  sisted..        
3540: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  {..            g
3550: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72 73  et { return pers
3560: 69 73 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  isted; }..      
3570: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35d0: 20 20 70 72 69 76 61 74 65 20 6f 62 6a 65 63 74    private object
35e0: 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20   value;..       
35f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3600: 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20 74          /// If t
3610: 68 65 20 6d 61 6e 61 67 65 64 20 76 61 6c 75 65  he managed value
3620: 20 66 6f 72 20 74 68 69 73 20 6f 62 6a 65 63 74   for this object
3630: 20 69 6e 73 74 61 6e 63 65 20 69 73 20 61 76 61   instance is ava
3640: 69 6c 61 62 6c 65 20 28 69 2e 65 2e 20 69 74 0d  ilable (i.e. it.
3650: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 73  .        /// has
3660: 20 62 65 65 6e 20 70 72 65 76 69 6f 75 73 6c 79   been previously
3670: 20 70 65 72 73 69 73 74 65 64 20 76 69 61 20 74   persisted via t
3680: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 50 65  he <see cref="Pe
3690: 72 73 69 73 74 22 20 2f 3e 29 20 6d 65 74 68 6f  rsist" />) metho
36a0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d,..        /// 
36b0: 74 68 61 74 20 76 61 6c 75 65 20 69 73 20 72 65  that value is re
36c0: 74 75 72 6e 65 64 3b 20 6f 74 68 65 72 77 69 73  turned; otherwis
36d0: 65 2c 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  e, an exception 
36e0: 69 73 20 74 68 72 6f 77 6e 2e 20 20 54 68 65 0d  is thrown.  The.
36f0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 74  .        /// ret
3700: 75 72 6e 65 64 20 76 61 6c 75 65 20 6d 61 79 20  urned value may 
3710: 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  be null...      
3720: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
3730: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
3740: 20 6f 62 6a 65 63 74 20 56 61 6c 75 65 0d 0a 20   object Value.. 
3750: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3760: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
3770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3780: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 70            if (!p
3790: 65 72 73 69 73 74 65 64 29 0d 0a 20 20 20 20 20  ersisted)..     
37a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
37d0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
37e0: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 22 76 61 6c 75 65 20 77 61 73 20 6e 6f 74 20 70  "value was not p
3810: 65 72 73 69 73 74 65 64 22 29 3b 0d 0a 20 20 20  ersisted");..   
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
3830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3840: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
3850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3860: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3870: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3880: 0a 20 20 20 20 20 20 20 20 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 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
38e0: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
38f0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
3900: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
3910: 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64 20     /// Gets and 
3920: 72 65 74 75 72 6e 73 20 74 68 65 20 74 79 70 65  returns the type
3930: 20 61 66 66 69 6e 69 74 79 20 61 73 73 6f 63 69   affinity associ
3940: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76  ated with this v
3950: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
3960: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3970: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
3980: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
3990: 2f 20 54 68 65 20 74 79 70 65 20 61 66 66 69 6e  / The type affin
39a0: 69 74 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ity associated w
39b0: 69 74 68 20 74 68 69 73 20 76 61 6c 75 65 2e 0d  ith this value..
39c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
39d0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
39e0: 20 70 75 62 6c 69 63 20 54 79 70 65 41 66 66 69   public TypeAffi
39f0: 6e 69 74 79 20 47 65 74 54 79 70 65 41 66 66 69  nity GetTypeAffi
3a00: 6e 69 74 79 28 29 0d 0a 20 20 20 20 20 20 20 20  nity()..        
3a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
3a20: 66 20 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74  f (pValue == Int
3a30: 50 74 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e  Ptr.Zero) return
3a40: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e 6f   TypeAffinity.No
3a50: 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne;..           
3a60: 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
3a70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
3a80: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70  te3_value_type(p
3a90: 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  Value);..       
3aa0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3af0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3b00: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3b10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74 73          /// Gets
3b20: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
3b30: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
3b40: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3b50: 20 74 68 69 73 20 76 61 6c 75 65 2c 20 69 66 0d   this value, if.
3b60: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 74 20  .        /// it 
3b70: 72 65 66 65 72 73 20 74 6f 20 61 20 55 54 46 2d  refers to a UTF-
3b80: 38 20 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67  8 encoded string
3b90: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
3ba0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
3bb0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3bc0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
3bd0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
3be0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
3bf0: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54  h this value.  T
3c00: 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75  he returned valu
3c10: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  e..        /// m
3c20: 61 79 20 62 65 20 7a 65 72 6f 2e 0d 0a 20 20 20  ay be zero...   
3c30: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
3c40: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
3c50: 6c 69 63 20 69 6e 74 20 47 65 74 42 79 74 65 73  lic int GetBytes
3c60: 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ()..        {.. 
3c70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
3c80: 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e  Value == IntPtr.
3c90: 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 30 3b 0d  Zero) return 0;.
3ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
3cb0: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
3cc0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
3cd0: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c  value_bytes(pVal
3ce0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
3cf0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
3d50: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3d60: 20 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e       /// Gets an
3d70: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73  d returns the <s
3d80: 65 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20  ee cref="Int32" 
3d90: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
3da0: 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  th this..       
3db0: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
3dc0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
3dd0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3de0: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
3df0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
3e00: 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
3e10: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
3e20: 20 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20   this value...  
3e30: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
3e40: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  rns>..        pu
3e50: 62 6c 69 63 20 69 6e 74 20 47 65 74 49 6e 74 28  blic int GetInt(
3e60: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
3e70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56            if (pV
3e80: 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a  alue == IntPtr.Z
3e90: 65 72 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61  ero) return defa
3ea0: 75 6c 74 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20  ult(int);..     
3eb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
3ec0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
3ed0: 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
3ee0: 69 6e 74 28 70 56 61 6c 75 65 29 3b 0d 0a 20 20  int(pValue);..  
3ef0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3f00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
3f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3f50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
3f60: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
3f70: 20 47 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e   Gets and return
3f80: 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  s the <see cref=
3f90: 22 49 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63  "Int64" /> assoc
3fa0: 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20 20  iated with..    
3fb0: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 76 61 6c      /// this val
3fc0: 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ue...        ///
3fd0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3fe0: 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
3ff0: 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
4000: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
4010: 6e 74 36 34 22 20 2f 3e 20 61 73 73 6f 63 69 61  nt64" /> associa
4020: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
4030: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
4040: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4050: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6c 6f 6e        public lon
4060: 67 20 47 65 74 49 6e 74 36 34 28 29 0d 0a 20 20  g GetInt64()..  
4070: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4080: 20 20 20 20 20 69 66 20 28 70 56 61 6c 75 65 20       if (pValue 
4090: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  == IntPtr.Zero) 
40a0: 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 28 6c  return default(l
40b0: 6f 6e 67 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  ong);....#if !PL
40c0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
40d0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
40e0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
40f0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
4100: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
4110: 74 36 34 28 70 56 61 6c 75 65 29 3b 0d 0a 23 65  t64(pValue);..#e
4120: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
4130: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
4140: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 3b 0d 0a 20    long value;.. 
4150: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
4160: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
4170: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
4180: 36 34 5f 69 6e 74 65 72 6f 70 28 70 56 61 6c 75  64_interop(pValu
4190: 65 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0d 0a  e, out value);..
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
41b0: 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
41c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
41d0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
41e0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
41f0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
4200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4210: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4250: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4260: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
4270: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47  >..        /// G
4280: 65 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ets and returns 
4290: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  the <see cref="D
42a0: 6f 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69  ouble" /> associ
42b0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a  ated with this..
42c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75          /// valu
42d0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
42e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
42f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4300: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
4310: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  he <see cref="Do
4320: 75 62 6c 65 22 20 2f 3e 20 61 73 73 6f 63 69 61  uble" /> associa
4330: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 76 61  ted with this va
4340: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lue...        //
4350: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
4360: 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f 75        public dou
4370: 62 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 29 0d  ble GetDouble().
4380: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4390: 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
43a0: 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
43b0: 6f 29 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c  o) return defaul
43c0: 74 28 64 6f 75 62 6c 65 29 3b 0d 0a 0d 0a 23 69  t(double);....#i
43d0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
43e0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
43f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4400: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4410: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
4420: 75 65 5f 64 6f 75 62 6c 65 28 70 56 61 6c 75 65  ue_double(pValue
4430: 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
4440: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
4450: 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65 20 76          double v
4460: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
4470: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
4480: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76  ethods.sqlite3_v
4490: 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e 74 65  alue_double_inte
44a0: 72 6f 70 28 70 56 61 6c 75 65 2c 20 6f 75 74 20  rop(pValue, out 
44b0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
44c0: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
44d0: 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
44e0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
44f0: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
4500: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
4510: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
4520: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
4530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
4580: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
4590: 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
45a0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 3c 73 65   returns the <se
45b0: 65 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20  e cref="String" 
45c0: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  /> associated wi
45d0: 74 68 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  th this..       
45e0: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
45f0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
4600: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
4610: 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
4620: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
4630: 20 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f   cref="String" /
4640: 3e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  > associated wit
4650: 68 20 74 68 69 73 20 76 61 6c 75 65 2e 20 20 54  h this value.  T
4660: 68 65 20 76 61 6c 75 65 20 69 73 0d 0a 20 20 20  he value is..   
4670: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74       /// convert
4680: 65 64 20 66 72 6f 6d 20 74 68 65 20 55 54 46 2d  ed from the UTF-
4690: 38 20 65 6e 63 6f 64 69 6e 67 20 70 72 69 6f 72  8 encoding prior
46a0: 20 74 6f 20 62 65 69 6e 67 20 72 65 74 75 72 6e   to being return
46b0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
46c0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
46d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
46e0: 6e 67 20 47 65 74 53 74 72 69 6e 67 28 29 0d 0a  ng GetString()..
46f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4700: 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
4710: 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
4720: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
4730: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4740: 72 6e 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e  rn SQLiteString.
4750: 53 74 72 69 6e 67 46 72 6f 6d 55 74 66 38 49 6e  StringFromUtf8In
4760: 74 50 74 72 28 70 56 61 6c 75 65 2c 20 47 65 74  tPtr(pValue, Get
4770: 42 79 74 65 73 28 29 29 3b 0d 0a 20 20 20 20 20  Bytes());..     
4780: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
47e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
47f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65  ..        /// Ge
4800: 74 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74  ts and returns t
4810: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 42 79  he <see cref="By
4820: 74 65 22 20 2f 3e 20 61 72 72 61 79 20 61 73 73  te" /> array ass
4830: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
4840: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  s..        /// v
4850: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  alue...        /
4860: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
4870: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
4880: 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
4890: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
48a0: 22 42 79 74 65 22 20 2f 3e 20 61 72 72 61 79 20  "Byte" /> array 
48b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
48c0: 74 68 69 73 20 76 61 6c 75 65 2e 0d 0a 20 20 20  this value...   
48d0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
48e0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
48f0: 6c 69 63 20 62 79 74 65 5b 5d 20 47 65 74 42 6c  lic byte[] GetBl
4900: 6f 62 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ob()..        {.
4910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
4920: 28 70 56 61 6c 75 65 20 3d 3d 20 49 6e 74 50 74  (pValue == IntPt
4930: 72 2e 5a 65 72 6f 29 20 72 65 74 75 72 6e 20 6e  r.Zero) return n
4940: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
4950: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 42    return SQLiteB
4960: 79 74 65 73 2e 46 72 6f 6d 49 6e 74 50 74 72 28  ytes.FromIntPtr(
4970: 70 56 61 6c 75 65 2c 20 47 65 74 42 79 74 65 73  pValue, GetBytes
4980: 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
4990: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
49f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
4a00: 20 20 20 20 20 2f 2f 2f 20 55 73 65 73 20 74 68       /// Uses th
4a10: 65 20 6e 61 74 69 76 65 20 76 61 6c 75 65 20 68  e native value h
4a20: 61 6e 64 6c 65 20 74 6f 20 6f 62 74 61 69 6e 20  andle to obtain 
4a30: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 6d 61  and store the ma
4a40: 6e 61 67 65 64 20 76 61 6c 75 65 0d 0a 20 20 20  naged value..   
4a50: 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68 69       /// for thi
4a60: 73 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  s object instanc
4a70: 65 2c 20 74 68 75 73 20 73 61 76 69 6e 67 20 69  e, thus saving i
4a80: 74 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65 2e  t for later use.
4a90: 20 20 54 68 65 20 74 79 70 65 0d 0a 20 20 20 20    The type..    
4aa0: 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20 6d      /// of the m
4ab0: 61 6e 61 67 65 64 20 76 61 6c 75 65 20 69 73 20  anaged value is 
4ac0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
4ad0: 65 20 74 79 70 65 20 61 66 66 69 6e 69 74 79 20  e type affinity 
4ae0: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  of the..        
4af0: 2f 2f 2f 20 6e 61 74 69 76 65 20 76 61 6c 75 65  /// native value
4b00: 2e 20 20 49 66 20 74 68 65 20 74 79 70 65 20 61  .  If the type a
4b10: 66 66 69 6e 69 74 79 20 69 73 20 6e 6f 74 20 72  ffinity is not r
4b20: 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68 69  ecognized by thi
4b30: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  s..        /// m
4b40: 65 74 68 6f 64 2c 20 6e 6f 20 77 6f 72 6b 20 69  ethod, no work i
4b50: 73 20 64 6f 6e 65 20 61 6e 64 20 66 61 6c 73 65  s done and false
4b60: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   is returned... 
4b70: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
4b80: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
4b90: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
4ba0: 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
4bb0: 72 6f 20 69 66 20 74 68 65 20 6e 61 74 69 76 65  ro if the native
4bc0: 20 76 61 6c 75 65 20 77 61 73 20 70 65 72 73 69   value was persi
4bd0: 73 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  sted successfull
4be0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
4bf0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
4c00: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
4c10: 50 65 72 73 69 73 74 28 29 0d 0a 20 20 20 20 20  Persist()..     
4c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4c30: 20 20 73 77 69 74 63 68 20 28 47 65 74 54 79 70    switch (GetTyp
4c40: 65 41 66 66 69 6e 69 74 79 28 29 29 0d 0a 20 20  eAffinity())..  
4c50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
4c70: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 55  e TypeAffinity.U
4c80: 6e 69 6e 69 74 69 61 6c 69 7a 65 64 3a 0d 0a 20  ninitialized:.. 
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ca0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
4cc0: 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  lue = null;..   
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ce0: 20 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69       PreventNati
4cf0: 76 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20  veAccess();..   
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d10: 20 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72       return (per
4d20: 73 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d  sisted = true);.
4d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4d50: 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
4d60: 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 3a  eAffinity.Int64:
4d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 20 76 61 6c 75 65 20 3d 20 47 65 74 49 6e 74 36   value = GetInt6
4db0: 34 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  4();..          
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
4dd0: 65 76 65 6e 74 4e 61 74 69 76 65 41 63 63 65 73  eventNativeAcces
4de0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4e00: 74 75 72 6e 20 28 70 65 72 73 69 73 74 65 64 20  turn (persisted 
4e10: 3d 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  = true);..      
4e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
4e50: 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4e80: 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
4e90: 20 3d 20 47 65 74 44 6f 75 62 6c 65 28 29 3b 0d   = GetDouble();.
4ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4eb0: 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e 74           Prevent
4ec0: 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b 0d  NativeAccess();.
4ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ee0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4ef0: 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72 75  (persisted = tru
4f00: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
4f10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
4f30: 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65   TypeAffinity.Te
4f40: 78 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt:..           
4f50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f70: 20 20 20 20 76 61 6c 75 65 20 3d 20 47 65 74 53      value = GetS
4f80: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fa0: 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76 65 41    PreventNativeA
4fb0: 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20  ccess();..      
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 72 65 74 75 72 6e 20 28 70 65 72 73 69 73    return (persis
4fe0: 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a 20 20  ted = true);..  
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
5010: 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
5020: 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a 20 20  finity.Blob:..  
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61 6c               val
5060: 75 65 20 3d 20 47 65 74 42 79 74 65 73 28 29 3b  ue = GetBytes();
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5080: 20 20 20 20 20 20 20 20 20 20 50 72 65 76 65 6e            Preven
5090: 74 4e 61 74 69 76 65 41 63 63 65 73 73 28 29 3b  tNativeAccess();
50a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50c0: 20 28 70 65 72 73 69 73 74 65 64 20 3d 20 74 72   (persisted = tr
50d0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
50e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
5100: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 4e  e TypeAffinity.N
5110: 75 6c 6c 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ull:..          
5120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5140: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 44 42 4e       value = DBN
5150: 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ull.Value;..    
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5170: 20 20 20 20 50 72 65 76 65 6e 74 4e 61 74 69 76      PreventNativ
5180: 65 41 63 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  eAccess();..    
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 20 72 65 74 75 72 6e 20 28 70 65 72 73      return (pers
51b0: 69 73 74 65 64 20 3d 20 74 72 75 65 29 3b 0d 0a  isted = true);..
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
51e0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d         default:.
51f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5200: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5220: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5240: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5250: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
5260: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5270: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
5280: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5290: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
52e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
52f0: 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e  teIndexConstrain
5300: 74 4f 70 20 45 6e 75 6d 65 72 61 74 69 6f 6e 0d  tOp Enumeration.
5310: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5320: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 73  y>..    /// Thes
5330: 65 20 61 72 65 20 74 68 65 20 61 6c 6c 6f 77 65  e are the allowe
5340: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
5350: 20 6f 70 65 72 61 74 6f 72 73 20 74 68 61 74 20   operators that 
5360: 61 72 65 20 70 61 72 74 20 6f 66 20 61 0d 0a 20  are part of a.. 
5370: 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 61 69 6e     /// constrain
5380: 74 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48  t term in the WH
5390: 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ERE clause of a 
53a0: 71 75 65 72 79 20 74 68 61 74 20 75 73 65 73 20  query that uses 
53b0: 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 2f  a virtual..    /
53c0: 2f 2f 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  // table...    /
53d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
53e0: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53     public enum S
53f0: 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72  QLiteIndexConstr
5400: 61 69 6e 74 4f 70 20 3a 20 62 79 74 65 0d 0a 20  aintOp : byte.. 
5410: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f     {..        //
5420: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5430: 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61       /// This va
5440: 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20 74  lue represents t
5450: 68 65 20 65 71 75 61 6c 69 74 79 20 6f 70 65 72  he equality oper
5460: 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ator...        /
5470: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5480: 20 20 20 20 20 20 20 45 71 75 61 6c 54 6f 20 3d         EqualTo =
5490: 20 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   2,....        /
54a0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
54b0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76        /// This v
54c0: 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73 20  alue represents 
54d0: 74 68 65 20 67 72 65 61 74 65 72 20 74 68 61 6e  the greater than
54e0: 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20   operator...    
54f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5500: 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65 61  y>..        Grea
5510: 74 65 72 54 68 61 6e 20 3d 20 34 2c 0d 0a 0d 0a  terThan = 4,....
5520: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
5530: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
5540: 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20 72 65  // This value re
5550: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 65 73  presents the les
5560: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
5570: 74 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20  to operator...  
5580: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5590: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 4c 65  ary>..        Le
55a0: 73 73 54 68 61 6e 4f 72 45 71 75 61 6c 54 6f 20  ssThanOrEqualTo 
55b0: 3d 20 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 8,....        
55c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
55d0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
55e0: 76 61 6c 75 65 20 72 65 70 72 65 73 65 6e 74 73  value represents
55f0: 20 74 68 65 20 6c 65 73 73 20 74 68 61 6e 20 6f   the less than o
5600: 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20  perator...      
5610: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5620: 0d 0a 20 20 20 20 20 20 20 20 4c 65 73 73 54 68  ..        LessTh
5630: 61 6e 20 3d 20 31 36 2c 0d 0a 0d 0a 20 20 20 20  an = 16,....    
5640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5650: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
5660: 68 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73  his value repres
5670: 65 6e 74 73 20 74 68 65 20 67 72 65 61 74 65 72  ents the greater
5680: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
5690: 6f 20 6f 70 65 72 61 74 6f 72 2e 0d 0a 20 20 20  o operator...   
56a0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
56b0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 47 72 65  ry>..        Gre
56c0: 61 74 65 72 54 68 61 6e 4f 72 45 71 75 61 6c 54  aterThanOrEqualT
56d0: 6f 20 3d 20 33 32 2c 0d 0a 0d 0a 20 20 20 20 20  o = 32,....     
56e0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
56f0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
5700: 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65  is value represe
5710: 6e 74 73 20 74 68 65 20 4d 41 54 43 48 20 6f 70  nts the MATCH op
5720: 65 72 61 74 6f 72 2e 0d 0a 20 20 20 20 20 20 20  erator...       
5730: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5740: 0a 20 20 20 20 20 20 20 20 4d 61 74 63 68 20 3d  .        Match =
5750: 20 36 34 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20   64..    }..    
5760: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5770: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
57c0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
57d0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
57e0: 6e 74 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  nt Helper Class.
57f0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5800: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
5810: 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74   class represent
5820: 73 20 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c  s the native sql
5830: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
5840: 72 61 69 6e 74 20 73 74 72 75 63 74 75 72 65 0d  raint structure.
5850: 0a 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68  .    /// from th
5860: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
5870: 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
5880: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
5890: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
58a0: 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ass SQLiteIndexC
58b0: 6f 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20 20 7b  onstraint..    {
58c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
58d0: 6e 20 49 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74  n Internal Const
58e0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
58f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5900: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5910: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5920: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5930: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5940: 66 69 65 64 20 6e 61 74 69 76 65 0d 0a 20 20 20  fied native..   
5950: 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33       /// sqlite3
5960: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
5970: 74 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  t structure...  
5980: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
5990: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
59a0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
59b0: 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a 20 20 20  onstraint">..   
59c0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74       /// The nat
59d0: 69 76 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ive sqlite3_inde
59e0: 78 5f 63 6f 6e 73 74 72 61 69 6e 74 20 73 74 72  x_constraint str
59f0: 75 63 74 75 72 65 20 74 6f 20 75 73 65 2e 0d 0a  ucture to use...
5a00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
5a10: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  ram>..        in
5a20: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64  ternal SQLiteInd
5a30: 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a 20  exConstraint(.. 
5a40: 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
5a50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
5a60: 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e  qlite3_index_con
5a70: 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69  straint constrai
5a80: 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
5a90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3a  )..            :
5aa0: 20 74 68 69 73 28 63 6f 6e 73 74 72 61 69 6e 74   this(constraint
5ab0: 2e 69 43 6f 6c 75 6d 6e 2c 20 63 6f 6e 73 74 72  .iColumn, constr
5ac0: 61 69 6e 74 2e 6f 70 2c 20 63 6f 6e 73 74 72 61  aint.op, constra
5ad0: 69 6e 74 2e 75 73 61 62 6c 65 2c 0d 0a 20 20 20  int.usable,..   
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5af0: 63 6f 6e 73 74 72 61 69 6e 74 2e 69 54 65 72 6d  constraint.iTerm
5b00: 4f 66 66 73 65 74 29 0d 0a 20 20 20 20 20 20 20  Offset)..       
5b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5b20: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
5b30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5b40: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5b50: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
5b60: 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
5ba0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
5bb0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
5bc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
5bd0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5be0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73          /// Cons
5bf0: 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e  tructs an instan
5c00: 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73  ce of this class
5c10: 20 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69   using the speci
5c20: 66 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20  fied field..    
5c30: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d      /// values..
5c40: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
5c50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
5c60: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
5c70: 3d 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20  ="iColumn">..   
5c80: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
5c90: 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
5ca0: 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 2e  e of constraint.
5cb0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5cc0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5cd0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5ce0: 22 6f 70 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  "op">..        /
5cf0: 2f 2f 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70  // Constraint op
5d00: 65 72 61 74 6f 72 20 28 3c 73 65 65 20 63 72 65  erator (<see cre
5d10: 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43 6f  f="SQLiteIndexCo
5d20: 6e 73 74 72 61 69 6e 74 4f 70 22 20 2f 3e 29 2e  nstraintOp" />).
5d30: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5d40: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5d50: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
5d60: 22 75 73 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  "usable">..     
5d70: 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74     /// True if t
5d80: 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  his constraint i
5d90: 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20 20  s usable...     
5da0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
5db0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
5dc0: 72 61 6d 20 6e 61 6d 65 3d 22 69 54 65 72 6d 4f  ram name="iTermO
5dd0: 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
5de0: 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74 65 72 6e   /// Used intern
5df0: 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63 72 65 66  ally - <see cref
5e00: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
5e10: 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78  Module.BestIndex
5e20: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
5e30: 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f 72 65 2e  / should ignore.
5e40: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
5e50: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
5e60: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 49 6e  private SQLiteIn
5e70: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 28 0d 0a  dexConstraint(..
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
5e90: 69 43 6f 6c 75 6d 6e 2c 0d 0a 20 20 20 20 20 20  iColumn,..      
5ea0: 20 20 20 20 20 20 53 51 4c 69 74 65 49 6e 64 65        SQLiteInde
5eb0: 78 43 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70  xConstraintOp op
5ec0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
5ed0: 79 74 65 20 75 73 61 62 6c 65 2c 0d 0a 20 20 20  yte usable,..   
5ee0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 54 65           int iTe
5ef0: 72 6d 4f 66 66 73 65 74 0d 0a 20 20 20 20 20 20  rmOffset..      
5f00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5f10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5f20: 74 68 69 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69  this.iColumn = i
5f30: 43 6f 6c 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20  Column;..       
5f40: 20 20 20 20 20 74 68 69 73 2e 6f 70 20 3d 20 6f       this.op = o
5f50: 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
5f60: 74 68 69 73 2e 75 73 61 62 6c 65 20 3d 20 75 73  this.usable = us
5f70: 61 62 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  able;..         
5f80: 20 20 20 74 68 69 73 2e 69 54 65 72 6d 4f 66 66     this.iTermOff
5f90: 73 65 74 20 3d 20 69 54 65 72 6d 4f 66 66 73 65  set = iTermOffse
5fa0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
5fb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5fc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
5fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6010: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
6020: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69  region Public Fi
6030: 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  elds..        //
6040: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6050: 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20       /// Column 
6060: 6f 6e 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64  on left-hand sid
6070: 65 20 6f 66 20 63 6f 6e 73 74 72 61 69 6e 74 2e  e of constraint.
6080: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
6090: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
60a0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 69 43 6f    public int iCo
60b0: 6c 75 6d 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lumn;....       
60c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6100: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6110: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6120: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
6130: 6e 73 74 72 61 69 6e 74 20 6f 70 65 72 61 74 6f  nstraint operato
6140: 72 20 28 3c 73 65 65 20 63 72 65 66 3d 22 53 51  r (<see cref="SQ
6150: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
6160: 69 6e 74 4f 70 22 20 2f 3e 29 2e 0d 0a 20 20 20  intOp" />)...   
6170: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
6180: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
6190: 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65 78 43  lic SQLiteIndexC
61a0: 6f 6e 73 74 72 61 69 6e 74 4f 70 20 6f 70 3b 0d  onstraintOp op;.
61b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
6210: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
6220: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20      /// True if 
6230: 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 20  this constraint 
6240: 69 73 20 75 73 61 62 6c 65 2e 0d 0a 20 20 20 20  is usable...    
6250: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6260: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
6270: 69 63 20 62 79 74 65 20 75 73 61 62 6c 65 3b 0d  ic byte usable;.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
62e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
62f0: 20 20 20 20 2f 2f 2f 20 55 73 65 64 20 69 6e 74      /// Used int
6300: 65 72 6e 61 6c 6c 79 20 2d 20 3c 73 65 65 20 63  ernally - <see c
6310: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
6320: 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e  gedModule.BestIn
6330: 64 65 78 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20  dex" />..       
6340: 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 69 67 6e 6f   /// should igno
6350: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
6360: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6370: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
6380: 69 54 65 72 6d 4f 66 66 73 65 74 3b 0d 0a 20 20  iTermOffset;..  
6390: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
63a0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
63b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6410: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
6420: 49 6e 64 65 78 4f 72 64 65 72 42 79 20 48 65 6c  IndexOrderBy Hel
6430: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f  per Class..    /
6440: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6450: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
6460: 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
6470: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6480: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 73 74 72  ndex_orderby str
6490: 75 63 74 75 72 65 20 66 72 6f 6d 0d 0a 20 20 20  ucture from..   
64a0: 20 2f 2f 2f 20 74 68 65 20 53 51 4c 69 74 65 20   /// the SQLite 
64b0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
64c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
64d0: 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 65  >..    public se
64e0: 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74  aled class SQLit
64f0: 65 49 6e 64 65 78 4f 72 64 65 72 42 79 0d 0a 20  eIndexOrderBy.. 
6500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
6510: 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20 43  egion Internal C
6520: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6530: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
6540: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6550: 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e  Constructs an in
6560: 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63  stance of this c
6570: 6c 61 73 73 20 75 73 69 6e 67 20 74 68 65 20 73  lass using the s
6580: 70 65 63 69 66 69 65 64 20 6e 61 74 69 76 65 0d  pecified native.
6590: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
65a0: 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72  ite3_index_order
65b0: 62 79 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  by structure... 
65c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
65d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
65e0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
65f0: 6f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20 20 20  orderBy">..     
6600: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
6610: 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
6620: 6f 72 64 65 72 62 79 20 73 74 72 75 63 74 75 72  orderby structur
6630: 65 20 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20  e to use...     
6640: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6650: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
6660: 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  l SQLiteIndexOrd
6670: 65 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20  erBy(..         
6680: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
6690: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
66a0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 20 6f 72 64  ndex_orderby ord
66b0: 65 72 42 79 0d 0a 20 20 20 20 20 20 20 20 20 20  erBy..          
66c0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
66d0: 20 3a 20 74 68 69 73 28 6f 72 64 65 72 42 79 2e   : this(orderBy.
66e0: 69 43 6f 6c 75 6d 6e 2c 20 6f 72 64 65 72 42 79  iColumn, orderBy
66f0: 2e 64 65 73 63 29 0d 0a 20 20 20 20 20 20 20 20  .desc)..        
6700: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
6710: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
6720: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6730: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6740: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6790: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
67a0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72  n Private Constr
67b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
67c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
67d0: 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74         /// Const
67e0: 72 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63  ructs an instanc
67f0: 65 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 20  e of this class 
6800: 75 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66  using the specif
6810: 69 65 64 20 66 69 65 6c 64 0d 0a 20 20 20 20 20  ied field..     
6820: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
6830: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
6840: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6850: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6860: 22 69 43 6f 6c 75 6d 6e 22 3e 0d 0a 20 20 20 20  "iColumn">..    
6870: 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e 20 6e      /// Column n
6880: 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  umber...        
6890: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
68a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
68b0: 20 6e 61 6d 65 3d 22 64 65 73 63 22 3e 0d 0a 20   name="desc">.. 
68c0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 72 75 65 20         /// True 
68d0: 66 6f 72 20 44 45 53 43 2e 20 20 46 61 6c 73 65  for DESC.  False
68e0: 20 66 6f 72 20 41 53 43 2e 0d 0a 20 20 20 20 20   for ASC...     
68f0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6900: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
6910: 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65   SQLiteIndexOrde
6920: 72 42 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rBy(..          
6930: 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 2c 0d 0a    int iColumn,..
6940: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
6950: 20 64 65 73 63 0d 0a 20 20 20 20 20 20 20 20 20   desc..         
6960: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
6970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69  .            thi
6980: 73 2e 69 43 6f 6c 75 6d 6e 20 3d 20 69 43 6f 6c  s.iColumn = iCol
6990: 75 6d 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  umn;..          
69a0: 20 20 74 68 69 73 2e 64 65 73 63 20 3d 20 64 65    this.desc = de
69b0: 73 63 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  sc;..        }..
69c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
69d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6a30: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46  #region Public F
6a40: 69 65 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f  ields..        /
6a50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6a60: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6c 75 6d 6e        /// Column
6a70: 20 6e 75 6d 62 65 72 2e 0d 0a 20 20 20 20 20 20   number...      
6a80: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
6a90: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
6aa0: 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 0d 0a 0d   int iColumn;...
6ab0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6b00: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
6b10: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
6b20: 20 20 2f 2f 2f 20 54 72 75 65 20 66 6f 72 20 44    /// True for D
6b30: 45 53 43 2e 20 20 46 61 6c 73 65 20 66 6f 72 20  ESC.  False for 
6b40: 41 53 43 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ASC...        //
6b50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6b60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 79 74        public byt
6b70: 65 20 64 65 73 63 3b 0d 0a 20 20 20 20 20 20 20  e desc;..       
6b80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
6b90: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
6ba0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
6c00: 67 69 6f 6e 20 53 51 4c 69 74 65 49 6e 64 65 78  gion SQLiteIndex
6c10: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 20  ConstraintUsage 
6c20: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
6c30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6c40: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
6c50: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 74  ass represents t
6c60: 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65  he native sqlite
6c70: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
6c80: 6e 74 5f 75 73 61 67 65 0d 0a 20 20 20 20 2f 2f  nt_usage..    //
6c90: 2f 20 73 74 72 75 63 74 75 72 65 20 66 72 6f 6d  / structure from
6ca0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
6cb0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
6cc0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6cd0: 20 20 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64     public sealed
6ce0: 20 63 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64   class SQLiteInd
6cf0: 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  exConstraintUsag
6d00: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
6d10: 20 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e    #region Intern
6d20: 61 6c 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  al Constructors.
6d30: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
6d40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
6d50: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
6d60: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
6d70: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
6d80: 68 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74  he specified nat
6d90: 69 76 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ive..        ///
6da0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63   sqlite3_index_c
6db0: 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65 20  onstraint_usage 
6dc0: 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
6dd0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6de0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
6df0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
6e00: 73 74 72 61 69 6e 74 55 73 61 67 65 22 3e 0d 0a  straintUsage">..
6e10: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
6e20: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
6e30: 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e 74 5f  ndex_constraint_
6e40: 75 73 61 67 65 20 73 74 72 75 63 74 75 72 65 20  usage structure 
6e50: 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20  to use...       
6e60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6e70: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
6e80: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
6e90: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
6ea0: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
6eb0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6ec0: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
6ed0: 72 61 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73  raint_usage cons
6ee0: 74 72 61 69 6e 74 55 73 61 67 65 0d 0a 20 20 20  traintUsage..   
6ef0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f00: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 63          : this(c
6f10: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2e 61  onstraintUsage.a
6f20: 72 67 76 49 6e 64 65 78 2c 20 63 6f 6e 73 74 72  rgvIndex, constr
6f30: 61 69 6e 74 55 73 61 67 65 2e 6f 6d 69 74 29 0d  aintUsage.omit).
6f40: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6f50: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
6f60: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
6f70: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
6f80: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6f90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6fe0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
6ff0: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
7000: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
7010: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7020: 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61  /// Constructs a
7030: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
7040: 69 73 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  is class using t
7050: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 65  he specified fie
7060: 6c 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ld..        /// 
7070: 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  values...       
7080: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7090: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
70a0: 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 49 6e  ram name="argvIn
70b0: 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  dex">..        /
70c0: 2f 2f 20 49 66 20 67 72 65 61 74 65 72 20 74 68  // If greater th
70d0: 61 6e 20 30 2c 20 63 6f 6e 73 74 72 61 69 6e 74  an 0, constraint
70e0: 20 69 73 20 70 61 72 74 20 6f 66 20 61 72 67 76   is part of argv
70f0: 20 74 6f 20 78 46 69 6c 74 65 72 2e 0d 0a 20 20   to xFilter...  
7100: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
7110: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
7120: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 6d 69  <param name="omi
7130: 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
7140: 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74   Do not code a t
7150: 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f 6e  est for this con
7160: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20  straint...      
7170: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
7180: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7190: 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74  SQLiteIndexConst
71a0: 72 61 69 6e 74 55 73 61 67 65 28 0d 0a 20 20 20  raintUsage(..   
71b0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
71c0: 76 49 6e 64 65 78 2c 0d 0a 20 20 20 20 20 20 20  vIndex,..       
71d0: 20 20 20 20 20 62 79 74 65 20 6f 6d 69 74 0d 0a       byte omit..
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
71f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7200: 20 20 20 20 20 20 74 68 69 73 2e 61 72 67 76 49        this.argvI
7210: 6e 64 65 78 20 3d 20 61 72 67 76 49 6e 64 65 78  ndex = argvIndex
7220: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  ;..            t
7230: 68 69 73 2e 6f 6d 69 74 20 3d 20 6f 6d 69 74 3b  his.omit = omit;
7240: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7250: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
7260: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
72b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
72c0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 46 69 65  egion Public Fie
72d0: 6c 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  lds..        ///
72e0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
72f0: 20 20 20 20 2f 2f 2f 20 49 66 20 67 72 65 61 74      /// If great
7300: 65 72 20 74 68 61 6e 20 30 2c 20 63 6f 6e 73 74  er than 0, const
7310: 72 61 69 6e 74 20 69 73 20 70 61 72 74 20 6f 66  raint is part of
7320: 20 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72   argv to xFilter
7330: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
7340: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7350: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 61 72     public int ar
7360: 67 76 49 6e 64 65 78 3b 0d 0a 0d 0a 20 20 20 20  gvIndex;....    
7370: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
73c0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
73d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
73e0: 2f 20 44 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20  / Do not code a 
73f0: 74 65 73 74 20 66 6f 72 20 74 68 69 73 20 63 6f  test for this co
7400: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...     
7410: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
7420: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
7430: 63 20 62 79 74 65 20 6f 6d 69 74 3b 0d 0a 20 20  c byte omit;..  
7440: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7450: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
7460: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
74c0: 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65    #region SQLite
74d0: 49 6e 64 65 78 49 6e 70 75 74 73 20 48 65 6c 70  IndexInputs Help
74e0: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
74f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7500: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
7510: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 76  represents the v
7520: 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 70 72  arious inputs pr
7530: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
7540: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
7550: 2f 2f 20 6c 69 62 72 61 72 79 20 74 6f 20 74 68  // library to th
7560: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
7570: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
7580: 65 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20  e.BestIndex" /> 
7590: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f  method...    ///
75a0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
75b0: 20 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63   public sealed c
75c0: 6c 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78  lass SQLiteIndex
75d0: 49 6e 70 75 74 73 0d 0a 20 20 20 20 7b 0d 0a 20  Inputs..    {.. 
75e0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75f0: 6e 74 65 72 6e 61 6c 20 43 6f 6e 73 74 72 75 63  nternal Construc
7600: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tors..        //
7610: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
7620: 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75       /// Constru
7630: 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  cts an instance 
7640: 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a  of this class...
7650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
7660: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
7670: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7680: 22 6e 43 6f 6e 73 74 72 61 69 6e 74 22 3e 0d 0a  "nConstraint">..
7690: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
76a0: 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20 63  number of <see c
76b0: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
76c0: 43 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 69  Constraint" /> i
76d0: 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20  nstances to..   
76e0: 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c       /// pre-all
76f0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
7700: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
7710: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
7720: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
7730: 22 6e 4f 72 64 65 72 42 79 22 3e 0d 0a 20 20 20  "nOrderBy">..   
7740: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d       /// The num
7750: 62 65 72 20 6f 66 20 3c 73 65 65 20 63 72 65 66  ber of <see cref
7760: 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64  ="SQLiteIndexOrd
7770: 65 72 42 79 22 20 2f 3e 20 69 6e 73 74 61 6e 63  erBy" /> instanc
7780: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  es to..        /
7790: 2f 2f 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65 20  // pre-allocate 
77a0: 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20 20 20 20  space for...    
77b0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
77c0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
77d0: 61 6c 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e  al SQLiteIndexIn
77e0: 70 75 74 73 28 69 6e 74 20 6e 43 6f 6e 73 74 72  puts(int nConstr
77f0: 61 69 6e 74 2c 20 69 6e 74 20 6e 4f 72 64 65 72  aint, int nOrder
7800: 42 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  By)..        {..
7810: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
7820: 74 72 61 69 6e 74 73 20 3d 20 6e 65 77 20 53 51  traints = new SQ
7830: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
7840: 69 6e 74 5b 6e 43 6f 6e 73 74 72 61 69 6e 74 5d  int[nConstraint]
7850: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ;..            o
7860: 72 64 65 72 42 79 73 20 3d 20 6e 65 77 20 53 51  rderBys = new SQ
7870: 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42 79  LiteIndexOrderBy
7880: 5b 6e 4f 72 64 65 72 42 79 5d 3b 0d 0a 20 20 20  [nOrderBy];..   
7890: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
78a0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
78b0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7900: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
7910: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
7920: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
7930: 61 74 65 20 53 51 4c 69 74 65 49 6e 64 65 78 43  ate SQLiteIndexC
7940: 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 63 6f 6e 73  onstraint[] cons
7950: 74 72 61 69 6e 74 73 3b 0d 0a 20 20 20 20 20 20  traints;..      
7960: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7970: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20  .        /// An 
7980: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
7990: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
79a0: 6f 6e 73 74 72 61 69 6e 74 22 20 2f 3e 20 6f 62  onstraint" /> ob
79b0: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 2c 0d  ject instances,.
79c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 61 63  .        /// eac
79d0: 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 6e 66  h containing inf
79e0: 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c 69 65  ormation supplie
79f0: 64 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  d by the SQLite 
7a00: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
7a10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
7a20: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
7a30: 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e 64 65  ublic SQLiteInde
7a40: 78 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20 43 6f  xConstraint[] Co
7a50: 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20  nstraints..     
7a60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7a70: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63    get { return c
7a80: 6f 6e 73 74 72 61 69 6e 74 73 3b 20 7d 0d 0a 20  onstraints; }.. 
7a90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7aa0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7af0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
7b00: 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72 42  QLiteIndexOrderB
7b10: 79 5b 5d 20 6f 72 64 65 72 42 79 73 3b 0d 0a 20  y[] orderBys;.. 
7b20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
7b30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
7b40: 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 3c 73  / An array of <s
7b50: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49  ee cref="SQLiteI
7b60: 6e 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e 20  ndexOrderBy" /> 
7b70: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73  object instances
7b80: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  ,..        /// e
7b90: 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69  ach containing i
7ba0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 75 70 70 6c  nformation suppl
7bb0: 69 65 64 20 62 79 20 74 68 65 20 53 51 4c 69 74  ied by the SQLit
7bc0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
7bd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
7be0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
7bf0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49 6e   public SQLiteIn
7c00: 64 65 78 4f 72 64 65 72 42 79 5b 5d 20 4f 72 64  dexOrderBy[] Ord
7c10: 65 72 42 79 73 0d 0a 20 20 20 20 20 20 20 20 7b  erBys..        {
7c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
7c30: 74 20 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72  t { return order
7c40: 42 79 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Bys; }..        
7c50: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
7c60: 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
7c70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
7c80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7cd0: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53  ...    #region S
7ce0: 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75 74  QLiteIndexOutput
7cf0: 73 20 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  s Helper Class..
7d00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7d10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
7d20: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
7d30: 20 74 68 65 20 76 61 72 69 6f 75 73 20 6f 75 74   the various out
7d40: 70 75 74 73 20 70 72 6f 76 69 64 65 64 20 74 6f  puts provided to
7d50: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
7d60: 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72  ..    /// librar
7d70: 79 20 62 79 20 74 68 65 20 3c 73 65 65 20 63 72  y by the <see cr
7d80: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
7d90: 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74 49 6e 64  edModule.BestInd
7da0: 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  ex" /> method...
7db0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7dc0: 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
7dd0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
7de0: 74 65 49 6e 64 65 78 4f 75 74 70 75 74 73 0d 0a  teIndexOutputs..
7df0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
7e00: 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c 20  region Internal 
7e10: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
7e20: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
7e30: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
7e40: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
7e50: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
7e60: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
7e70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7e80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
7e90: 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74 72  am name="nConstr
7ea0: 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  aint">..        
7eb0: 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
7ec0: 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
7ed0: 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61 69  iteIndexConstrai
7ee0: 6e 74 55 73 61 67 65 22 20 2f 3e 20 69 6e 73 74  ntUsage" /> inst
7ef0: 61 6e 63 65 73 0d 0a 20 20 20 20 20 20 20 20 2f  ances..        /
7f00: 2f 2f 20 74 6f 20 70 72 65 2d 61 6c 6c 6f 63 61  // to pre-alloca
7f10: 74 65 20 73 70 61 63 65 20 66 6f 72 2e 0d 0a 20  te space for... 
7f20: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
7f30: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  am>..        int
7f40: 65 72 6e 61 6c 20 53 51 4c 69 74 65 49 6e 64 65  ernal SQLiteInde
7f50: 78 4f 75 74 70 75 74 73 28 69 6e 74 20 6e 43 6f  xOutputs(int nCo
7f60: 6e 73 74 72 61 69 6e 74 29 0d 0a 20 20 20 20 20  nstraint)..     
7f70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f80: 20 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67    constraintUsag
7f90: 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49  es = new SQLiteI
7fa0: 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73  ndexConstraintUs
7fb0: 61 67 65 5b 6e 43 6f 6e 73 74 72 61 69 6e 74 5d  age[nConstraint]
7fc0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
7fd0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7fe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
8040: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
8050: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
8060: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
8070: 49 6e 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55  IndexConstraintU
8080: 73 61 67 65 5b 5d 20 63 6f 6e 73 74 72 61 69 6e  sage[] constrain
8090: 74 55 73 61 67 65 73 3b 0d 0a 20 20 20 20 20 20  tUsages;..      
80a0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
80b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e 20  .        /// An 
80c0: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
80d0: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 43  ef="SQLiteIndexC
80e0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22 20  onstraintUsage" 
80f0: 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20  /> object..     
8100: 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 73     /// instances
8110: 2c 20 65 61 63 68 20 63 6f 6e 74 61 69 6e 69 6e  , each containin
8120: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f  g information to
8130: 20 62 65 20 73 75 70 70 6c 69 65 64 20 74 6f 20   be supplied to 
8140: 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20  the SQLite..    
8150: 20 20 20 20 2f 2f 2f 20 63 6f 72 65 20 6c 69 62      /// core lib
8160: 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
8170: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8180: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51         public SQ
8190: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
81a0: 69 6e 74 55 73 61 67 65 5b 5d 20 43 6f 6e 73 74  intUsage[] Const
81b0: 72 61 69 6e 74 55 73 61 67 65 73 0d 0a 20 20 20  raintUsages..   
81c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
81d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
81e0: 20 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65   constraintUsage
81f0: 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  s; }..        }.
8200: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8250: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
8260: 69 76 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e  ivate int indexN
8270: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
8280: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
8290: 20 20 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65         /// Numbe
82a0: 72 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  r used to help i
82b0: 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
82c0: 63 74 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69  cted index.  Thi
82d0: 73 20 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20  s value will..  
82e0: 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65 72 20        /// later 
82f0: 62 65 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74  be provided to t
8300: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
8310: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
8320: 6c 65 2e 46 69 6c 74 65 72 22 20 2f 3e 0d 0a 20  le.Filter" />.. 
8330: 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f         /// metho
8340: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
8350: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8360: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 49      public int I
8370: 6e 64 65 78 4e 75 6d 62 65 72 0d 0a 20 20 20 20  ndexNumber..    
8380: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8390: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
83a0: 69 6e 64 65 78 4e 75 6d 62 65 72 3b 20 7d 0d 0a  indexNumber; }..
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
83c0: 7b 20 69 6e 64 65 78 4e 75 6d 62 65 72 20 3d 20  { indexNumber = 
83d0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
83e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
83f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8440: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
8450: 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a 20   indexString;.. 
8460: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8470: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8480: 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f  / String used to
8490: 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74   help identify t
84a0: 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
84b0: 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20 77  x.  This value w
84c0: 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
84d0: 20 6c 61 74 65 72 20 62 65 20 70 72 6f 76 69 64   later be provid
84e0: 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
84f0: 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
8500: 67 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72  gedModule.Filter
8510: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  " />..        //
8520: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
8530: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8540: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
8550: 63 20 73 74 72 69 6e 67 20 49 6e 64 65 78 53 74  c string IndexSt
8560: 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ring..        {.
8570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
8580: 20 7b 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53   { return indexS
8590: 74 72 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20  tring; }..      
85a0: 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 64 65        set { inde
85b0: 78 53 74 72 69 6e 67 20 3d 20 76 61 6c 75 65 3b  xString = value;
85c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
85d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
8630: 61 74 65 20 69 6e 74 20 6e 65 65 64 54 6f 46 72  ate int needToFr
8640: 65 65 49 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  eeIndexString;..
8650: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
8660: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
8670: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
8680: 68 65 20 69 6e 64 65 78 20 73 74 72 69 6e 67 20  he index string 
8690: 6d 75 73 74 20 62 65 20 66 72 65 65 64 20 62 79  must be freed by
86a0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
86b0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69  ..        /// li
86c0: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...        
86d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
86e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 69          public i
86f0: 6e 74 20 4e 65 65 64 54 6f 46 72 65 65 49 6e 64  nt NeedToFreeInd
8700: 65 78 53 74 72 69 6e 67 0d 0a 20 20 20 20 20 20  exString..      
8710: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8720: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 65   get { return ne
8730: 65 64 54 6f 46 72 65 65 49 6e 64 65 78 53 74 72  edToFreeIndexStr
8740: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
8750: 20 20 20 20 73 65 74 20 7b 20 6e 65 65 64 54 6f      set { needTo
8760: 46 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20  FreeIndexString 
8770: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
8780: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8790: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
87e0: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
87f0: 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 3b  orderByConsumed;
8800: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8820: 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 6f 75 74   /// True if out
8830: 70 75 74 20 69 73 20 61 6c 72 65 61 64 79 20 6f  put is already o
8840: 72 64 65 72 65 64 2e 0d 0a 20 20 20 20 20 20 20  rdered...       
8850: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8860: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
8870: 69 6e 74 20 4f 72 64 65 72 42 79 43 6f 6e 73 75  int OrderByConsu
8880: 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  med..        {..
8890: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
88a0: 7b 20 72 65 74 75 72 6e 20 6f 72 64 65 72 42 79  { return orderBy
88b0: 43 6f 6e 73 75 6d 65 64 3b 20 7d 0d 0a 20 20 20  Consumed; }..   
88c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6f           set { o
88d0: 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 20 3d  rderByConsumed =
88e0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
88f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8950: 20 20 20 70 72 69 76 61 74 65 20 64 6f 75 62 6c     private doubl
8960: 65 20 65 73 74 69 6d 61 74 65 64 43 6f 73 74 3b  e estimatedCost;
8970: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
8980: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
8990: 20 2f 2f 2f 20 45 73 74 69 6d 61 74 65 64 20 63   /// Estimated c
89a0: 6f 73 74 20 6f 66 20 75 73 69 6e 67 20 74 68 69  ost of using thi
89b0: 73 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20  s index...      
89c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
89d0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
89e0: 20 64 6f 75 62 6c 65 20 45 73 74 69 6d 61 74 65   double Estimate
89f0: 64 43 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  dCost..        {
8a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65  ..            ge
8a10: 74 20 7b 20 72 65 74 75 72 6e 20 65 73 74 69 6d  t { return estim
8a20: 61 74 65 64 43 6f 73 74 3b 20 7d 0d 0a 20 20 20  atedCost; }..   
8a30: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 65           set { e
8a40: 73 74 69 6d 61 74 65 64 43 6f 73 74 20 3d 20 76  stimatedCost = v
8a50: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
8a60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
8a70: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
8a80: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8a90: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
8aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
8af0: 53 51 4c 69 74 65 49 6e 64 65 78 20 48 65 6c 70  SQLiteIndex Help
8b00: 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f  er Class..    //
8b10: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8b20: 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20   /// This class 
8b30: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 76  represents the v
8b40: 61 72 69 6f 75 73 20 69 6e 70 75 74 73 20 61 6e  arious inputs an
8b50: 64 20 6f 75 74 70 75 74 73 20 75 73 65 64 20 77  d outputs used w
8b60: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  ith the..    ///
8b70: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
8b80: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
8b90: 2e 42 65 73 74 49 6e 64 65 78 22 20 2f 3e 20 6d  .BestIndex" /> m
8ba0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
8bb0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8bc0: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
8bd0: 61 73 73 20 53 51 4c 69 74 65 49 6e 64 65 78 0d  ass SQLiteIndex.
8be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8bf0: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 6e 61 6c  #region Internal
8c00: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
8c10: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
8c20: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
8c30: 2f 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20  / Constructs an 
8c40: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
8c50: 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20   class...       
8c60: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
8c70: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
8c80: 72 61 6d 20 6e 61 6d 65 3d 22 6e 43 6f 6e 73 74  ram name="nConst
8c90: 72 61 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20  raint">..       
8ca0: 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
8cb0: 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  of <see cref="SQ
8cc0: 4c 69 74 65 49 6e 64 65 78 43 6f 6e 73 74 72 61  LiteIndexConstra
8cd0: 69 6e 74 22 20 2f 3e 20 28 61 6e 64 0d 0a 20 20  int" /> (and..  
8ce0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
8cf0: 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78  ref="SQLiteIndex
8d00: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 22  ConstraintUsage"
8d10: 20 2f 3e 29 20 69 6e 73 74 61 6e 63 65 73 20 74   />) instances t
8d20: 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  o..        /// p
8d30: 72 65 2d 61 6c 6c 6f 63 61 74 65 20 73 70 61 63  re-allocate spac
8d40: 65 20 66 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20  e for...        
8d50: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
8d60: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
8d70: 20 6e 61 6d 65 3d 22 6e 4f 72 64 65 72 42 79 22   name="nOrderBy"
8d80: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
8d90: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65  he number of <se
8da0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e  e cref="SQLiteIn
8db0: 64 65 78 4f 72 64 65 72 42 79 22 20 2f 3e 20 69  dexOrderBy" /> i
8dc0: 6e 73 74 61 6e 63 65 73 20 74 6f 0d 0a 20 20 20  nstances to..   
8dd0: 20 20 20 20 20 2f 2f 2f 20 70 72 65 2d 61 6c 6c       /// pre-all
8de0: 6f 63 61 74 65 20 73 70 61 63 65 20 66 6f 72 2e  ocate space for.
8df0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
8e00: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
8e10: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 49  internal SQLiteI
8e20: 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20  ndex(..         
8e30: 20 20 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69     int nConstrai
8e40: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
8e50: 20 69 6e 74 20 6e 4f 72 64 65 72 42 79 0d 0a 20   int nOrderBy.. 
8e60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8e70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8e80: 20 20 20 20 20 69 6e 70 75 74 73 20 3d 20 6e 65       inputs = ne
8e90: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70  w SQLiteIndexInp
8ea0: 75 74 73 28 6e 43 6f 6e 73 74 72 61 69 6e 74 2c  uts(nConstraint,
8eb0: 20 6e 4f 72 64 65 72 42 79 29 3b 0d 0a 20 20 20   nOrderBy);..   
8ec0: 20 20 20 20 20 20 20 20 20 6f 75 74 70 75 74 73           outputs
8ed0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 49 6e 64   = new SQLiteInd
8ee0: 65 78 4f 75 74 70 75 74 73 28 6e 43 6f 6e 73 74  exOutputs(nConst
8ef0: 72 61 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  raint);..       
8f00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
8f10: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8f20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8f70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74       #region Int
8f80: 65 72 6e 61 6c 20 4d 61 72 73 68 61 6c 20 48 65  ernal Marshal He
8f90: 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20  lper Methods..  
8fa0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
8fb0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
8fc0: 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61 74 69   Converts a nati
8fd0: 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20  ve pointer to a 
8fe0: 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 69  native sqlite3_i
8ff0: 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74  ndex_info struct
9000: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ure..        ///
9010: 20 69 6e 74 6f 20 61 20 6e 65 77 20 3c 73 65 65   into a new <see
9020: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
9030: 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  ex" /> object in
9040: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
9050: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
9060: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
9070: 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65 78  ram name="pIndex
9080: 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
9090: 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
90a0: 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65  er to the native
90b0: 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
90c0: 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 6f  nfo structure to
90d0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
90e0: 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20 20  nvert...        
90f0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
9100: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
9110: 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a   name="index">..
9120: 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e          /// Upon
9130: 20 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70   success, this p
9140: 61 72 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65  arameter will be
9150: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e   modified to con
9160: 74 61 69 6e 20 74 68 65 20 6e 65 77 6c 79 0d 0a  tain the newly..
9170: 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
9180: 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  ted <see cref="S
9190: 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20 6f  QLiteIndex" /> o
91a0: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d  bject instance..
91b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
91c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 69  aram>..        i
91d0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
91e0: 6f 69 64 20 46 72 6f 6d 49 6e 74 50 74 72 28 0d  oid FromIntPtr(.
91f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
9200: 50 74 72 20 70 49 6e 64 65 78 2c 0d 0a 20 20 20  Ptr pIndex,..   
9210: 20 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c           ref SQL
9220: 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78 0d 0a  iteIndex index..
9230: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9240: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9250: 20 20 20 20 20 20 69 66 20 28 70 49 6e 64 65 78        if (pIndex
9260: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
9270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9280: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
9290: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
92a0: 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  set = 0;....    
92b0: 20 20 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 6e          int nCon
92c0: 73 74 72 61 69 6e 74 20 3d 20 53 51 4c 69 74 65  straint = SQLite
92d0: 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 33  Marshal.ReadInt3
92e0: 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
92f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9300: 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a 65    offset += size
9310: 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  of(int);....    
9320: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
9330: 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53 51 4c  Constraint = SQL
9340: 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
9350: 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
9360: 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
9370: 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20        offset += 
9380: 49 6e 74 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a  IntPtr.Size;....
9390: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
93a0: 6e 4f 72 64 65 72 42 79 20 3d 20 53 51 4c 69 74  nOrderBy = SQLit
93b0: 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  eMarshal.ReadInt
93c0: 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65  32(pIndex, offse
93d0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
93e0: 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a     offset += siz
93f0: 65 6f 66 28 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20  eof(int);....   
9400: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
9410: 70 4f 72 64 65 72 42 79 20 3d 20 53 51 4c 69 74  pOrderBy = SQLit
9420: 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74  eMarshal.ReadInt
9430: 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66 66 73  Ptr(pIndex, offs
9440: 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  et);....        
9450: 20 20 20 20 69 6e 64 65 78 20 3d 20 6e 65 77 20      index = new 
9460: 53 51 4c 69 74 65 49 6e 64 65 78 28 6e 43 6f 6e  SQLiteIndex(nCon
9470: 73 74 72 61 69 6e 74 2c 20 6e 4f 72 64 65 72 42  straint, nOrderB
9480: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
9490: 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 43 6f 6e     int sizeOfCon
94a0: 73 74 72 61 69 6e 74 54 79 70 65 20 3d 20 4d 61  straintType = Ma
94b0: 72 73 68 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70  rshal.SizeOf(typ
94c0: 65 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  eof(..          
94d0: 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
94e0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
94f0: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
9500: 6e 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt));....       
9510: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43       for (int iC
9520: 6f 6e 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69  onstraint = 0; i
9530: 43 6f 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f  Constraint < nCo
9540: 6e 73 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74  nstraint; iConst
9550: 72 61 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20  raint++)..      
9560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9570: 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
9580: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9590: 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74  ite3_index_const
95a0: 72 61 69 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  raint constraint
95b0: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
95c0: 20 20 20 20 20 20 20 20 6e 65 77 20 55 6e 73 61          new Unsa
95d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
95e0: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 63 6f  sqlite3_index_co
95f0: 6e 73 74 72 61 69 6e 74 28 29 3b 0d 0a 0d 0a 20  nstraint();.... 
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
9610: 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 75  arshal.PtrToStru
9620: 63 74 75 72 65 28 53 51 4c 69 74 65 4d 61 72 73  cture(SQLiteMars
9630: 68 61 6c 2e 49 6e 74 50 74 72 46 6f 72 4f 66 66  hal.IntPtrForOff
9640: 73 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  set(..          
9650: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6e 73 74            pConst
9660: 72 61 69 6e 74 2c 20 69 43 6f 6e 73 74 72 61 69  raint, iConstrai
9670: 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74  nt * sizeOfConst
9680: 72 61 69 6e 74 54 79 70 65 29 2c 0d 0a 20 20 20  raintType),..   
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96a0: 20 63 6f 6e 73 74 72 61 69 6e 74 29 3b 0d 0a 0d   constraint);...
96b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96c0: 20 69 6e 64 65 78 2e 49 6e 70 75 74 73 2e 43 6f   index.Inputs.Co
96d0: 6e 73 74 72 61 69 6e 74 73 5b 69 43 6f 6e 73 74  nstraints[iConst
96e0: 72 61 69 6e 74 5d 20 3d 0d 0a 20 20 20 20 20 20  raint] =..      
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
9700: 77 20 53 51 4c 69 74 65 49 6e 64 65 78 43 6f 6e  w SQLiteIndexCon
9710: 73 74 72 61 69 6e 74 28 63 6f 6e 73 74 72 61 69  straint(constrai
9720: 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nt);..          
9730: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9740: 20 20 20 69 6e 74 20 73 69 7a 65 4f 66 4f 72 64     int sizeOfOrd
9750: 65 72 42 79 54 79 70 65 20 3d 20 4d 61 72 73 68  erByType = Marsh
9760: 61 6c 2e 53 69 7a 65 4f 66 28 74 79 70 65 6f 66  al.SizeOf(typeof
9770: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9780: 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
9790: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 69  ethods.sqlite3_i
97a0: 6e 64 65 78 5f 6f 72 64 65 72 62 79 29 29 3b 0d  ndex_orderby));.
97b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
97c0: 6f 72 20 28 69 6e 74 20 69 4f 72 64 65 72 42 79  or (int iOrderBy
97d0: 20 3d 20 30 3b 20 69 4f 72 64 65 72 42 79 20 3c   = 0; iOrderBy <
97e0: 20 6e 4f 72 64 65 72 42 79 3b 20 69 4f 72 64 65   nOrderBy; iOrde
97f0: 72 42 79 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  rBy++)..        
9800: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9810: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
9820: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9830: 65 33 5f 69 6e 64 65 78 5f 6f 72 64 65 72 62 79  e3_index_orderby
9840: 20 6f 72 64 65 72 42 79 20 3d 0d 0a 20 20 20 20   orderBy =..    
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9860: 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
9870: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
9880: 69 6e 64 65 78 5f 6f 72 64 65 72 62 79 28 29 3b  index_orderby();
9890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98a0: 20 20 20 20 4d 61 72 73 68 61 6c 2e 50 74 72 54      Marshal.PtrT
98b0: 6f 53 74 72 75 63 74 75 72 65 28 53 51 4c 69 74  oStructure(SQLit
98c0: 65 4d 61 72 73 68 61 6c 2e 49 6e 74 50 74 72 46  eMarshal.IntPtrF
98d0: 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20 20 20  orOffset(..     
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
98f0: 4f 72 64 65 72 42 79 2c 20 69 4f 72 64 65 72 42  OrderBy, iOrderB
9900: 79 20 2a 20 73 69 7a 65 4f 66 4f 72 64 65 72 42  y * sizeOfOrderB
9910: 79 54 79 70 65 29 2c 20 6f 72 64 65 72 42 79 29  yType), orderBy)
9920: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9930: 20 20 20 20 20 69 6e 64 65 78 2e 49 6e 70 75 74       index.Input
9940: 73 2e 4f 72 64 65 72 42 79 73 5b 69 4f 72 64 65  s.OrderBys[iOrde
9950: 72 42 79 5d 20 3d 0d 0a 20 20 20 20 20 20 20 20  rBy] =..        
9960: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
9970: 53 51 4c 69 74 65 49 6e 64 65 78 4f 72 64 65 72  SQLiteIndexOrder
9980: 42 79 28 6f 72 64 65 72 42 79 29 3b 0d 0a 20 20  By(orderBy);..  
9990: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
99a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
99b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9a00: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
9a10: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
9a20: 50 6f 70 75 6c 61 74 65 73 20 74 68 65 20 6f 75  Populates the ou
9a30: 74 70 75 74 73 20 6f 66 20 61 20 70 72 65 2d 61  tputs of a pre-a
9a40: 6c 6c 6f 63 61 74 65 64 20 6e 61 74 69 76 65 20  llocated native 
9a50: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
9a60: 66 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  fo..        /// 
9a70: 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20  structure using 
9a80: 61 6e 20 65 78 69 73 74 69 6e 67 20 3c 73 65 65  an existing <see
9a90: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 49 6e 64   cref="SQLiteInd
9aa0: 65 78 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20  ex" /> object.. 
9ab0: 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
9ac0: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
9ad0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
9ae0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
9af0: 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a   name="index">..
9b00: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
9b10: 65 78 69 73 74 69 6e 67 20 3c 73 65 65 20 63 72  existing <see cr
9b20: 65 66 3d 22 53 51 4c 69 74 65 49 6e 64 65 78 22  ef="SQLiteIndex"
9b30: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
9b40: 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  nce containing..
9b50: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
9b60: 6f 75 74 70 75 74 20 64 61 74 61 20 74 6f 20 75  output data to u
9b70: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  se...        ///
9b80: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
9b90: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
9ba0: 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20 20  me="pIndex">..  
9bb0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
9bc0: 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
9bd0: 74 68 65 20 70 72 65 2d 61 6c 6c 6f 63 61 74 65  the pre-allocate
9be0: 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  d native sqlite3
9bf0: 5f 69 6e 64 65 78 5f 69 6e 66 6f 0d 0a 20 20 20  _index_info..   
9c00: 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75       /// structu
9c10: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
9c20: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
9c30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
9c40: 69 63 20 76 6f 69 64 20 54 6f 49 6e 74 50 74 72  ic void ToIntPtr
9c50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
9c60: 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
9c70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
9c80: 6e 74 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20  ntPtr pIndex..  
9c90: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
9ca0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9cb0: 20 20 20 20 69 66 20 28 28 69 6e 64 65 78 20 3d      if ((index =
9cc0: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 69 6e 64 65  = null) || (inde
9cd0: 78 2e 49 6e 70 75 74 73 20 3d 3d 20 6e 75 6c 6c  x.Inputs == null
9ce0: 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
9cf0: 20 20 20 20 20 20 28 69 6e 64 65 78 2e 49 6e 70        (index.Inp
9d00: 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73 20  uts.Constraints 
9d10: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20  == null) ||..   
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
9d30: 64 65 78 2e 4f 75 74 70 75 74 73 20 3d 3d 20 6e  dex.Outputs == n
9d40: 75 6c 6c 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ull) ||..       
9d50: 20 20 20 20 20 20 20 20 20 28 69 6e 64 65 78 2e           (index.
9d60: 4f 75 74 70 75 74 73 2e 43 6f 6e 73 74 72 61 69  Outputs.Constrai
9d70: 6e 74 55 73 61 67 65 73 20 3d 3d 20 6e 75 6c 6c  ntUsages == null
9d80: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
9d90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9da0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20     return;..    
9db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9dc0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 49 6e           if (pIn
9dd0: 64 65 78 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  dex == IntPtr.Ze
9de0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
9df0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9e10: 6f 66 66 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20  offset = 0;.... 
9e20: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6e             int n
9e30: 43 6f 6e 73 74 72 61 69 6e 74 20 3d 20 53 51 4c  Constraint = SQL
9e40: 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
9e50: 6e 74 33 32 28 70 49 6e 64 65 78 2c 20 6f 66 66  nt32(pIndex, off
9e60: 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  set);....       
9e70: 20 20 20 20 20 69 66 20 28 6e 43 6f 6e 73 74 72       if (nConstr
9e80: 61 69 6e 74 20 21 3d 20 69 6e 64 65 78 2e 49 6e  aint != index.In
9e90: 70 75 74 73 2e 43 6f 6e 73 74 72 61 69 6e 74 73  puts.Constraints
9ea0: 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20  .Length)..      
9eb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9ec0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9ed0: 20 69 66 20 28 6e 43 6f 6e 73 74 72 61 69 6e 74   if (nConstraint
9ee0: 20 21 3d 20 69 6e 64 65 78 2e 4f 75 74 70 75 74   != index.Output
9ef0: 73 2e 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67  s.ConstraintUsag
9f00: 65 73 2e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20  es.Length)..    
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9f20: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9f30: 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 69 7a     offset += siz
9f40: 65 6f 66 28 69 6e 74 29 20 2b 20 49 6e 74 50 74  eof(int) + IntPt
9f50: 72 2e 53 69 7a 65 20 2b 20 73 69 7a 65 6f 66 28  r.Size + sizeof(
9f60: 69 6e 74 29 20 2b 20 49 6e 74 50 74 72 2e 53 69  int) + IntPtr.Si
9f70: 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ze;....         
9f80: 20 20 20 49 6e 74 50 74 72 20 70 43 6f 6e 73 74     IntPtr pConst
9f90: 72 61 69 6e 74 55 73 61 67 65 20 3d 20 53 51 4c  raintUsage = SQL
9fa0: 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  iteMarshal.ReadI
9fb0: 6e 74 50 74 72 28 70 49 6e 64 65 78 2c 20 6f 66  ntPtr(pIndex, of
9fc0: 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
9fd0: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 4f 66        int sizeOf
9fe0: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 54  ConstraintUsageT
9ff0: 79 70 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69  ype = Marshal.Si
a000: 7a 65 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20  zeOf(typeof(..  
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
a020: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
a030: 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
a040: 63 6f 6e 73 74 72 61 69 6e 74 5f 75 73 61 67 65  constraint_usage
a050: 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
a060: 20 20 20 66 6f 72 20 28 69 6e 74 20 69 43 6f 6e     for (int iCon
a070: 73 74 72 61 69 6e 74 20 3d 20 30 3b 20 69 43 6f  straint = 0; iCo
a080: 6e 73 74 72 61 69 6e 74 20 3c 20 6e 43 6f 6e 73  nstraint < nCons
a090: 74 72 61 69 6e 74 3b 20 69 43 6f 6e 73 74 72 61  traint; iConstra
a0a0: 69 6e 74 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  int++)..        
a0b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a0c0: 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
a0d0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
a0e0: 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
a0f0: 69 6e 74 5f 75 73 61 67 65 20 63 6f 6e 73 74 72  int_usage constr
a100: 61 69 6e 74 55 73 61 67 65 20 3d 0d 0a 20 20 20  aintUsage =..   
a110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a120: 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
a130: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
a140: 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
a150: 74 5f 75 73 61 67 65 28 0d 0a 20 20 20 20 20 20  t_usage(..      
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a170: 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e    index.Outputs.
a180: 43 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73  ConstraintUsages
a190: 5b 69 43 6f 6e 73 74 72 61 69 6e 74 5d 29 3b 0d  [iConstraint]);.
a1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a1b0: 20 20 20 4d 61 72 73 68 61 6c 2e 53 74 72 75 63     Marshal.Struc
a1c0: 74 75 72 65 54 6f 50 74 72 28 0d 0a 20 20 20 20  tureToPtr(..    
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1e0: 63 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 2c  constraintUsage,
a1f0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 49   SQLiteMarshal.I
a200: 6e 74 50 74 72 46 6f 72 4f 66 66 73 65 74 28 0d  ntPtrForOffset(.
a210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a220: 20 20 20 20 20 70 43 6f 6e 73 74 72 61 69 6e 74       pConstraint
a230: 55 73 61 67 65 2c 20 69 43 6f 6e 73 74 72 61 69  Usage, iConstrai
a240: 6e 74 20 2a 20 73 69 7a 65 4f 66 43 6f 6e 73 74  nt * sizeOfConst
a250: 72 61 69 6e 74 55 73 61 67 65 54 79 70 65 29 2c  raintUsageType),
a260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a270: 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 0d        false);...
a280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a290: 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 43   index.Outputs.C
a2a0: 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 73 5b  onstraintUsages[
a2b0: 69 43 6f 6e 73 74 72 61 69 6e 74 5d 20 3d 0d 0a  iConstraint] =..
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2d0: 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65 49 6e      new SQLiteIn
a2e0: 64 65 78 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  dexConstraintUsa
a2f0: 67 65 28 63 6f 6e 73 74 72 61 69 6e 74 55 73 61  ge(constraintUsa
a300: 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
a310: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a320: 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 49 6e 74     offset += Int
a330: 50 74 72 2e 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20  Ptr.Size;....   
a340: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
a350: 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33  arshal.WriteInt3
a360: 32 28 70 49 6e 64 65 78 2c 20 6f 66 66 73 65 74  2(pIndex, offset
a370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a380: 20 20 20 69 6e 64 65 78 2e 4f 75 74 70 75 74 73     index.Outputs
a390: 2e 49 6e 64 65 78 4e 75 6d 62 65 72 29 3b 0d 0a  .IndexNumber);..
a3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
a3b0: 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69  fset += sizeof(i
a3c0: 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
a3d0: 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
a3e0: 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70 49  l.WriteIntPtr(pI
a3f0: 6e 64 65 78 2c 20 6f 66 66 73 65 74 2c 0d 0a 20  ndex, offset,.. 
a400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
a410: 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38  QLiteString.Utf8
a420: 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67  IntPtrFromString
a430: 28 69 6e 64 65 78 2e 4f 75 74 70 75 74 73 2e 49  (index.Outputs.I
a440: 6e 64 65 78 53 74 72 69 6e 67 29 29 3b 0d 0a 0d  ndexString));...
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 66  .            off
a460: 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69  set += IntPtr.Si
a470: 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ze;....         
a480: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
a490: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 6a     // NOTE: We j
a4a0: 75 73 74 20 61 6c 6c 6f 63 61 74 65 64 20 74 68  ust allocated th
a4b0: 65 20 49 6e 64 65 78 53 74 72 69 6e 67 20 66 69  e IndexString fi
a4c0: 65 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  eld; therefore, 
a4d0: 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  we..            
a4e0: 2f 2f 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f  //       need to
a4f0: 20 73 65 74 20 74 68 65 20 4e 65 65 64 54 6f 46   set the NeedToF
a500: 72 65 65 49 6e 64 65 78 53 74 72 69 6e 67 20 66  reeIndexString f
a510: 69 65 6c 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ield to non-zero
a520: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a530: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  /..            S
a540: 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72 69  QLiteMarshal.Wri
a550: 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78 2c 20  teInt32(pIndex, 
a560: 6f 66 66 73 65 74 2c 20 31 29 3b 0d 0a 0d 0a 20  offset, 1);.... 
a570: 20 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65             offse
a580: 74 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29  t += sizeof(int)
a590: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a5a0: 20 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57   SQLiteMarshal.W
a5b0: 72 69 74 65 49 6e 74 33 32 28 70 49 6e 64 65 78  riteInt32(pIndex
a5c0: 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  , offset,..     
a5d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
a5e0: 2e 4f 75 74 70 75 74 73 2e 4f 72 64 65 72 42 79  .Outputs.OrderBy
a5f0: 43 6f 6e 73 75 6d 65 64 29 3b 0d 0a 0d 0a 20 20  Consumed);....  
a600: 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
a610: 20 2b 3d 20 73 69 7a 65 6f 66 28 69 6e 74 29 3b   += sizeof(int);
a620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a630: 53 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 57 72  SQLiteMarshal.Wr
a640: 69 74 65 44 6f 75 62 6c 65 28 70 49 6e 64 65 78  iteDouble(pIndex
a650: 2c 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20 20 20  , offset,..     
a660: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
a670: 2e 4f 75 74 70 75 74 73 2e 45 73 74 69 6d 61 74  .Outputs.Estimat
a680: 65 64 43 6f 73 74 29 3b 0d 0a 20 20 20 20 20 20  edCost);..      
a690: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
a6a0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
a6b0: 20 20 20 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
a700: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
a710: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
a720: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
a730: 20 53 51 4c 69 74 65 49 6e 64 65 78 49 6e 70 75   SQLiteIndexInpu
a740: 74 73 20 69 6e 70 75 74 73 3b 0d 0a 20 20 20 20  ts inputs;..    
a750: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a760: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
a770: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
a780: 4c 69 74 65 49 6e 64 65 78 49 6e 70 75 74 73 22  LiteIndexInputs"
a790: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
a7a0: 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  nce containing..
a7b0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20          /// the 
a7c0: 69 6e 70 75 74 73 20 74 6f 20 74 68 65 20 3c 73  inputs to the <s
a7d0: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
a7e0: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65  ManagedModule.Be
a7f0: 73 74 49 6e 64 65 78 22 20 2f 3e 0d 0a 20 20 20  stIndex" />..   
a800: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
a810: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
a820: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a830: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 49    public SQLiteI
a840: 6e 64 65 78 49 6e 70 75 74 73 20 49 6e 70 75 74  ndexInputs Input
a850: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
a860: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
a870: 72 65 74 75 72 6e 20 69 6e 70 75 74 73 3b 20 7d  return inputs; }
a880: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
a890: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a8e0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
a8f0: 65 20 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74  e SQLiteIndexOut
a900: 70 75 74 73 20 6f 75 74 70 75 74 73 3b 0d 0a 20  puts outputs;.. 
a910: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
a920: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
a930: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
a940: 22 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70  "SQLiteIndexOutp
a950: 75 74 73 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  uts" /> object i
a960: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
a970: 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
a980: 74 68 65 20 6f 75 74 70 75 74 73 20 66 72 6f 6d  the outputs from
a990: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
a9a0: 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f  ISQLiteManagedMo
a9b0: 64 75 6c 65 2e 42 65 73 74 49 6e 64 65 78 22 20  dule.BestIndex" 
a9c0: 2f 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  />..        /// 
a9d0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
a9e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
a9f0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
aa00: 53 51 4c 69 74 65 49 6e 64 65 78 4f 75 74 70 75  SQLiteIndexOutpu
aa10: 74 73 20 4f 75 74 70 75 74 73 0d 0a 20 20 20 20  ts Outputs..    
aa20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aa30: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
aa40: 6f 75 74 70 75 74 73 3b 20 7d 0d 0a 20 20 20 20  outputs; }..    
aa50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
aa60: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d  endregion..    }
aa70: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
aa80: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
aae0: 6f 6e 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c  on SQLiteVirtual
aaf0: 54 61 62 6c 65 20 42 61 73 65 20 43 6c 61 73 73  Table Base Class
ab00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
ab10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
ab20: 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e  s class represen
ab30: 74 73 20 61 20 6d 61 6e 61 67 65 64 20 76 69 72  ts a managed vir
ab40: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
ab50: 6d 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 69  mentation.  It i
ab60: 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f 74 20 73  s..    /// not s
ab70: 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75 6c 64  ealed and should
ab80: 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
ab90: 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72 20 61  base class for a
aba0: 6e 79 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0d  ny user-defined.
abb0: 0a 20 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c  .    /// virtual
abc0: 20 74 61 62 6c 65 20 63 6c 61 73 73 65 73 20 69   table classes i
abd0: 6d 70 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61  mplemented in ma
abe0: 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20  naged code...   
abf0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ac00: 0a 20 20 20 20 70 75 62 6c 69 63 20 63 6c 61 73  .    public clas
ac10: 73 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  s SQLiteVirtualT
ac20: 61 62 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20 20  able :..        
ac30: 20 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76      ISQLiteNativ
ac40: 65 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73  eHandle, IDispos
ac50: 61 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c  able /* NOT SEAL
ac60: 45 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20  ED */..    {..  
ac70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
ac80: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
ac90: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
aca0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
acb0: 2f 2f 2f 20 54 68 65 20 69 6e 64 65 78 20 77 69  /// The index wi
acc0: 74 68 69 6e 20 74 68 65 20 61 72 72 61 79 20 6f  thin the array o
acd0: 66 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64  f strings provid
ace0: 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
acf0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
ad00: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
ad10: 4d 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f  Module.Create" /
ad20: 3e 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f  > and..        /
ad30: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
ad40: 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75  QLiteManagedModu
ad50: 6c 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  le.Connect" /> m
ad60: 65 74 68 6f 64 73 20 63 6f 6e 74 61 69 6e 69 6e  ethods containin
ad70: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
ad80: 2f 2f 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d  // name of the m
ad90: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 69  odule implementi
ada0: 6e 67 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  ng this virtual 
adb0: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
adc0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
add0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ade0: 63 6f 6e 73 74 20 69 6e 74 20 4d 6f 64 75 6c 65  const int Module
adf0: 4e 61 6d 65 49 6e 64 65 78 20 3d 20 30 3b 0d 0a  NameIndex = 0;..
ae00: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
ae60: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ae70: 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 64 65      /// The inde
ae80: 78 20 77 69 74 68 69 6e 20 74 68 65 20 61 72 72  x within the arr
ae90: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 70 72  ay of strings pr
aea0: 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20  ovided to the.. 
aeb0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
aec0: 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e  cref="ISQLiteMan
aed0: 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65 61 74  agedModule.Creat
aee0: 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20 20 20  e" /> and..     
aef0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
af00: 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64  ="ISQLiteManaged
af10: 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74 22 20  Module.Connect" 
af20: 2f 3e 20 6d 65 74 68 6f 64 73 20 63 6f 6e 74 61  /> methods conta
af30: 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  ining the..     
af40: 20 20 20 2f 2f 2f 20 6e 61 6d 65 20 6f 66 20 74     /// name of t
af50: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
af60: 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69 72 74  aining this virt
af70: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
af80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
af90: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
afa0: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 61  ate const int Da
afb0: 74 61 62 61 73 65 4e 61 6d 65 49 6e 64 65 78 20  tabaseNameIndex 
afc0: 3d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 1;....        
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b010: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b020: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
b030: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
b040: 65 20 69 6e 64 65 78 20 77 69 74 68 69 6e 20 74  e index within t
b050: 68 65 20 61 72 72 61 79 20 6f 66 20 73 74 72 69  he array of stri
b060: 6e 67 73 20 70 72 6f 76 69 64 65 64 20 74 6f 20  ngs provided to 
b070: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
b080: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
b090: 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
b0a0: 2e 43 72 65 61 74 65 22 20 2f 3e 20 61 6e 64 0d  .Create" /> and.
b0b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
b0c0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
b0d0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e  anagedModule.Con
b0e0: 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 73  nect" /> methods
b0f0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d   containing the.
b100: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d  .        /// nam
b110: 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  e of the virtual
b120: 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
b130: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
b140: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
b150: 20 63 6f 6e 73 74 20 69 6e 74 20 54 61 62 6c 65   const int Table
b160: 4e 61 6d 65 49 6e 64 65 78 20 3d 20 32 3b 0d 0a  NameIndex = 2;..
b170: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b180: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b1e0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
b1f0: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
b200: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
b210: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
b220: 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
b230: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
b240: 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
b250: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
b260: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
b270: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
b280: 74 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ts">..        //
b290: 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 61  / The original a
b2a0: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
b2b0: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
b2c0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
b2d0: 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
b2e0: 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 43 72 65  anagedModule.Cre
b2f0: 61 74 65 22 20 2f 3e 20 61 6e 64 0d 0a 20 20 20  ate" /> and..   
b300: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
b310: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
b320: 65 64 4d 6f 64 75 6c 65 2e 43 6f 6e 6e 65 63 74  edModule.Connect
b330: 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20  " /> methods... 
b340: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
b350: 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  am>..        pub
b360: 6c 69 63 20 53 51 4c 69 74 65 56 69 72 74 75 61  lic SQLiteVirtua
b370: 6c 54 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  lTable(..       
b380: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
b390: 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20 20 20  guments..       
b3a0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b3b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
b3c0: 68 69 73 2e 61 72 67 75 6d 65 6e 74 73 20 3d 20  his.arguments = 
b3d0: 61 72 67 75 6d 65 6e 74 73 3b 0d 0a 20 20 20 20  arguments;..    
b3e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
b3f0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
b400: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b450: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
b460: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
b470: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
b480: 74 65 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 75  te string[] argu
b490: 6d 65 6e 74 73 3b 0d 0a 20 20 20 20 20 20 20 20  ments;..        
b4a0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b4b0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6f         /// The o
b4c0: 72 69 67 69 6e 61 6c 20 61 72 72 61 79 20 6f 66  riginal array of
b4d0: 20 73 74 72 69 6e 67 73 20 70 72 6f 76 69 64 65   strings provide
b4e0: 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  d to the..      
b4f0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
b500: 22 49 53 51 4c 69 74 65 4d 61 6e 61 67 65 64 4d  "ISQLiteManagedM
b510: 6f 64 75 6c 65 2e 43 72 65 61 74 65 22 20 2f 3e  odule.Create" />
b520: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f   and..        //
b530: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
b540: 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
b550: 65 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  e.Connect" /> me
b560: 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20 20  thods...        
b570: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
b580: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
b590: 69 72 74 75 61 6c 20 73 74 72 69 6e 67 5b 5d 20  irtual string[] 
b5a0: 41 72 67 75 6d 65 6e 74 73 0d 0a 20 20 20 20 20  Arguments..     
b5b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b5c0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
b5d0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
b5e0: 61 72 67 75 6d 65 6e 74 73 3b 20 7d 0d 0a 20 20  arguments; }..  
b5f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b600: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b650: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
b660: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
b670: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
b680: 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
b690: 74 69 6e 67 20 74 68 69 73 20 76 69 72 74 75 61  ting this virtua
b6a0: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
b6b0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
b6c0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
b6d0: 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67 20   virtual string 
b6e0: 4d 6f 64 75 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  ModuleName..    
b6f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b700: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
b710: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b720: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
b730: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
b740: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b750: 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  g[] arguments = 
b760: 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20  Arguments;....  
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b780: 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20   ((arguments != 
b790: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61                (a
b7b0: 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20  rguments.Length 
b7c0: 3e 20 4d 6f 64 75 6c 65 4e 61 6d 65 49 6e 64 65  > ModuleNameInde
b7d0: 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x))..           
b7e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b800: 72 6e 20 61 72 67 75 6d 65 6e 74 73 5b 4d 6f 64  rn arguments[Mod
b810: 75 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a  uleNameIndex];..
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b830: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b840: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
b850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b8a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b8b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b900: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
b910: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
b920: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
b930: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
b940: 61 69 6e 69 6e 67 20 74 68 69 73 20 76 69 72 74  aining this virt
b950: 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
b960: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
b970: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
b980: 69 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e  ic virtual strin
b990: 67 20 44 61 74 61 62 61 73 65 4e 61 6d 65 0d 0a  g DatabaseName..
b9a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b9b0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
b9c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b9d0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
b9e0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ba00: 74 72 69 6e 67 5b 5d 20 61 72 67 75 6d 65 6e 74  tring[] argument
ba10: 73 20 3d 20 41 72 67 75 6d 65 6e 74 73 3b 0d 0a  s = Arguments;..
ba20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba30: 20 20 69 66 20 28 28 61 72 67 75 6d 65 6e 74 73    if ((arguments
ba40: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 20 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e    (arguments.Len
ba70: 67 74 68 20 3e 20 44 61 74 61 62 61 73 65 4e 61  gth > DatabaseNa
ba80: 6d 65 49 6e 64 65 78 29 29 0d 0a 20 20 20 20 20  meIndex))..     
ba90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bab0: 20 20 72 65 74 75 72 6e 20 61 72 67 75 6d 65 6e    return argumen
bac0: 74 73 5b 44 61 74 61 62 61 73 65 4e 61 6d 65 49  ts[DatabaseNameI
bad0: 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
bae0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
baf0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
bb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bb20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
bb30: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
bb40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
bb50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bb60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
bbc0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
bbd0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
bbe0: 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  ame of the virtu
bbf0: 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
bc00: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
bc10: 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
bc20: 63 20 76 69 72 74 75 61 6c 20 73 74 72 69 6e 67  c virtual string
bc30: 20 54 61 62 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   TableName..    
bc40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bc50: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
bc60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bc70: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
bc80: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
bc90: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
bca0: 67 5b 5d 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  g[] arguments = 
bcb0: 41 72 67 75 6d 65 6e 74 73 3b 0d 0a 0d 0a 20 20  Arguments;....  
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
bcd0: 20 28 28 61 72 67 75 6d 65 6e 74 73 20 21 3d 20   ((arguments != 
bce0: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61                (a
bd00: 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67 74 68 20  rguments.Length 
bd10: 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78  > TableNameIndex
bd20: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
bd30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bd40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
bd50: 6e 20 61 72 67 75 6d 65 6e 74 73 5b 54 61 62 6c  n arguments[Tabl
bd60: 65 4e 61 6d 65 49 6e 64 65 78 5d 3b 0d 0a 20 20  eNameIndex];..  
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
bd80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd90: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
bda0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bdc0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
bde0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
bdf0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
be00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
be10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
be60: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
be70: 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
be80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
be90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
bea0: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
beb0: 20 72 65 63 6f 72 64 20 74 68 65 20 72 65 6e 61   record the rena
bec0: 6d 69 6e 67 20 6f 66 20 74 68 65 20 76 69 72 74  ming of the virt
bed0: 75 61 6c 20 74 61 62 6c 65 20 61 73 73 6f 63 69  ual table associ
bee0: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
bef0: 2f 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65  / with this obje
bf00: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
bf10: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
bf20: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
bf30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e  / <param name="n
bf40: 61 6d 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ame">..        /
bf50: 2f 2f 20 54 68 65 20 6e 65 77 20 6e 61 6d 65 20  // The new name 
bf60: 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
bf70: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
bf80: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
bf90: 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
bfa0: 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
bfb0: 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73   Non-zero upon s
bfc0: 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
bfd0: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
bfe0: 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
bff0: 76 69 72 74 75 61 6c 20 62 6f 6f 6c 20 52 65 6e  virtual bool Ren
c000: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
c010: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20    string name.. 
c020: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
c030: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c040: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
c050: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
c060: 20 20 20 20 20 69 66 20 28 28 61 72 67 75 6d 65       if ((argume
c070: 6e 74 73 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d  nts != null) &&.
c080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c090: 20 28 61 72 67 75 6d 65 6e 74 73 2e 4c 65 6e 67   (arguments.Leng
c0a0: 74 68 20 3e 20 54 61 62 6c 65 4e 61 6d 65 49 6e  th > TableNameIn
c0b0: 64 65 78 29 29 0d 0a 20 20 20 20 20 20 20 20 20  dex))..         
c0c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c0d0: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 73 5b        arguments[
c0e0: 54 61 62 6c 65 4e 61 6d 65 49 6e 64 65 78 5d 20  TableNameIndex] 
c0f0: 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  = name;..       
c100: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
c110: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
c120: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c130: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
c140: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
c150: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
c160: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
c1c0: 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61  region ISQLiteNa
c1d0: 74 69 76 65 48 61 6e 64 6c 65 20 4d 65 6d 62 65  tiveHandle Membe
c1e0: 72 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  rs..        priv
c1f0: 61 74 65 20 49 6e 74 50 74 72 20 6e 61 74 69 76  ate IntPtr nativ
c200: 65 48 61 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20  eHandle;..      
c210: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
c220: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74  .        /// Ret
c230: 75 72 6e 73 20 74 68 65 20 75 6e 64 65 72 6c 79  urns the underly
c240: 69 6e 67 20 53 51 4c 69 74 65 20 6e 61 74 69 76  ing SQLite nativ
c250: 65 20 68 61 6e 64 6c 65 20 61 73 73 6f 63 69 61  e handle associa
c260: 74 65 64 20 77 69 74 68 20 74 68 69 73 0d 0a 20  ted with this.. 
c270: 20 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63         /// objec
c280: 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  t instance...   
c290: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
c2a0: 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ry>..        pub
c2b0: 6c 69 63 20 76 69 72 74 75 61 6c 20 49 6e 74 50  lic virtual IntP
c2c0: 74 72 20 4e 61 74 69 76 65 48 61 6e 64 6c 65 0d  tr NativeHandle.
c2d0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c2e0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
c2f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
c300: 65 74 75 72 6e 20 6e 61 74 69 76 65 48 61 6e 64  eturn nativeHand
c310: 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  le; }..         
c320: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74 20     internal set 
c330: 7b 20 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 3d  { nativeHandle =
c340: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
c350: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
c360: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
c370: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
c3c0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
c3d0: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
c3e0: 72 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  rs..        /// 
c3f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
c400: 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20     /// Disposes 
c410: 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  of this object i
c420: 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
c430: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
c440: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
c450: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
c460: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
c470: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
c480: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
c490: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
c4a0: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
c4b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
c4c0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c4d0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
c4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
c530: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
c540: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
c550: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
c560: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
c570: 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ;..        /// <
c580: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
c590: 20 20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20    /// Throws an 
c5a0: 3c 73 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63  <see cref="Objec
c5b0: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
c5c0: 6f 6e 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f  on" /> if this o
c5d0: 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f  bject..        /
c5e0: 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61 73 20  // instance has 
c5f0: 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a  been disposed...
c600: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
c610: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
c620: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
c630: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
c640: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
c650: 20 20 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f    {..#if THROW_O
c660: 4e 5f 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20  N_DISPOSED..    
c670: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
c680: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
c690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c6a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
c6b0: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
c6c0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
c6e0: 70 65 6f 66 28 53 51 4c 69 74 65 56 69 72 74 75  peof(SQLiteVirtu
c6f0: 61 6c 54 61 62 6c 65 29 2e 4e 61 6d 65 29 3b 0d  alTable).Name);.
c700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c710: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
c720: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
c730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c770: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c780: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
c790: 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f         /// Dispo
c7a0: 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  ses of this obje
c7b0: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
c7c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c7d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
c7e0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
c7f0: 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20 20 20 20  isposing">..    
c800: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
c810: 20 69 66 20 74 68 69 73 20 6d 65 74 68 6f 64 20   if this method 
c820: 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20  is being called 
c830: 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20  from the..      
c840: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
c850: 22 44 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d  "Dispose()" /> m
c860: 65 74 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20  ethod.  Zero if 
c870: 74 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62  this method is b
c880: 65 69 6e 67 20 63 61 6c 6c 65 64 0d 0a 20 20 20  eing called..   
c890: 20 20 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68       /// from th
c8a0: 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a 20 20  e finalizer...  
c8b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
c8c0: 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  m>..        prot
c8d0: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f  ected virtual vo
c8e0: 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c 20  id Dispose(bool 
c8f0: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
c900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c910: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
c920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c940: 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69 6e    //if (disposin
c950: 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
c960: 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20      //{..       
c970: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
c9b0: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 20 64 69       //    // di
c9c0: 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65  spose managed re
c9d0: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
c9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c9f0: 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
ca00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d               //}
ca30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ca40: 20 20 20 20 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 0d 0a 20 20 20 20  //////////..    
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72              // r
ca80: 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64  elease unmanaged
ca90: 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e   resources here.
caa0: 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cab0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
caf0: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
cb10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
cb20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
cb30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
cb80: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
cb90: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
cba0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
cbb0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
cbc0: 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73  / Finalizes this
cbd0: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
cbe0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
cbf0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
cc00: 20 20 20 7e 53 51 4c 69 74 65 56 69 72 74 75 61     ~SQLiteVirtua
cc10: 6c 54 61 62 6c 65 28 29 0d 0a 20 20 20 20 20 20  lTable()..      
cc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cc30: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
cc40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
cc50: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
cc60: 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
cc70: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
cc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20  /////////....   
ccd0: 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74 65 56   #region SQLiteV
cce0: 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f  irtualTableCurso
ccf0: 72 20 42 61 73 65 20 43 6c 61 73 73 0d 0a 20 20  r Base Class..  
cd00: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
cd10: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c  .    /// This cl
cd20: 61 73 73 20 72 65 70 72 65 73 65 6e 74 73 20 61  ass represents a
cd30: 20 6d 61 6e 61 67 65 64 20 76 69 72 74 75 61 6c   managed virtual
cd40: 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 6d   table cursor im
cd50: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20  plementation... 
cd60: 20 20 20 2f 2f 2f 20 49 74 20 69 73 20 6e 6f 74     /// It is not
cd70: 20 73 65 61 6c 65 64 20 61 6e 64 20 73 68 6f 75   sealed and shou
cd80: 6c 64 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ld be used as th
cd90: 65 20 62 61 73 65 20 63 6c 61 73 73 20 66 6f 72  e base class for
cda0: 20 61 6e 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73   any..    /// us
cdb0: 65 72 2d 64 65 66 69 6e 65 64 20 76 69 72 74 75  er-defined virtu
cdc0: 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
cdd0: 63 6c 61 73 73 65 73 20 69 6d 70 6c 65 6d 65 6e  classes implemen
cde0: 74 65 64 20 69 6e 20 6d 61 6e 61 67 65 64 20 63  ted in managed c
cdf0: 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
ce00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
ce10: 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  blic class SQLit
ce20: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72  eVirtualTableCur
ce30: 73 6f 72 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  sor :..         
ce40: 20 20 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65     ISQLiteNative
ce50: 48 61 6e 64 6c 65 2c 20 49 44 69 73 70 6f 73 61  Handle, IDisposa
ce60: 62 6c 65 20 2f 2a 20 4e 4f 54 20 53 45 41 4c 45  ble /* NOT SEALE
ce70: 44 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  D */..    {..   
ce80: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
ce90: 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
cea0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
ceb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
cec0: 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73 20   /// Constructs 
ced0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
cee0: 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
cef0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
cf00: 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
cf10: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62  <param name="tab
cf20: 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  le">..        //
cf30: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
cf40: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
cf50: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
cf60: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
cf70: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
cf80: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
cf90: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
cfa0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
cfb0: 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
cfc0: 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
cfd0: 62 6c 65 43 75 72 73 6f 72 28 0d 0a 20 20 20 20  bleCursor(..    
cfe0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
cff0: 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
d000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
d010: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d020: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62          this.tab
d030: 6c 65 20 3d 20 74 61 62 6c 65 3b 0d 0a 20 20 20  le = table;..   
d040: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d050: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
d060: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d080: 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
d0b0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
d0c0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
d0d0: 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
d0e0: 61 74 65 20 53 51 4c 69 74 65 56 69 72 74 75 61  ate SQLiteVirtua
d0f0: 6c 54 61 62 6c 65 20 74 61 62 6c 65 3b 0d 0a 20  lTable table;.. 
d100: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
d110: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
d120: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
d130: 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61  "SQLiteVirtualTa
d140: 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ble" /> object i
d150: 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
d160: 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
d170: 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
d180: 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
d190: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
d1a0: 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  y>..        publ
d1b0: 69 63 20 76 69 72 74 75 61 6c 20 53 51 4c 69 74  ic virtual SQLit
d1c0: 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 54 61  eVirtualTable Ta
d1d0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ble..        {..
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d1f0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
d200: 29 3b 20 72 65 74 75 72 6e 20 74 61 62 6c 65 3b  ); return table;
d210: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
d220: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
d230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
d280: 61 74 65 20 69 6e 74 20 69 6e 64 65 78 4e 75 6d  ate int indexNum
d290: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ber;..        //
d2a0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d2b0: 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
d2c0: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
d2d0: 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
d2e0: 65 64 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20  ed index.  This 
d2f0: 76 61 6c 75 65 20 77 69 6c 6c 0d 0a 20 20 20 20  value will..    
d300: 20 20 20 20 2f 2f 2f 20 62 65 20 73 65 74 20 76      /// be set v
d310: 69 61 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ia the <see cref
d320: 3d 22 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74  ="Filter" /> met
d330: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
d340: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d350: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
d360: 74 75 61 6c 20 69 6e 74 20 49 6e 64 65 78 4e 75  tual int IndexNu
d370: 6d 62 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d  mber..        {.
d380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
d390: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
d3a0: 28 29 3b 20 72 65 74 75 72 6e 20 69 6e 64 65 78  (); return index
d3b0: 4e 75 6d 62 65 72 3b 20 7d 0d 0a 20 20 20 20 20  Number; }..     
d3c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d420: 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
d430: 67 20 69 6e 64 65 78 53 74 72 69 6e 67 3b 0d 0a  g indexString;..
d440: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
d450: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
d460: 2f 2f 20 53 74 72 69 6e 67 20 75 73 65 64 20 74  // String used t
d470: 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20  o help identify 
d480: 74 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64  the selected ind
d490: 65 78 2e 20 20 54 68 69 73 20 76 61 6c 75 65 20  ex.  This value 
d4a0: 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  will..        //
d4b0: 2f 20 62 65 20 73 65 74 20 76 69 61 20 74 68 65  / be set via the
d4c0: 20 3c 73 65 65 20 63 72 65 66 3d 22 46 69 6c 74   <see cref="Filt
d4d0: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  er" /> method...
d4e0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
d4f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
d500: 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c 20 73  public virtual s
d510: 74 72 69 6e 67 20 49 6e 64 65 78 53 74 72 69 6e  tring IndexStrin
d520: 67 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  g..        {..  
d530: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
d540: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
d550: 20 72 65 74 75 72 6e 20 69 6e 64 65 78 53 74 72   return indexStr
d560: 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ing; }..        
d570: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
d5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d5d0: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 56 61  private SQLiteVa
d5e0: 6c 75 65 5b 5d 20 76 61 6c 75 65 73 3b 0d 0a 20  lue[] values;.. 
d5f0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
d600: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
d610: 2f 20 54 68 65 20 76 61 6c 75 65 73 20 75 73 65  / The values use
d620: 64 20 74 6f 20 66 69 6c 74 65 72 20 74 68 65 20  d to filter the 
d630: 72 6f 77 73 20 72 65 74 75 72 6e 65 64 20 76 69  rows returned vi
d640: 61 20 74 68 69 73 20 63 75 72 73 6f 72 20 6f 62  a this cursor ob
d650: 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ject..        //
d660: 2f 20 69 6e 73 74 61 6e 63 65 2e 20 20 54 68 69  / instance.  Thi
d670: 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  s value will be 
d680: 73 65 74 20 76 69 61 20 74 68 65 20 3c 73 65 65  set via the <see
d690: 20 63 72 65 66 3d 22 46 69 6c 74 65 72 22 20 2f   cref="Filter" /
d6a0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d  >..        /// m
d6b0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
d6c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d6d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
d6e0: 69 72 74 75 61 6c 20 53 51 4c 69 74 65 56 61 6c  irtual SQLiteVal
d6f0: 75 65 5b 5d 20 56 61 6c 75 65 73 0d 0a 20 20 20  ue[] Values..   
d700: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d710: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
d720: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
d730: 6e 20 76 61 6c 75 65 73 3b 20 7d 0d 0a 20 20 20  n values; }..   
d740: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d750: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
d760: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d7b0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
d7c0: 20 50 72 6f 74 65 63 74 65 64 20 4d 65 74 68 6f   Protected Metho
d7d0: 64 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ds..        /// 
d7e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
d7f0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
d800: 74 6f 20 70 65 72 73 69 73 74 20 74 68 65 20 73  to persist the s
d810: 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
d820: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
d830: 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20   /> object..    
d840: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
d850: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 61  s in order to ma
d860: 6b 65 20 74 68 65 6d 20 61 76 61 69 6c 61 62 6c  ke them availabl
d870: 65 20 61 66 74 65 72 20 74 68 65 0d 0a 20 20 20  e after the..   
d880: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
d890: 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61 67  ef="ISQLiteManag
d8a0: 65 64 4d 6f 64 75 6c 65 2e 46 69 6c 74 65 72 22  edModule.Filter"
d8b0: 20 2f 3e 20 6d 65 74 68 6f 64 20 72 65 74 75 72   /> method retur
d8c0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns...        ///
d8d0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d8e0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
d8f0: 6e 61 6d 65 3d 22 76 61 6c 75 65 73 22 3e 0d 0a  name="values">..
d900: 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
d910: 61 72 72 61 79 20 6f 66 20 3c 73 65 65 20 63 72  array of <see cr
d920: 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75 65 22  ef="SQLiteValue"
d930: 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
d940: 6e 63 65 73 20 74 6f 20 62 65 0d 0a 20 20 20 20  nces to be..    
d950: 20 20 20 20 2f 2f 2f 20 70 65 72 73 69 73 74 65      /// persiste
d960: 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
d970: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
d980: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
d990: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
d9a0: 20 6e 75 6d 62 65 72 20 6f 66 20 3c 73 65 65 20   number of <see 
d9b0: 63 72 65 66 3d 22 53 51 4c 69 74 65 56 61 6c 75  cref="SQLiteValu
d9c0: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
d9d0: 74 61 6e 63 65 73 20 74 68 61 74 20 77 65 72 65  tances that were
d9e0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
d9f0: 63 63 65 73 73 66 75 6c 6c 79 20 70 65 72 73 69  ccessfully persi
da00: 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sted...        /
da10: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
da20: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
da30: 20 76 69 72 74 75 61 6c 20 69 6e 74 20 54 72 79   virtual int Try
da40: 50 65 72 73 69 73 74 56 61 6c 75 65 73 28 0d 0a  PersistValues(..
da50: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
da60: 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75 65 73  teValue[] values
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
da80: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
da90: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75          int resu
daa0: 6c 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  lt = 0;....     
dab0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
dac0: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
dad0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dae0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
daf0: 63 68 20 28 53 51 4c 69 74 65 56 61 6c 75 65 20  ch (SQLiteValue 
db00: 76 61 6c 75 65 20 69 6e 20 76 61 6c 75 65 73 29  value in values)
db10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
db30: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
db40: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
db70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db80: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 2e        if (value.
db90: 50 65 72 73 69 73 74 28 29 29 0d 0a 20 20 20 20  Persist())..    
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 20 72 65 73 75 6c 74 2b 2b 3b 0d 0a 20      result++;.. 
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
dbd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
dbe0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
dbf0: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
dc00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
dc10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
dc20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
dc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
dc70: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
dc80: 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
dc90: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  s..        /// <
dca0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
dcb0: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
dcc0: 64 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c  d should normall
dcd0: 79 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  y be used by the
dce0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
dcf0: 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
dd00: 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 46 69  ManagedModule.Fi
dd10: 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20  lter" /> method 
dd20: 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a 20 20 20  in order to..   
dd30: 20 20 20 20 20 2f 2f 2f 20 70 65 72 66 6f 72 6d       /// perform
dd40: 20 66 69 6c 74 65 72 69 6e 67 20 6f 66 20 74 68   filtering of th
dd50: 65 20 72 65 73 75 6c 74 20 72 6f 77 73 20 61 6e  e result rows an
dd60: 64 2f 6f 72 20 74 6f 20 72 65 63 6f 72 64 20 74  d/or to record t
dd70: 68 65 20 66 69 6c 74 65 72 69 6e 67 0d 0a 20 20  he filtering..  
dd80: 20 20 20 20 20 20 2f 2f 2f 20 63 72 69 74 65 72        /// criter
dd90: 69 61 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ia provided by t
dda0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
ddb0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
ddc0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
ddd0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
dde0: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 4e  ram name="indexN
ddf0: 75 6d 62 65 72 22 3e 0d 0a 20 20 20 20 20 20 20  umber">..       
de00: 20 2f 2f 2f 20 4e 75 6d 62 65 72 20 75 73 65 64   /// Number used
de10: 20 74 6f 20 68 65 6c 70 20 69 64 65 6e 74 69 66   to help identif
de20: 79 20 74 68 65 20 73 65 6c 65 63 74 65 64 20 69  y the selected i
de30: 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ndex...        /
de40: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
de50: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
de60: 6e 61 6d 65 3d 22 69 6e 64 65 78 53 74 72 69 6e  name="indexStrin
de70: 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  g">..        ///
de80: 20 53 74 72 69 6e 67 20 75 73 65 64 20 74 6f 20   String used to 
de90: 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
dea0: 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
deb0: 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
dec0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
ded0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
dee0: 3d 22 76 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20  ="values">..    
def0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
df00: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
df10: 20 74 6f 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   to each column 
df20: 69 6e 20 74 68 65 20 73 65 6c 65 63 74 65 64 20  in the selected 
df30: 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20  index...        
df40: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
df50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 69 72        public vir
df60: 74 75 61 6c 20 76 6f 69 64 20 46 69 6c 74 65 72  tual void Filter
df70: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  (..            i
df80: 6e 74 20 69 6e 64 65 78 4e 75 6d 62 65 72 2c 0d  nt indexNumber,.
df90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
dfa0: 69 6e 67 20 69 6e 64 65 78 53 74 72 69 6e 67 2c  ing indexString,
dfb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
dfc0: 4c 69 74 65 56 61 6c 75 65 5b 5d 20 76 61 6c 75  LiteValue[] valu
dfd0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
dfe0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
dff0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
e000: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
e010: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 76            if ((v
e020: 61 6c 75 65 73 20 21 3d 20 6e 75 6c 6c 29 20 26  alues != null) &
e030: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
e040: 20 20 20 28 54 72 79 50 65 72 73 69 73 74 56 61     (TryPersistVa
e050: 6c 75 65 73 28 76 61 6c 75 65 73 29 20 21 3d 20  lues(values) != 
e060: 76 61 6c 75 65 73 2e 4c 65 6e 67 74 68 29 29 0d  values.Length)).
e070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
e0a0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 22 66 61 69 6c 65 64 20 74 6f 20 70 65 72 73 69  "failed to persi
e0d0: 73 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  st one or more v
e0e0: 61 6c 75 65 73 22 29 3b 0d 0a 20 20 20 20 20 20  alues");..      
e0f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e100: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 64 65         this.inde
e110: 78 4e 75 6d 62 65 72 20 3d 20 69 6e 64 65 78 4e  xNumber = indexN
e120: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
e130: 20 20 20 20 74 68 69 73 2e 69 6e 64 65 78 53 74      this.indexSt
e140: 72 69 6e 67 20 3d 20 69 6e 64 65 78 53 74 72 69  ring = indexStri
e150: 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng;..           
e160: 20 74 68 69 73 2e 76 61 6c 75 65 73 20 3d 20 76   this.values = v
e170: 61 6c 75 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  alues;..        
e180: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e190: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e1a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e1f0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c      #region ISQL
e200: 69 74 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20  iteNativeHandle 
e210: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
e220: 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
e230: 6e 61 74 69 76 65 48 61 6e 64 6c 65 3b 0d 0a 20  nativeHandle;.. 
e240: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
e250: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
e260: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 75 6e  / Returns the un
e270: 64 65 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 20  derlying SQLite 
e280: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 61 73  native handle as
e290: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
e2a0: 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
e2b0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 2e  object instance.
e2c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
e2d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e2e0: 20 20 70 75 62 6c 69 63 20 76 69 72 74 75 61 6c    public virtual
e2f0: 20 49 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61   IntPtr NativeHa
e300: 6e 64 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ndle..        {.
e310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74  .            get
e320: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
e330: 28 29 3b 20 72 65 74 75 72 6e 20 6e 61 74 69 76  (); return nativ
e340: 65 48 61 6e 64 6c 65 3b 20 7d 0d 0a 20 20 20 20  eHandle; }..    
e350: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
e360: 20 73 65 74 20 7b 20 6e 61 74 69 76 65 48 61 6e   set { nativeHan
e370: 64 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  dle = value; }..
e380: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e390: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e3a0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e400: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
e410: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
e420: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e430: 20 20 20 20 20 20 20 20 2f 2f 2f 20 44 69 73 70          /// Disp
e440: 6f 73 65 73 20 6f 66 20 74 68 69 73 20 6f 62 6a  oses of this obj
e450: 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
e460: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
e470: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
e480: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
e490: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  se()..        {.
e4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73  .            Dis
e4b0: 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20  pose(true);..   
e4c0: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
e4d0: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
e4e0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  s);..        }..
e4f0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
e500: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e550: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e560: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
e570: 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
e580: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
e590: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
e5a0: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
e5b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e5c0: 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 72 6f 77         /// Throw
e5d0: 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
e5e0: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
e5f0: 63 65 70 74 69 6f 6e 22 20 2f 3e 20 69 66 20 74  ception" /> if t
e600: 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20 20 20 20  his object..    
e610: 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65      /// instance
e620: 20 68 61 73 20 62 65 65 6e 20 64 69 73 70 6f 73   has been dispos
e630: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
e640: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
e650: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
e660: 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  d CheckDisposed(
e670: 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
e680: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 54 48         {..#if TH
e690: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
e6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
e6b0: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
e6c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e6d0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
e6e0: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
e6f0: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  sedException(.. 
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65     typeof(SQLite
e720: 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
e730: 6f 72 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  or).Name);..    
e740: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
e750: 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  f..        }....
e760: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e7b0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
e7c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e7d0: 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65 73 20 6f    /// Disposes o
e7e0: 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 6e  f this object in
e7f0: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
e800: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e810: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
e820: 72 61 6d 20 6e 61 6d 65 3d 22 64 69 73 70 6f 73  ram name="dispos
e830: 69 6e 67 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ing">..        /
e840: 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
e850: 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65  his method is be
e860: 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ing called from 
e870: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
e880: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 69 73 70   <see cref="Disp
e890: 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74 68 6f 64  ose()" /> method
e8a0: 2e 20 20 5a 65 72 6f 20 69 66 20 74 68 69 73 20  .  Zero if this 
e8b0: 6d 65 74 68 6f 64 20 69 73 20 62 65 69 6e 67 20  method is being 
e8c0: 63 61 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  called..        
e8d0: 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20 66 69 6e  /// from the fin
e8e0: 61 6c 69 7a 65 72 2e 0d 0a 20 20 20 20 20 20 20  alizer...       
e8f0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
e900: 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64         protected
e910: 20 76 69 72 74 75 61 6c 20 76 6f 69 64 20 44 69   virtual void Di
e920: 73 70 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f  spose(bool dispo
e930: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 7b  sing)..        {
e940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
e950: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
e960: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 69               //i
e980: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e9a0: 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  /{..            
e9b0: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65  //    // dispose
ea00: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
ea10: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
ea30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea50: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
ea60: 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20          //}.... 
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
eab0: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
eac0: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
ead0: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eb20: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
eb30: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
eb40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
eb50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
eb60: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
eb70: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
eb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ebc0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
ebd0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
ebe0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
ebf0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 69 6e  .        /// Fin
ec00: 61 6c 69 7a 65 73 20 74 68 69 73 20 6f 62 6a 65  alizes this obje
ec10: 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  ct instance...  
ec20: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
ec30: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 7e 53  ary>..        ~S
ec40: 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
ec50: 65 43 75 72 73 6f 72 28 29 0d 0a 20 20 20 20 20  eCursor()..     
ec60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ec70: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
ec80: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
ec90: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
eca0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
ecb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ece0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ed10: 20 20 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74    #region ISQLit
ed20: 65 4e 61 74 69 76 65 48 61 6e 64 6c 65 20 49 6e  eNativeHandle In
ed30: 74 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f  terface..    ///
ed40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
ed50: 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61  /// This interfa
ed60: 63 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  ce represents a 
ed70: 6e 61 74 69 76 65 20 68 61 6e 64 6c 65 20 70 72  native handle pr
ed80: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 53 51  ovided by the SQ
ed90: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 2f  Lite core..    /
eda0: 2f 2f 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  // library...   
edb0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
edc0: 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 65  .    public inte
edd0: 72 66 61 63 65 20 49 53 51 4c 69 74 65 4e 61 74  rface ISQLiteNat
ede0: 69 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 7b  iveHandle..    {
edf0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
ee00: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
ee10: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
ee20: 68 61 6e 64 6c 65 20 76 61 6c 75 65 2e 0d 0a 20  handle value... 
ee30: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
ee40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 49  mary>..        I
ee50: 6e 74 50 74 72 20 4e 61 74 69 76 65 48 61 6e 64  ntPtr NativeHand
ee60: 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  le { get; }..   
ee70: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
ee80: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
eee0: 67 69 6f 6e 20 49 53 51 4c 69 74 65 4e 61 74 69  gion ISQLiteNati
eef0: 76 65 4d 6f 64 75 6c 65 20 49 6e 74 65 72 66 61  veModule Interfa
ef00: 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ce..    /// <sum
ef10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
ef20: 68 69 73 20 69 6e 74 65 72 66 61 63 65 20 72 65  his interface re
ef30: 70 72 65 73 65 6e 74 73 20 61 20 76 69 72 74 75  presents a virtu
ef40: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
ef50: 6e 74 61 74 69 6f 6e 20 77 72 69 74 74 65 6e 20  ntation written 
ef60: 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  in..    /// nati
ef70: 76 65 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f  ve code...    //
ef80: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ef90: 20 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61    public interfa
efa0: 63 65 20 49 53 51 4c 69 74 65 4e 61 74 69 76 65  ce ISQLiteNative
efb0: 4d 6f 64 75 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20  Module..    {.. 
efc0: 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
efd0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
efe0: 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
eff0: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
f000: 64 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  d is called to c
f010: 72 65 61 74 65 20 61 20 6e 65 77 20 69 6e 73 74  reate a new inst
f020: 61 6e 63 65 20 6f 66 20 61 20 76 69 72 74 75 61  ance of a virtua
f030: 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
f040: 20 2f 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65   /// in response
f050: 20 74 6f 20 61 20 43 52 45 41 54 45 20 56 49 52   to a CREATE VIR
f060: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
f070: 6d 65 6e 74 2e 20 54 68 65 20 64 62 20 70 61 72  ment. The db par
f080: 61 6d 65 74 65 72 0d 0a 20 20 20 20 20 20 20 20  ameter..        
f090: 2f 2f 2f 20 69 73 20 61 20 70 6f 69 6e 74 65 72  /// is a pointer
f0a0: 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20 64   to the SQLite d
f0b0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
f0c0: 6f 6e 20 74 68 61 74 20 69 73 20 65 78 65 63 75  on that is execu
f0d0: 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ting..        //
f0e0: 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
f0f0: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
f100: 6d 65 6e 74 2e 20 54 68 65 20 70 41 75 78 20 61  ment. The pAux a
f110: 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 63  rgument is the c
f120: 6f 70 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  opy..        ///
f130: 20 6f 66 20 74 68 65 20 63 6c 69 65 6e 74 20 64   of the client d
f140: 61 74 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74  ata pointer that
f150: 20 77 61 73 20 74 68 65 20 66 6f 75 72 74 68 20   was the fourth 
f160: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0d  argument to the.
f170: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
f180: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
f190: 6c 65 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  le() or sqlite3_
f1a0: 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32  create_module_v2
f1b0: 28 29 20 63 61 6c 6c 20 74 68 61 74 0d 0a 20 20  () call that..  
f1c0: 20 20 20 20 20 20 2f 2f 2f 20 72 65 67 69 73 74        /// regist
f1d0: 65 72 65 64 20 74 68 65 20 76 69 72 74 75 61 6c  ered the virtual
f1e0: 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 20 54   table module. T
f1f0: 68 65 20 61 72 67 76 20 70 61 72 61 6d 65 74 65  he argv paramete
f200: 72 20 69 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  r is an..       
f210: 20 2f 2f 2f 20 61 72 72 61 79 20 6f 66 20 61 72   /// array of ar
f220: 67 63 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 6e  gc pointers to n
f230: 75 6c 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 73  ull terminated s
f240: 74 72 69 6e 67 73 2e 20 54 68 65 20 66 69 72 73  trings. The firs
f250: 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  t..        /// s
f260: 74 72 69 6e 67 2c 20 61 72 67 76 5b 30 5d 2c 20  tring, argv[0], 
f270: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
f280: 68 65 20 6d 6f 64 75 6c 65 20 62 65 69 6e 67 20  he module being 
f290: 69 6e 76 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20  invoked. The..  
f2a0: 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65        /// module
f2b0: 20 6e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d   name is the nam
f2c0: 65 20 70 72 6f 76 69 64 65 64 20 61 73 20 74 68  e provided as th
f2d0: 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
f2e0: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
f2f0: 2f 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  / sqlite3_create
f300: 5f 6d 6f 64 75 6c 65 28 29 20 61 6e 64 20 61 73  _module() and as
f310: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
f320: 20 74 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   the USING claus
f330: 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e of..        //
f340: 2f 20 74 68 65 20 43 52 45 41 54 45 20 56 49 52  / the CREATE VIR
f350: 54 55 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65  TUAL TABLE state
f360: 6d 65 6e 74 20 74 68 61 74 20 69 73 20 72 75 6e  ment that is run
f370: 6e 69 6e 67 2e 20 54 68 65 20 73 65 63 6f 6e 64  ning. The second
f380: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  ,..        /// a
f390: 72 67 76 5b 31 5d 2c 20 69 73 20 74 68 65 20 6e  rgv[1], is the n
f3a0: 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ame of the datab
f3b0: 61 73 65 20 69 6e 20 77 68 69 63 68 20 74 68 65  ase in which the
f3c0: 20 6e 65 77 20 76 69 72 74 75 61 6c 20 74 61 62   new virtual tab
f3d0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
f3e0: 69 73 20 62 65 69 6e 67 20 63 72 65 61 74 65 64  is being created
f3f0: 2e 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e  . The database n
f400: 61 6d 65 20 69 73 20 22 6d 61 69 6e 22 20 66 6f  ame is "main" fo
f410: 72 20 74 68 65 20 70 72 69 6d 61 72 79 0d 0a 20  r the primary.. 
f420: 20 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62         /// datab
f430: 61 73 65 2c 20 6f 72 20 22 74 65 6d 70 22 20 66  ase, or "temp" f
f440: 6f 72 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  or TEMP database
f450: 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 67 69  , or the name gi
f460: 76 65 6e 20 61 74 20 74 68 65 0d 0a 20 20 20 20  ven at the..    
f470: 20 20 20 20 2f 2f 2f 20 65 6e 64 20 6f 66 20 74      /// end of t
f480: 68 65 20 41 54 54 41 43 48 20 73 74 61 74 65 6d  he ATTACH statem
f490: 65 6e 74 20 66 6f 72 20 61 74 74 61 63 68 65 64  ent for attached
f4a0: 20 64 61 74 61 62 61 73 65 73 2e 20 54 68 65 20   databases. The 
f4b0: 74 68 69 72 64 0d 0a 20 20 20 20 20 20 20 20 2f  third..        /
f4c0: 2f 2f 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  // element of th
f4d0: 65 20 61 72 72 61 79 2c 20 61 72 67 76 5b 32 5d  e array, argv[2]
f4e0: 2c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  , is the name of
f4f0: 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
f500: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61  ..        /// ta
f510: 62 6c 65 2c 20 61 73 20 73 70 65 63 69 66 69 65  ble, as specifie
f520: 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  d following the 
f530: 54 41 42 4c 45 20 6b 65 79 77 6f 72 64 20 69 6e  TABLE keyword in
f540: 20 74 68 65 20 43 52 45 41 54 45 0d 0a 20 20 20   the CREATE..   
f550: 20 20 20 20 20 2f 2f 2f 20 56 49 52 54 55 41 4c       /// VIRTUAL
f560: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
f570: 2e 20 49 66 20 70 72 65 73 65 6e 74 2c 20 74 68  . If present, th
f580: 65 20 66 6f 75 72 74 68 20 61 6e 64 20 73 75 62  e fourth and sub
f590: 73 65 71 75 65 6e 74 0d 0a 20 20 20 20 20 20 20  sequent..       
f5a0: 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20 69 6e 20   /// strings in 
f5b0: 74 68 65 20 61 72 67 76 5b 5d 20 61 72 72 61 79  the argv[] array
f5c0: 20 72 65 70 6f 72 74 20 74 68 65 20 61 72 67 75   report the argu
f5d0: 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
f5e0: 75 6c 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ule name..      
f5f0: 20 20 2f 2f 2f 20 69 6e 20 74 68 65 20 43 52 45    /// in the CRE
f600: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
f610: 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20  E statement...  
f620: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
f630: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
f640: 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
f650: 2f 2f 20 54 68 65 20 6a 6f 62 20 6f 66 20 74 68  // The job of th
f660: 69 73 20 6d 65 74 68 6f 64 20 69 73 20 74 6f 20  is method is to 
f670: 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 6e 65  construct the ne
f680: 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
f690: 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
f6a0: 2f 2f 2f 20 28 61 6e 20 73 71 6c 69 74 65 33 5f  /// (an sqlite3_
f6b0: 76 74 61 62 20 6f 62 6a 65 63 74 29 20 61 6e 64  vtab object) and
f6c0: 20 72 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65   return a pointe
f6d0: 72 20 74 6f 20 69 74 20 69 6e 20 2a 70 70 56 54  r to it in *ppVT
f6e0: 61 62 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ab...        ///
f6f0: 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
f700: 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
f710: 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 70 61 72        /// As par
f720: 74 20 6f 66 20 74 68 65 20 74 61 73 6b 20 6f 66  t of the task of
f730: 20 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20   creating a new 
f740: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
f750: 75 63 74 75 72 65 2c 20 74 68 69 73 0d 0a 20 20  ucture, this..  
f760: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
f770: 20 6d 75 73 74 20 69 6e 76 6f 6b 65 20 73 71 6c   must invoke sql
f780: 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
f790: 62 28 29 20 74 6f 20 74 65 6c 6c 20 74 68 65 20  b() to tell the 
f7a0: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
f7b0: 20 20 20 20 20 2f 2f 2f 20 61 62 6f 75 74 20 74       /// about t
f7c0: 68 65 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 64  he columns and d
f7d0: 61 74 61 74 79 70 65 73 20 69 6e 20 74 68 65 20  atatypes in the 
f7e0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54  virtual table. T
f7f0: 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
f800: 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
f810: 76 74 61 62 28 29 20 41 50 49 20 68 61 73 20 74  vtab() API has t
f820: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f  he following pro
f830: 74 6f 74 79 70 65 3a 0d 0a 20 20 20 20 20 20 20  totype:..       
f840: 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
f850: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
f860: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
f870: 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
f880: 2f 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 64 65  / int sqlite3_de
f890: 63 6c 61 72 65 5f 76 74 61 62 28 73 71 6c 69 74  clare_vtab(sqlit
f8a0: 65 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68  e3 *db, const ch
f8b0: 61 72 20 2a 7a 43 72 65 61 74 65 54 61 62 6c 65  ar *zCreateTable
f8c0: 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  )..        /// <
f8d0: 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20  /code>..        
f8e0: 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
f8f0: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
f900: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
f910: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
f920: 74 6f 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  to sqlite3_decla
f930: 72 65 5f 76 74 61 62 28 29 20 6d 75 73 74 20 62  re_vtab() must b
f940: 65 20 74 68 65 20 73 61 6d 65 0d 0a 20 20 20 20  e the same..    
f950: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
f960: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
f970: 74 65 72 20 61 73 20 74 68 65 20 66 69 72 73 74  ter as the first
f980: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
f990: 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  is method...    
f9a0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 65 63 6f      /// The seco
f9b0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  nd argument to s
f9c0: 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
f9d0: 74 61 62 28 29 20 6d 75 73 74 20 61 0d 0a 20 20  tab() must a..  
f9e0: 20 20 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2d 74        /// zero-t
f9f0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
fa00: 73 74 72 69 6e 67 20 74 68 61 74 20 63 6f 6e 74  string that cont
fa10: 61 69 6e 73 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  ains a well-form
fa20: 65 64 20 43 52 45 41 54 45 0d 0a 20 20 20 20 20  ed CREATE..     
fa30: 20 20 20 2f 2f 2f 20 54 41 42 4c 45 20 73 74 61     /// TABLE sta
fa40: 74 65 6d 65 6e 74 20 74 68 61 74 20 64 65 66 69  tement that defi
fa50: 6e 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  nes the columns 
fa60: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
fa70: 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  able and..      
fa80: 20 20 2f 2f 2f 20 74 68 65 69 72 20 64 61 74 61    /// their data
fa90: 20 74 79 70 65 73 2e 20 54 68 65 20 6e 61 6d 65   types. The name
faa0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e   of the table in
fab0: 20 74 68 69 73 20 43 52 45 41 54 45 20 54 41 42   this CREATE TAB
fac0: 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  LE..        /// 
fad0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 67 6e  statement is ign
fae0: 6f 72 65 64 2c 20 61 73 20 61 72 65 20 61 6c 6c  ored, as are all
faf0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 4f 6e   constraints. On
fb00: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 61  ly the column na
fb10: 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  mes..        ///
fb20: 20 61 6e 64 20 64 61 74 61 74 79 70 65 73 20 6d   and datatypes m
fb30: 61 74 74 65 72 2e 20 54 68 65 20 43 52 45 41 54  atter. The CREAT
fb40: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
fb50: 74 20 73 74 72 69 6e 67 20 6e 65 65 64 20 6e 6f  t string need no
fb60: 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t to..        //
fb70: 2f 20 62 65 20 68 65 6c 64 20 69 6e 20 70 65 72  / be held in per
fb80: 73 69 73 74 65 6e 74 20 6d 65 6d 6f 72 79 2e 20  sistent memory. 
fb90: 54 68 65 20 73 74 72 69 6e 67 20 63 61 6e 20 62  The string can b
fba0: 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 61 6e  e deallocated an
fbb0: 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d/or..        //
fbc0: 2f 20 72 65 75 73 65 64 20 61 73 20 73 6f 6f 6e  / reused as soon
fbd0: 20 61 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f   as the sqlite3_
fbe0: 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 72  declare_vtab() r
fbf0: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 2e 0d  outine returns..
fc00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
fc10: 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
fc20: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
fc30: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
fc40: 20 6e 61 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20   name="pDb">..  
fc50: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
fc60: 74 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f  tive database co
fc70: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e  nnection handle.
fc80: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
fc90: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
fca0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
fcb0: 22 70 41 75 78 22 3e 0d 0a 20 20 20 20 20 20 20  "pAux">..       
fcc0: 20 2f 2f 2f 20 54 68 65 20 6f 72 69 67 69 6e 61   /// The origina
fcd0: 6c 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  l native pointer
fce0: 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73 20   value that was 
fcf0: 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65 0d  provided to the.
fd00: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c  .        /// sql
fd10: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
fd20: 6c 65 28 29 2c 20 73 71 6c 69 74 65 33 5f 63 72  le(), sqlite3_cr
fd30: 65 61 74 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29  eate_module_v2()
fd40: 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
fd50: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
fd60: 64 69 73 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c  disposable_modul
fd70: 65 28 29 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a  e() functions...
fd80: 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
fd90: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
fda0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
fdb0: 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  rgc">..        /
fdc0: 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  // The number of
fdd0: 20 61 72 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20   arguments from 
fde0: 74 68 65 20 43 52 45 41 54 45 20 56 49 52 54 55  the CREATE VIRTU
fdf0: 41 4c 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  AL TABLE stateme
fe00: 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  nt...        ///
fe10: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
fe20: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
fe30: 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
fe40: 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
fe50: 79 20 6f 66 20 73 74 72 69 6e 67 20 61 72 67 75  y of string argu
fe60: 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43  ments from the C
fe70: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
fe80: 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  BLE..        ///
fe90: 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20   statement...   
fea0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
feb0: 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
fec0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
fed0: 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
fee0: 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
fef0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
ff00: 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
ff10: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e  o point to the n
ff20: 65 77 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ewly..        //
ff30: 2f 20 63 72 65 61 74 65 64 20 6e 61 74 69 76 65  / created native
ff40: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
ff50: 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
ff60: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
ff70: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
ff80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
ff90: 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20  "pError">..     
ffa0: 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c     /// Upon fail
ffb0: 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ure, this parame
ffc0: 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
ffd0: 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f  fied to point to
ffe0: 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..    
fff0: 20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c      /// message,
10000 20 77 69 74 68 20 74 68 65 20 75 6e 64 65 72 6c   with the underl
10010 79 69 6e 67 20 6d 65 6d 6f 72 79 20 68 61 76 69  ying memory havi
10020 6e 67 20 62 65 65 6e 20 6f 62 74 61 69 6e 65 64  ng been obtained
10030 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20   from the..     
10040 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
10050 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e  alloc() function
10060 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
10070 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
10080 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
10090 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
100a0 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
100b0 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
100c0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
100d0 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
100e0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 43 72 65  teErrorCode xCre
100f0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
10100 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
10110 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
10120 72 20 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20  r pAux,..       
10130 20 20 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a       int argc,..
10140 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
10150 74 72 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20  tr argv,..      
10160 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
10170 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
10180 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20       ref IntPtr 
10190 70 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20  pError..        
101a0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
101b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
101c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20  /////////....   
10200 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
10210 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
10220 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
10230 2f 2f 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74  /// The xConnect
10240 20 6d 65 74 68 6f 64 20 69 73 20 76 65 72 79 20   method is very 
10250 73 69 6d 69 6c 61 72 20 74 6f 20 78 43 72 65 61  similar to xCrea
10260 74 65 2e 20 49 74 20 68 61 73 20 74 68 65 20 73  te. It has the s
10270 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ame..        ///
10280 20 70 61 72 61 6d 65 74 65 72 73 20 61 6e 64 20   parameters and 
10290 63 6f 6e 73 74 72 75 63 74 73 20 61 20 6e 65 77  constructs a new
102a0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
102b0 72 75 63 74 75 72 65 20 6a 75 73 74 20 6c 69 6b  ructure just lik
102c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
102d0 43 72 65 61 74 65 2e 20 41 6e 64 20 69 74 20 6d  Create. And it m
102e0 75 73 74 20 61 6c 73 6f 20 63 61 6c 6c 20 73 71  ust also call sq
102f0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
10300 61 62 28 29 20 6c 69 6b 65 20 78 43 72 65 61 74  ab() like xCreat
10310 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
10320 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
10330 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
10340 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 69 66       /// The dif
10350 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20  ference is that 
10360 78 43 6f 6e 6e 65 63 74 20 69 73 20 63 61 6c 6c  xConnect is call
10370 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73 68 20  ed to establish 
10380 61 20 6e 65 77 0d 0a 20 20 20 20 20 20 20 20 2f  a new..        /
10390 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  // connection to
103a0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 76 69 72   an existing vir
103b0 74 75 61 6c 20 74 61 62 6c 65 20 77 68 65 72 65  tual table where
103c0 61 73 20 78 43 72 65 61 74 65 20 69 73 20 63 61  as xCreate is ca
103d0 6c 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  lled..        //
103e0 2f 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  / to create a ne
103f0 77 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  w virtual table 
10400 66 72 6f 6d 20 73 63 72 61 74 63 68 2e 0d 0a 20  from scratch... 
10410 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
10420 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
10430 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
10440 2f 2f 2f 20 54 68 65 20 78 43 72 65 61 74 65 20  /// The xCreate 
10450 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20 6d 65 74  and xConnect met
10460 68 6f 64 73 20 61 72 65 20 6f 6e 6c 79 20 64 69  hods are only di
10470 66 66 65 72 65 6e 74 20 77 68 65 6e 20 74 68 65  fferent when the
10480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
10490 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20  rtual table has 
104a0 73 6f 6d 65 20 6b 69 6e 64 20 6f 66 20 62 61 63  some kind of bac
104b0 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61 74 20  king store that 
104c0 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20  must be..       
104d0 20 2f 2f 2f 20 69 6e 69 74 69 61 6c 69 7a 65 64   /// initialized
104e0 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 20   the first time 
104f0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
10500 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 54 68  e is created. Th
10510 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78  e..        /// x
10520 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 63 72  Create method cr
10530 65 61 74 65 73 20 61 6e 64 20 69 6e 69 74 69 61  eates and initia
10540 6c 69 7a 65 73 20 74 68 65 20 62 61 63 6b 69 6e  lizes the backin
10550 67 20 73 74 6f 72 65 2e 20 54 68 65 0d 0a 20 20  g store. The..  
10560 20 20 20 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65        /// xConne
10570 63 74 20 6d 65 74 68 6f 64 20 6a 75 73 74 20 63  ct method just c
10580 6f 6e 6e 65 63 74 73 20 74 6f 20 61 6e 20 65 78  onnects to an ex
10590 69 73 74 69 6e 67 20 62 61 63 6b 69 6e 67 20 73  isting backing s
105a0 74 6f 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tore...        /
105b0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
105c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
105d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 73 20 61          /// As a
105e0 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69  n example, consi
105f0 64 65 72 20 61 20 76 69 72 74 75 61 6c 20 74 61  der a virtual ta
10600 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
10610 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  on that..       
10620 20 2f 2f 2f 20 70 72 6f 76 69 64 65 73 20 72 65   /// provides re
10630 61 64 2d 6f 6e 6c 79 20 61 63 63 65 73 73 20 74  ad-only access t
10640 6f 20 65 78 69 73 74 69 6e 67 20 63 6f 6d 6d 61  o existing comma
10650 2d 73 65 70 61 72 61 74 65 64 2d 76 61 6c 75 65  -separated-value
10660 20 28 43 53 56 29 0d 0a 20 20 20 20 20 20 20 20   (CSV)..        
10670 2f 2f 2f 20 66 69 6c 65 73 20 6f 6e 20 64 69 73  /// files on dis
10680 6b 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 62  k. There is no b
10690 61 63 6b 69 6e 67 20 73 74 6f 72 65 20 74 68 61  acking store tha
106a0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 63 72  t needs to be cr
106b0 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  eated..        /
106c0 2f 2f 20 6f 72 20 69 6e 69 74 69 61 6c 69 7a 65  // or initialize
106d0 64 20 66 6f 72 20 73 75 63 68 20 61 20 76 69 72  d for such a vir
106e0 74 75 61 6c 20 74 61 62 6c 65 20 28 73 69 6e 63  tual table (sinc
106f0 65 20 74 68 65 20 43 53 56 20 66 69 6c 65 73 0d  e the CSV files.
10700 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6c 72  .        /// alr
10710 65 61 64 79 20 65 78 69 73 74 20 6f 6e 20 64 69  eady exist on di
10720 73 6b 29 20 73 6f 20 74 68 65 20 78 43 72 65 61  sk) so the xCrea
10730 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74 20  te and xConnect 
10740 6d 65 74 68 6f 64 73 20 77 69 6c 6c 20 62 65 0d  methods will be.
10750 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 64 65  .        /// ide
10760 6e 74 69 63 61 6c 20 66 6f 72 20 74 68 61 74 20  ntical for that 
10770 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 20 20 20  module...       
10780 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
10790 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
107a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 6e  ..        /// An
107b0 6f 74 68 65 72 20 65 78 61 6d 70 6c 65 20 69 73  other example is
107c0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
107d0 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
107e0 20 61 20 66 75 6c 6c 2d 74 65 78 74 0d 0a 20 20   a full-text..  
107f0 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 65 78 2e        /// index.
10800 20 54 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   The xCreate met
10810 68 6f 64 20 6d 75 73 74 20 63 72 65 61 74 65 20  hod must create 
10820 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 64  and initialize d
10830 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
10840 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 68   structures to h
10850 6f 6c 64 20 74 68 65 20 64 69 63 74 69 6f 6e 61  old the dictiona
10860 72 79 20 61 6e 64 20 70 6f 73 74 69 6e 67 20 6c  ry and posting l
10870 69 73 74 73 20 66 6f 72 20 74 68 61 74 20 69 6e  ists for that in
10880 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
10890 2f 20 54 68 65 20 78 43 6f 6e 6e 65 63 74 20 6d  / The xConnect m
108a0 65 74 68 6f 64 2c 20 6f 6e 20 74 68 65 20 6f 74  ethod, on the ot
108b0 68 65 72 20 68 61 6e 64 2c 20 6f 6e 6c 79 20 68  her hand, only h
108c0 61 73 20 74 6f 20 6c 6f 63 61 74 65 20 61 6e 64  as to locate and
108d0 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   use..        //
108e0 2f 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 69  / an existing di
108f0 63 74 69 6f 6e 61 72 79 20 61 6e 64 20 70 6f 73  ctionary and pos
10900 74 69 6e 67 20 6c 69 73 74 73 20 74 68 61 74 20  ting lists that 
10910 77 65 72 65 20 63 72 65 61 74 65 64 20 62 79 20  were created by 
10920 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70  a..        /// p
10930 72 69 6f 72 20 78 43 72 65 61 74 65 20 63 61 6c  rior xCreate cal
10940 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  l...        /// 
10950 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
10960 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
10970 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6f       /// The xCo
10980 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20 6d 75 73  nnect method mus
10990 74 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  t return SQLITE_
109a0 4f 4b 20 69 66 20 69 74 20 69 73 20 73 75 63 63  OK if it is succ
109b0 65 73 73 66 75 6c 20 69 6e 0d 0a 20 20 20 20 20  essful in..     
109c0 20 20 20 2f 2f 2f 20 63 72 65 61 74 69 6e 67 20     /// creating 
109d0 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
109e0 74 61 62 6c 65 2c 20 6f 72 20 53 51 4c 49 54 45  table, or SQLITE
109f0 5f 45 52 52 4f 52 20 69 66 20 69 74 20 69 73 20  _ERROR if it is 
10a00 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  not..        ///
10a10 20 73 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20   successful. If 
10a20 6e 6f 74 20 73 75 63 63 65 73 73 66 75 6c 2c 20  not successful, 
10a30 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
10a40 20 73 74 72 75 63 74 75 72 65 20 6d 75 73 74 20   structure must 
10a50 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  not..        ///
10a60 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 20 41   be allocated. A
10a70 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
10a80 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62  may optionally b
10a90 65 20 72 65 74 75 72 6e 65 64 20 69 6e 20 2a 70  e returned in *p
10aa0 7a 45 72 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  zErr..        //
10ab0 2f 20 69 66 20 75 6e 73 75 63 63 65 73 73 66 75  / if unsuccessfu
10ac0 6c 2e 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  l. Space to hold
10ad0 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
10ae0 67 65 20 73 74 72 69 6e 67 20 6d 75 73 74 20 62  ge string must b
10af0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61  e..        /// a
10b00 6c 6c 6f 63 61 74 65 64 20 75 73 69 6e 67 20 61  llocated using a
10b10 6e 20 53 51 4c 69 74 65 20 6d 65 6d 6f 72 79 20  n SQLite memory 
10b20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 75 6e 63 74  allocation funct
10b30 69 6f 6e 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20  ion like..      
10b40 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61    /// sqlite3_ma
10b50 6c 6c 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65  lloc() or sqlite
10b60 33 5f 6d 70 72 69 6e 74 66 28 29 20 61 73 20 74  3_mprintf() as t
10b70 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77  he SQLite core w
10b80 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ill..        ///
10b90 20 61 74 74 65 6d 70 74 20 74 6f 20 66 72 65 65   attempt to free
10ba0 20 74 68 65 20 73 70 61 63 65 20 75 73 69 6e 67   the space using
10bb0 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29 20   sqlite3_free() 
10bc0 61 66 74 65 72 20 74 68 65 20 65 72 72 6f 72 20  after the error 
10bd0 68 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  has..        ///
10be0 20 62 65 65 6e 20 72 65 70 6f 72 74 65 64 20 75   been reported u
10bf0 70 20 74 6f 20 74 68 65 20 61 70 70 6c 69 63 61  p to the applica
10c00 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
10c10 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
10c20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
10c30 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
10c40 78 43 6f 6e 6e 65 63 74 20 6d 65 74 68 6f 64 20  xConnect method 
10c50 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
10c60 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
10c70 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
10c80 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c   implementation,
10c90 20 74 68 6f 75 67 68 20 74 68 65 20 78 43 72 65   though the xCre
10ca0 61 74 65 20 61 6e 64 20 78 43 6f 6e 6e 65 63 74  ate and xConnect
10cb0 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 74 68 65   pointers of the
10cc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
10cd0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6f 62 6a  lite3_module obj
10ce0 65 63 74 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f  ect may point to
10cf0 20 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69   the same functi
10d00 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a  on the virtual..
10d10 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c          /// tabl
10d20 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 65 64 20  e does not need 
10d30 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61  to initialize ba
10d40 63 6b 69 6e 67 20 73 74 6f 72 65 2e 0d 0a 20 20  cking store...  
10d50 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
10d60 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
10d70 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
10d80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
10d90 6d 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20  me="pDb">..     
10da0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
10db0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
10dc0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20  ction handle... 
10dd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
10de0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
10df0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41   <param name="pA
10e00 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ux">..        //
10e10 2f 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e  / The original n
10e20 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 76 61  ative pointer va
10e30 6c 75 65 20 74 68 61 74 20 77 61 73 20 70 72 6f  lue that was pro
10e40 76 69 64 65 64 20 74 6f 20 74 68 65 0d 0a 20 20  vided to the..  
10e50 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65        /// sqlite
10e60 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
10e70 29 2c 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ), sqlite3_creat
10e80 65 5f 6d 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72  e_module_v2() or
10e90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
10ea0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 64 69 73  lite3_create_dis
10eb0 70 6f 73 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29  posable_module()
10ec0 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
10ed0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
10ee0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
10ef0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
10f00 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
10f10 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  The number of ar
10f20 67 75 6d 65 6e 74 73 20 66 72 6f 6d 20 74 68 65  guments from the
10f30 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
10f40 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
10f50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
10f60 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
10f70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
10f80 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20  "argv">..       
10f90 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
10fa0 66 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e  f string argumen
10fb0 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52 45 41  ts from the CREA
10fc0 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
10fd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 74  ..        /// st
10fe0 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  atement...      
10ff0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
11000 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
11010 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
11020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
11030 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
11040 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
11050 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 70  be modified to p
11060 6f 69 6e 74 20 74 6f 20 74 68 65 20 6e 65 77 6c  oint to the newl
11070 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  y..        /// c
11080 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 73 71  reated native sq
11090 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
110a0 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20  ed structure... 
110b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
110c0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
110d0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45   <param name="pE
110e0 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rror">..        
110f0 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  /// Upon failure
11100 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
11110 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
11120 64 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  d to point to th
11130 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..       
11140 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2c 20 77 69   /// message, wi
11150 74 68 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  th the underlyin
11160 67 20 6d 65 6d 6f 72 79 20 68 61 76 69 6e 67 20  g memory having 
11170 62 65 65 6e 20 6f 62 74 61 69 6e 65 64 20 66 72  been obtained fr
11180 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
11190 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  /// sqlite3_mall
111a0 6f 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a  oc() function...
111b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
111c0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
111d0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
111e0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
111f0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
11200 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
11210 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
11220 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
11230 72 72 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63  rrorCode xConnec
11240 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
11250 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20 20 20  IntPtr pDb,..   
11260 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
11270 70 41 75 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  pAux,..         
11280 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
11290 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
112a0 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
112b0 20 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70      ref IntPtr p
112c0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
112d0 20 20 20 72 65 66 20 49 6e 74 50 74 72 20 70 45     ref IntPtr pE
112e0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
112f0 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
11300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11340 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11350 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
11370 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11380 2f 20 53 51 4c 69 74 65 20 75 73 65 73 20 74 68  / SQLite uses th
11390 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65 74  e xBestIndex met
113a0 68 6f 64 20 6f 66 20 61 20 76 69 72 74 75 61 6c  hod of a virtual
113b0 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74 6f   table module to
113c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 64 65  ..        /// de
113d0 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
113e0 20 77 61 79 20 74 6f 20 61 63 63 65 73 73 20 74   way to access t
113f0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
11400 2e 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78  . The xBestIndex
11410 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
11420 74 68 6f 64 20 68 61 73 20 61 20 70 72 6f 74 6f  thod has a proto
11430 74 79 70 65 20 6c 69 6b 65 20 74 68 69 73 3a 0d  type like this:.
11440 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
11450 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
11460 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20  / <code>..      
11470 20 20 2f 2f 2f 20 69 6e 74 20 28 2a 78 42 65 73    /// int (*xBes
11480 74 49 6e 64 65 78 29 28 73 71 6c 69 74 65 33 5f  tIndex)(sqlite3_
11490 76 74 61 62 20 2a 70 56 54 61 62 2c 20 73 71 6c  vtab *pVTab, sql
114a0 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a  ite3_index_info*
114b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  );..        /// 
114c0 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20  </code>..       
114d0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
114e0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 53 51 4c       /// The SQL
114f0 69 74 65 20 63 6f 72 65 20 63 6f 6d 6d 75 6e 69  ite core communi
11500 63 61 74 65 73 20 77 69 74 68 20 74 68 65 20 78  cates with the x
11510 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
11520 20 62 79 20 66 69 6c 6c 69 6e 67 0d 0a 20 20 20   by filling..   
11530 20 20 20 20 20 2f 2f 2f 20 69 6e 20 63 65 72 74       /// in cert
11540 61 69 6e 20 66 69 65 6c 64 73 20 6f 66 20 74 68  ain fields of th
11550 65 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  e sqlite3_index_
11560 69 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 61  info structure a
11570 6e 64 20 70 61 73 73 69 6e 67 20 61 0d 0a 20 20  nd passing a..  
11580 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 65        /// pointe
11590 72 20 74 6f 20 74 68 61 74 20 73 74 72 75 63 74  r to that struct
115a0 75 72 65 20 69 6e 74 6f 20 78 42 65 73 74 49 6e  ure into xBestIn
115b0 64 65 78 20 61 73 20 74 68 65 20 73 65 63 6f 6e  dex as the secon
115c0 64 20 70 61 72 61 6d 65 74 65 72 2e 0d 0a 20 20  d parameter...  
115d0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42        /// The xB
115e0 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
115f0 66 69 6c 6c 73 20 6f 75 74 20 6f 74 68 65 72 20  fills out other 
11600 66 69 65 6c 64 73 20 6f 66 20 74 68 69 73 20 73  fields of this s
11610 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20  tructure..      
11620 20 20 2f 2f 2f 20 77 68 69 63 68 20 66 6f 72 6d    /// which form
11630 73 20 74 68 65 20 72 65 70 6c 79 2e 20 54 68 65  s the reply. The
11640 20 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69   sqlite3_index_i
11650 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 6c 6f  nfo structure lo
11660 6f 6b 73 20 6c 69 6b 65 0d 0a 20 20 20 20 20 20  oks like..      
11670 20 20 2f 2f 2f 20 74 68 69 73 3a 0d 0a 20 20 20    /// this:..   
11680 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
11690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
116a0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
116b0 2f 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  /  struct sqlite
116c0 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 7b 0d 0a  3_index_info {..
116d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 2f          ///    /
116e0 2a 20 49 6e 70 75 74 73 20 2a 2f 0d 0a 20 20 20  * Inputs */..   
116f0 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
11700 74 20 69 6e 74 20 6e 43 6f 6e 73 74 72 61 69 6e  t int nConstrain
11710 74 3b 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  t;   /* Number o
11720 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
11730 6e 73 74 72 61 69 6e 74 20 2a 2f 0d 0a 20 20 20  nstraint */..   
11740 20 20 20 20 20 2f 2f 2f 20 20 20 20 63 6f 6e 73       ///    cons
11750 74 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  t struct sqlite3
11760 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69 6e  _index_constrain
11770 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t {..        ///
11780 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 75         int iColu
11790 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
117a0 43 6f 6c 75 6d 6e 20 6f 6e 20 6c 65 66 74 2d 68  Column on left-h
117b0 61 6e 64 20 73 69 64 65 20 6f 66 0d 0a 20 20 20  and side of..   
117c0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69        * constrai
117f0 6e 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  nt */..        /
11800 2f 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65  //       unsigne
11810 64 20 63 68 61 72 20 6f 70 3b 20 20 20 20 20 2f  d char op;     /
11820 2a 20 43 6f 6e 73 74 72 61 69 6e 74 20 6f 70 65  * Constraint ope
11830 72 61 74 6f 72 20 2a 2f 0d 0a 20 20 20 20 20 20  rator */..      
11840 20 20 2f 2f 2f 20 20 20 20 20 20 20 75 6e 73 69    ///       unsi
11850 67 6e 65 64 20 63 68 61 72 20 75 73 61 62 6c 65  gned char usable
11860 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69  ; /* True if thi
11870 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  s constraint is 
11880 75 73 61 62 6c 65 20 2a 2f 0d 0a 20 20 20 20 20  usable */..     
11890 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74     ///       int
118a0 20 69 54 65 72 6d 4f 66 66 73 65 74 3b 20 20 20   iTermOffset;   
118b0 20 20 20 2f 2a 20 55 73 65 64 20 69 6e 74 65 72     /* Used inter
118c0 6e 61 6c 6c 79 20 2d 20 78 42 65 73 74 49 6e 64  nally - xBestInd
118d0 65 78 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20  ex should..     
118e0 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 20     ///          
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11900 20 20 20 20 2a 20 69 67 6e 6f 72 65 20 2a 2f 0d      * ignore */.
11910 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11920 7d 20 2a 63 6f 6e 73 74 20 61 43 6f 6e 73 74 72  } *const aConstr
11930 61 69 6e 74 3b 20 20 20 20 2f 2a 20 54 61 62 6c  aint;    /* Tabl
11940 65 20 6f 66 20 57 48 45 52 45 20 63 6c 61 75 73  e of WHERE claus
11950 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
11960 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
11970 20 63 6f 6e 73 74 20 69 6e 74 20 6e 4f 72 64 65   const int nOrde
11980 72 42 79 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rBy;      /* Num
11990 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20  ber of terms in 
119a0 74 68 65 20 4f 52 44 45 52 20 42 59 0d 0a 20 20  the ORDER BY..  
119b0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20        ///       
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 20 20 20 20 2a 20 63 6c 61 75 73 65 20         * clause 
119e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
119f0 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
11a00 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 6f 72  sqlite3_index_or
11a10 64 65 72 62 79 20 7b 0d 0a 20 20 20 20 20 20 20  derby {..       
11a20 20 2f 2f 2f 20 20 20 20 20 20 20 69 6e 74 20 69   ///       int i
11a30 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11a40 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
11a50 72 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  r */..        //
11a60 2f 20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /       unsigned
11a70 20 63 68 61 72 20 64 65 73 63 3b 20 20 20 2f 2a   char desc;   /*
11a80 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 2e 20   True for DESC. 
11a90 20 46 61 6c 73 65 20 66 6f 72 20 41 53 43 2e 20   False for ASC. 
11aa0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
11ab0 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 4f 72 64     } *const aOrd
11ac0 65 72 42 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  erBy;       /* T
11ad0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
11ae0 73 65 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f  se */..        /
11af0 2f 2f 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 73  //    /* Outputs
11b00 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   */..        ///
11b10 20 20 20 20 73 74 72 75 63 74 20 73 71 6c 69 74      struct sqlit
11b20 65 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61  e3_index_constra
11b30 69 6e 74 5f 75 73 61 67 65 20 7b 0d 0a 20 20 20  int_usage {..   
11b40 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 69 6e       ///      in
11b50 74 20 61 72 67 76 49 6e 64 65 78 3b 20 20 20 20  t argvIndex;    
11b60 20 20 20 20 20 2f 2a 20 69 66 20 67 72 65 61 74       /* if great
11b70 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 63 6f  er than zero, co
11b80 6e 73 74 72 61 69 6e 74 20 69 73 0d 0a 20 20 20  nstraint is..   
11b90 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 20 20 20 20 2a 20 70 61 72 74 20 6f 66 20        * part of 
11bc0 61 72 67 76 20 74 6f 20 78 46 69 6c 74 65 72 20  argv to xFilter 
11bd0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
11be0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68       unsigned ch
11bf0 61 72 20 6f 6d 69 74 3b 20 20 20 20 2f 2a 20 44  ar omit;    /* D
11c00 6f 20 6e 6f 74 20 63 6f 64 65 20 61 20 74 65 73  o not code a tes
11c10 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..    
11c20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 20 20 20 20 20 2a 20 63 6f 6e 73 74 72 61 69 6e       * constrain
11c50 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  t */..        //
11c60 2f 20 20 20 20 7d 20 2a 63 6f 6e 73 74 20 61 43  /    } *const aC
11c70 6f 6e 73 74 72 61 69 6e 74 55 73 61 67 65 3b 0d  onstraintUsage;.
11c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11c90 69 6e 74 20 69 64 78 4e 75 6d 3b 20 20 20 20 20  int idxNum;     
11ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11cb0 65 72 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  er used to ident
11cc0 69 66 79 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  ify the index */
11cd0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
11ce0 20 63 68 61 72 20 2a 69 64 78 53 74 72 3b 20 20   char *idxStr;  
11cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
11d00 69 6e 67 2c 20 70 6f 73 73 69 62 6c 79 20 6f 62  ing, possibly ob
11d10 74 61 69 6e 65 64 20 66 72 6f 6d 0d 0a 20 20 20  tained from..   
11d20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 20 20 2a 20 73 71 6c 69 74 65 33 5f        * sqlite3_
11d50 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0d 0a 20 20 20  malloc() */..   
11d60 20 20 20 20 20 2f 2f 2f 20 20 20 20 69 6e 74 20       ///    int 
11d70 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74 72  needToFreeIdxStr
11d80 3b 20 20 20 20 2f 2a 20 46 72 65 65 20 69 64 78  ;    /* Free idx
11d90 53 74 72 20 75 73 69 6e 67 20 73 71 6c 69 74 65  Str using sqlite
11da0 33 5f 66 72 65 65 28 29 20 69 66 0d 0a 20 20 20  3_free() if..   
11db0 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20       ///        
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 20 20 20 2a 20 74 72 75 65 20 2a 2f 0d        * true */.
11de0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20  .        ///    
11df0 69 6e 74 20 6f 72 64 65 72 42 79 43 6f 6e 73 75  int orderByConsu
11e00 6d 65 64 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  med;     /* True
11e10 20 69 66 20 6f 75 74 70 75 74 20 69 73 20 61 6c   if output is al
11e20 72 65 61 64 79 20 6f 72 64 65 72 65 64 20 2a 2f  ready ordered */
11e30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
11e40 20 64 6f 75 62 6c 65 20 65 73 74 69 6d 61 74 65   double estimate
11e50 64 43 6f 73 74 3b 20 20 20 20 2f 2a 20 45 73 74  dCost;    /* Est
11e60 69 6d 61 74 65 64 20 63 6f 73 74 20 6f 66 20 75  imated cost of u
11e70 73 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  sing this index 
11e80 2a 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  */..        /// 
11e90 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   };..        ///
11ea0 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20   </code>..      
11eb0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
11ec0 20 20 20 20 20 20 2f 2f 2f 20 49 6e 20 61 64 64        /// In add
11ed0 69 74 69 6f 6e 2c 20 74 68 65 72 65 20 61 72 65  ition, there are
11ee0 20 73 6f 6d 65 20 64 65 66 69 6e 65 64 20 63 6f   some defined co
11ef0 6e 73 74 61 6e 74 73 3a 0d 0a 20 20 20 20 20 20  nstants:..      
11f00 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
11f10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65         /// <code
11f20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  >..        ///  
11f30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
11f40 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
11f50 45 51 20 20 20 20 32 0d 0a 20 20 20 20 20 20 20  EQ    2..       
11f60 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65 20 53 51   ///  #define SQ
11f70 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53 54  LITE_INDEX_CONST
11f80 52 41 49 4e 54 5f 47 54 20 20 20 20 34 0d 0a 20  RAINT_GT    4.. 
11f90 20 20 20 20 20 20 20 2f 2f 2f 20 20 23 64 65 66         ///  #def
11fa0 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 44 45 58  ine SQLITE_INDEX
11fb0 5f 43 4f 4e 53 54 52 41 49 4e 54 5f 4c 45 20 20  _CONSTRAINT_LE  
11fc0 20 20 38 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    8..        ///
11fd0 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
11fe0 5f 49 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e  _INDEX_CONSTRAIN
11ff0 54 5f 4c 54 20 20 20 20 31 36 0d 0a 20 20 20 20  T_LT    16..    
12000 20 20 20 20 2f 2f 2f 20 20 23 64 65 66 69 6e 65      ///  #define
12010 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
12020 4e 53 54 52 41 49 4e 54 5f 47 45 20 20 20 20 33  NSTRAINT_GE    3
12030 32 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  2..        ///  
12040 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
12050 4e 44 45 58 5f 43 4f 4e 53 54 52 41 49 4e 54 5f  NDEX_CONSTRAINT_
12060 4d 41 54 43 48 20 36 34 0d 0a 20 20 20 20 20 20  MATCH 64..      
12070 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20    /// </code>.. 
12080 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
12090 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
120a0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 63  he SQLite core c
120b0 61 6c 6c 73 20 74 68 65 20 78 42 65 73 74 49 6e  alls the xBestIn
120c0 64 65 78 20 6d 65 74 68 6f 64 20 77 68 65 6e 20  dex method when 
120d0 69 74 20 69 73 20 63 6f 6d 70 69 6c 69 6e 67 20  it is compiling 
120e0 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 71  a..        /// q
120f0 75 65 72 79 20 74 68 61 74 20 69 6e 76 6f 6c 76  uery that involv
12100 65 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  es a virtual tab
12110 6c 65 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  le. In other wor
12120 64 73 2c 20 53 51 4c 69 74 65 20 63 61 6c 6c 73  ds, SQLite calls
12130 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
12140 69 73 20 6d 65 74 68 6f 64 20 77 68 65 6e 20 69  is method when i
12150 74 20 69 73 20 72 75 6e 6e 69 6e 67 20 73 71 6c  t is running sql
12160 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
12170 72 20 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74  r the equivalent
12180 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 42  ...        /// B
12190 79 20 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d  y calling this m
121a0 65 74 68 6f 64 2c 20 74 68 65 20 53 51 4c 69 74  ethod, the SQLit
121b0 65 20 63 6f 72 65 20 69 73 20 73 61 79 69 6e 67  e core is saying
121c0 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0d   to the virtual.
121d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 61 62  .        /// tab
121e0 6c 65 20 74 68 61 74 20 69 74 20 6e 65 65 64 73  le that it needs
121f0 20 74 6f 20 61 63 63 65 73 73 20 73 6f 6d 65 20   to access some 
12200 73 75 62 73 65 74 20 6f 66 20 74 68 65 20 72 6f  subset of the ro
12210 77 73 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ws in the..     
12220 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
12230 61 62 6c 65 20 61 6e 64 20 69 74 20 77 61 6e 74  able and it want
12240 73 20 74 6f 20 6b 6e 6f 77 20 74 68 65 20 6d 6f  s to know the mo
12250 73 74 20 65 66 66 69 63 69 65 6e 74 20 77 61 79  st efficient way
12260 20 74 6f 20 64 6f 0d 0a 20 20 20 20 20 20 20 20   to do..        
12270 2f 2f 2f 20 74 68 61 74 20 61 63 63 65 73 73 2e  /// that access.
12280 20 54 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   The xBestIndex 
12290 6d 65 74 68 6f 64 20 72 65 70 6c 69 65 73 20 77  method replies w
122a0 69 74 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ith information 
122b0 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f  that..        //
122c0 2f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  / the SQLite cor
122d0 65 20 63 61 6e 20 74 68 65 6e 20 75 73 65 20 74  e can then use t
122e0 6f 20 63 6f 6e 64 75 63 74 20 61 6e 20 65 66 66  o conduct an eff
122f0 69 63 69 65 6e 74 20 73 65 61 72 63 68 20 6f 66  icient search of
12300 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
12310 2f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  / virtual table.
12320 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12330 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
12340 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
12350 20 20 20 2f 2f 2f 20 57 68 69 6c 65 20 63 6f 6d     /// While com
12360 70 69 6c 69 6e 67 20 61 20 73 69 6e 67 6c 65 20  piling a single 
12370 53 51 4c 20 71 75 65 72 79 2c 20 74 68 65 20 53  SQL query, the S
12380 51 4c 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74  QLite core might
12390 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
123a0 2f 2f 20 78 42 65 73 74 49 6e 64 65 78 20 6d 75  // xBestIndex mu
123b0 6c 74 69 70 6c 65 20 74 69 6d 65 73 20 77 69 74  ltiple times wit
123c0 68 20 64 69 66 66 65 72 65 6e 74 20 73 65 74 74  h different sett
123d0 69 6e 67 73 20 69 6e 0d 0a 20 20 20 20 20 20 20  ings in..       
123e0 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
123f0 65 78 5f 69 6e 66 6f 2e 20 54 68 65 20 53 51 4c  ex_info. The SQL
12400 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74 68  ite core will th
12410 65 6e 20 73 65 6c 65 63 74 20 74 68 65 0d 0a 20  en select the.. 
12420 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 62 69         /// combi
12430 6e 61 74 69 6f 6e 20 74 68 61 74 20 61 70 70 65  nation that appe
12440 61 72 73 20 74 6f 20 67 69 76 65 20 74 68 65 20  ars to give the 
12450 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
12460 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
12470 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
12480 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
12490 20 20 20 20 2f 2f 2f 20 42 65 66 6f 72 65 20 63      /// Before c
124a0 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68  alling this meth
124b0 6f 64 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63  od, the SQLite c
124c0 6f 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  ore initializes 
124d0 61 6e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20  an instance..   
124e0 20 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20       /// of the 
124f0 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
12500 66 6f 20 73 74 72 75 63 74 75 72 65 20 77 69 74  fo structure wit
12510 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
12520 6f 75 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  out the..       
12530 20 2f 2f 2f 20 71 75 65 72 79 20 74 68 61 74 20   /// query that 
12540 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  it is currently 
12550 74 72 79 69 6e 67 20 74 6f 20 70 72 6f 63 65 73  trying to proces
12560 73 2e 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74  s. This informat
12570 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ion..        ///
12580 20 64 65 72 69 76 65 73 20 6d 61 69 6e 6c 79 20   derives mainly 
12590 66 72 6f 6d 20 74 68 65 20 57 48 45 52 45 20 63  from the WHERE c
125a0 6c 61 75 73 65 20 61 6e 64 20 4f 52 44 45 52 20  lause and ORDER 
125b0 42 59 20 6f 72 20 47 52 4f 55 50 20 42 59 0d 0a  BY or GROUP BY..
125c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6c 61 75          /// clau
125d0 73 65 73 20 6f 66 20 74 68 65 20 71 75 65 72 79  ses of the query
125e0 2c 20 62 75 74 20 61 6c 73 6f 20 66 72 6f 6d 20  , but also from 
125f0 61 6e 79 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20  any ON or USING 
12600 63 6c 61 75 73 65 73 20 69 66 20 74 68 65 0d 0a  clauses if the..
12610 20 20 20 20 20 20 20 20 2f 2f 2f 20 71 75 65 72          /// quer
12620 79 20 69 73 20 61 20 6a 6f 69 6e 2e 20 54 68 65  y is a join. The
12630 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
12640 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
12650 65 20 70 72 6f 76 69 64 65 73 20 74 6f 0d 0a 20  e provides to.. 
12660 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 78         /// the x
12670 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
12680 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
12690 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
126a0 63 74 75 72 65 20 74 68 61 74 20 69 73 0d 0a 20  cture that is.. 
126b0 20 20 20 20 20 20 20 2f 2f 2f 20 6d 61 72 6b 65         /// marke
126c0 64 20 61 73 20 22 49 6e 70 75 74 73 22 2e 20 54  d as "Inputs". T
126d0 68 65 20 22 4f 75 74 70 75 74 73 22 20 73 65 63  he "Outputs" sec
126e0 74 69 6f 6e 20 69 73 20 69 6e 69 74 69 61 6c 69  tion is initiali
126f0 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 0d 0a 20 20  zed to zero...  
12700 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
12710 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
12720 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
12730 2f 2f 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69  // The informati
12740 6f 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  on in the sqlite
12750 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74 72  3_index_info str
12760 75 63 74 75 72 65 20 69 73 20 65 70 68 65 6d 65  ucture is epheme
12770 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ral..        ///
12780 20 61 6e 64 20 6d 61 79 20 62 65 20 6f 76 65 72   and may be over
12790 77 72 69 74 74 65 6e 20 6f 72 20 64 65 61 6c 6c  written or deall
127a0 6f 63 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61  ocated as soon a
127b0 73 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  s the xBestIndex
127c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
127d0 74 68 6f 64 20 72 65 74 75 72 6e 73 2e 20 49 66  thod returns. If
127e0 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 20   the xBestIndex 
127f0 6d 65 74 68 6f 64 20 6e 65 65 64 73 20 74 6f 20  method needs to 
12800 72 65 6d 65 6d 62 65 72 20 61 6e 79 20 70 61 72  remember any par
12810 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  t..        /// o
12820 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
12830 64 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75  dex_info structu
12840 72 65 2c 20 69 74 20 73 68 6f 75 6c 64 20 6d 61  re, it should ma
12850 6b 65 20 61 20 63 6f 70 79 2e 20 43 61 72 65 0d  ke a copy. Care.
12860 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 75 73  .        /// mus
12870 74 20 62 65 20 74 61 6b 65 20 74 6f 20 73 74 6f  t be take to sto
12880 72 65 20 74 68 65 20 63 6f 70 79 20 69 6e 20 61  re the copy in a
12890 20 70 6c 61 63 65 20 77 68 65 72 65 20 69 74 20   place where it 
128a0 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
128b0 20 2f 2f 2f 20 64 65 61 6c 6c 6f 63 61 74 65 64   /// deallocated
128c0 2c 20 73 75 63 68 20 61 73 20 69 6e 20 74 68 65  , such as in the
128d0 20 69 64 78 53 74 72 20 66 69 65 6c 64 20 77 69   idxStr field wi
128e0 74 68 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78  th needToFreeIdx
128f0 53 74 72 20 73 65 74 0d 0a 20 20 20 20 20 20 20  Str set..       
12900 20 2f 2f 2f 20 74 6f 20 31 2e 0d 0a 20 20 20 20   /// to 1...    
12910 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
12920 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
12930 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
12940 20 4e 6f 74 65 20 74 68 61 74 20 78 42 65 73 74   Note that xBest
12950 49 6e 64 65 78 20 77 69 6c 6c 20 61 6c 77 61 79  Index will alway
12960 73 20 62 65 20 63 61 6c 6c 65 64 20 62 65 66 6f  s be called befo
12970 72 65 20 78 46 69 6c 74 65 72 2c 20 73 69 6e 63  re xFilter, sinc
12980 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
12990 68 65 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  he idxNum and id
129a0 78 53 74 72 20 6f 75 74 70 75 74 73 20 66 72 6f  xStr outputs fro
129b0 6d 20 78 42 65 73 74 49 6e 64 65 78 20 61 72 65  m xBestIndex are
129c0 20 72 65 71 75 69 72 65 64 20 69 6e 70 75 74 73   required inputs
129d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
129e0 20 78 46 69 6c 74 65 72 2e 20 48 6f 77 65 76 65   xFilter. Howeve
129f0 72 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 67  r, there is no g
12a00 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 78 46  uarantee that xF
12a10 69 6c 74 65 72 20 77 69 6c 6c 20 62 65 0d 0a 20  ilter will be.. 
12a20 20 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65         /// calle
12a30 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
12a40 63 63 65 73 73 66 75 6c 20 78 42 65 73 74 49 6e  ccessful xBestIn
12a50 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  dex...        //
12a60 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
12a70 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
12a80 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78         /// The x
12a90 42 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64  BestIndex method
12aa0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
12ab0 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
12ac0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
12ad0 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
12ae0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
12af0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
12b00 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
12b10 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 31 20 49 6e      /// 2.3.1 In
12b20 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f  puts..        //
12b30 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
12b40 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
12b50 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
12b60 61 69 6e 20 74 68 69 6e 67 20 74 68 61 74 20 74  ain thing that t
12b70 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69  he SQLite core i
12b80 73 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 6d 6d  s trying to comm
12b90 75 6e 69 63 61 74 65 20 74 6f 20 74 68 65 0d 0a  unicate to the..
12ba0 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74          /// virt
12bb0 75 61 6c 20 74 61 62 6c 65 20 69 73 20 74 68 65  ual table is the
12bc0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61   constraints tha
12bd0 74 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  t are available 
12be0 74 6f 20 6c 69 6d 69 74 20 74 68 65 0d 0a 20 20  to limit the..  
12bf0 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72        /// number
12c00 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 6e 65   of rows that ne
12c10 65 64 20 74 6f 20 62 65 20 73 65 61 72 63 68 65  ed to be searche
12c20 64 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69  d. The aConstrai
12c30 6e 74 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20  nt[] array..    
12c40 20 20 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73      /// contains
12c50 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
12c60 61 63 68 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  ach constraint. 
12c70 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20 65 78  There will be ex
12c80 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 2f  actly..        /
12c90 2f 2f 20 6e 43 6f 6e 73 74 72 61 69 6e 74 20 65  // nConstraint e
12ca0 6e 74 72 69 65 73 20 69 6e 20 74 68 61 74 20 61  ntries in that a
12cb0 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rray...        /
12cc0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12cd0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
12ce0 20 20 20 20 20 20 20 20 2f 2f 2f 20 45 61 63 68          /// Each
12cf0 20 63 6f 6e 73 74 72 61 69 6e 74 20 77 69 6c 6c   constraint will
12d00 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
12d10 20 74 65 72 6d 20 69 6e 20 74 68 65 20 57 48 45   term in the WHE
12d20 52 45 20 63 6c 61 75 73 65 20 6f 72 20 69 6e 0d  RE clause or in.
12d30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 20 55  .        /// a U
12d40 53 49 4e 47 20 6f 72 20 4f 4e 20 63 6c 61 75 73  SING or ON claus
12d50 65 20 74 68 61 74 20 69 73 20 6f 66 20 74 68 65  e that is of the
12d60 20 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 2f   form..        /
12d70 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
12d80 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
12d90 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
12da0 63 6f 6c 75 6d 6e 20 4f 50 20 45 58 50 52 0d 0a  column OP EXPR..
12db0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f          /// </co
12dc0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
12dd0 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
12de0 20 2f 2f 2f 20 57 68 65 72 65 20 22 63 6f 6c 75   /// Where "colu
12df0 6d 6e 22 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20  mn" is a column 
12e00 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  in the virtual t
12e10 61 62 6c 65 2c 20 4f 50 20 69 73 20 61 6e 20 6f  able, OP is an o
12e20 70 65 72 61 74 6f 72 0d 0a 20 20 20 20 20 20 20  perator..       
12e30 20 2f 2f 2f 20 6c 69 6b 65 20 22 3d 22 20 6f 72   /// like "=" or
12e40 20 22 26 6c 74 3b 22 2c 20 61 6e 64 20 45 58 50   "&lt;", and EXP
12e50 52 20 69 73 20 61 6e 20 61 72 62 69 74 72 61 72  R is an arbitrar
12e60 79 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 53 6f  y expression. So
12e70 2c 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  , for..        /
12e80 2f 2f 20 65 78 61 6d 70 6c 65 2c 20 69 66 20 74  // example, if t
12e90 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
12ea0 63 6f 6e 74 61 69 6e 65 64 20 61 20 74 65 72 6d  contained a term
12eb0 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20 20   like this:..   
12ec0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
12ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63  ..        /// <c
12ee0 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode>..        //
12ef0 2f 20 20 20 20 20 20 20 20 20 20 61 20 3d 20 35  /          a = 5
12f00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
12f10 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
12f20 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
12f30 20 20 20 2f 2f 2f 20 54 68 65 6e 20 6f 6e 65 20     /// Then one 
12f40 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
12f50 74 73 20 77 6f 75 6c 64 20 62 65 20 6f 6e 20 74  ts would be on t
12f60 68 65 20 22 61 22 20 63 6f 6c 75 6d 6e 20 77 69  he "a" column wi
12f70 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
12f80 6f 70 65 72 61 74 6f 72 20 22 3d 22 20 61 6e 64  operator "=" and
12f90 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
12fa0 66 20 22 35 22 2e 20 43 6f 6e 73 74 72 61 69 6e  f "5". Constrain
12fb0 74 73 20 6e 65 65 64 20 6e 6f 74 20 68 61 76 65  ts need not have
12fc0 20 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20   a..        /// 
12fd0 6c 69 74 65 72 61 6c 20 72 65 70 72 65 73 65 6e  literal represen
12fe0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 48  tation of the WH
12ff0 45 52 45 20 63 6c 61 75 73 65 2e 20 54 68 65 20  ERE clause. The 
13000 71 75 65 72 79 20 6f 70 74 69 6d 69 7a 65 72 0d  query optimizer.
13010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 69 67  .        /// mig
13020 68 74 20 6d 61 6b 65 20 74 72 61 6e 73 66 6f 72  ht make transfor
13030 6d 61 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 57  mations to the W
13040 48 45 52 45 20 63 6c 61 75 73 65 20 69 6e 20 6f  HERE clause in o
13050 72 64 65 72 20 74 6f 20 65 78 74 72 61 63 74 0d  rder to extract.
13060 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 20  .        /// as 
13070 6d 61 6e 79 20 63 6f 6e 73 74 72 61 69 6e 74 73  many constraints
13080 20 61 73 20 69 74 20 63 61 6e 2e 20 53 6f 2c 20   as it can. So, 
13090 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 69 66 20  for example, if 
130a0 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
130b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
130c0 6e 74 61 69 6e 65 64 20 73 6f 6d 65 74 68 69 6e  ntained somethin
130d0 67 20 6c 69 6b 65 20 74 68 69 73 3a 0d 0a 20 20  g like this:..  
130e0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
130f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
13100 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
13110 2f 2f 20 20 20 20 20 20 20 20 20 20 78 20 42 45  //          x BE
13120 54 57 45 45 4e 20 31 30 20 41 4e 44 20 31 30 30  TWEEN 10 AND 100
13130 20 41 4e 44 20 39 39 39 26 67 74 3b 79 0d 0a 20   AND 999&gt;y.. 
13140 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
13150 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
13160 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
13170 2f 2f 2f 20 54 68 65 20 71 75 65 72 79 20 6f 70  /// The query op
13180 74 69 6d 69 7a 65 72 20 6d 69 67 68 74 20 74 72  timizer might tr
13190 61 6e 73 6c 61 74 65 20 74 68 69 73 20 69 6e 74  anslate this int
131a0 6f 20 74 68 72 65 65 20 73 65 70 61 72 61 74 65  o three separate
131b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
131c0 6e 73 74 72 61 69 6e 74 73 3a 0d 0a 20 20 20 20  nstraints:..    
131d0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d      /// </para>.
131e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 63 6f  .        /// <co
131f0 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de>..        ///
13200 20 20 20 20 20 20 20 20 20 20 78 20 26 67 74 3b            x &gt;
13210 3d 20 31 30 0d 0a 20 20 20 20 20 20 20 20 2f 2f  = 10..        //
13220 2f 20 20 20 20 20 20 20 20 20 20 78 20 26 6c 74  /          x &lt
13230 3b 3d 20 31 30 30 0d 0a 20 20 20 20 20 20 20 20  ;= 100..        
13240 2f 2f 2f 20 20 20 20 20 20 20 20 20 20 79 20 26  ///          y &
13250 6c 74 3b 20 39 39 39 0d 0a 20 20 20 20 20 20 20  lt; 999..       
13260 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
13270 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
13280 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 6f  ..        /// Fo
13290 72 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e  r each constrain
132a0 74 2c 20 74 68 65 20 61 43 6f 6e 73 74 72 61 69  t, the aConstrai
132b0 6e 74 5b 5d 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  nt[].iColumn fie
132c0 6c 64 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20  ld indicates..  
132d0 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20        /// which 
132e0 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 6f  column appears o
132f0 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20  n the left-hand 
13300 73 69 64 65 20 6f 66 20 74 68 65 20 63 6f 6e 73  side of the cons
13310 74 72 61 69 6e 74 2e 20 54 68 65 0d 0a 20 20 20  traint. The..   
13320 20 20 20 20 20 2f 2f 2f 20 66 69 72 73 74 20 63       /// first c
13330 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 76 69 72  olumn of the vir
13340 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 63 6f  tual table is co
13350 6c 75 6d 6e 20 30 2e 20 54 68 65 20 72 6f 77 69  lumn 0. The rowi
13360 64 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  d of the..      
13370 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74 61    /// virtual ta
13380 62 6c 65 20 69 73 20 63 6f 6c 75 6d 6e 20 2d 31  ble is column -1
13390 2e 20 54 68 65 20 61 43 6f 6e 73 74 72 61 69 6e  . The aConstrain
133a0 74 5b 5d 2e 6f 70 20 66 69 65 6c 64 20 69 6e 64  t[].op field ind
133b0 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20  icates..        
133c0 2f 2f 2f 20 77 68 69 63 68 20 6f 70 65 72 61 74  /// which operat
133d0 6f 72 20 69 73 20 75 73 65 64 2e 20 54 68 65 20  or is used. The 
133e0 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
133f0 53 54 52 41 49 4e 54 5f 2a 20 63 6f 6e 73 74 61  STRAINT_* consta
13400 6e 74 73 20 6d 61 70 0d 0a 20 20 20 20 20 20 20  nts map..       
13410 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 63 6f 6e   /// integer con
13420 73 74 61 6e 74 73 20 69 6e 74 6f 20 6f 70 65 72  stants into oper
13430 61 74 6f 72 20 76 61 6c 75 65 73 2e 20 43 6f 6c  ator values. Col
13440 75 6d 6e 73 20 6f 63 63 75 72 20 69 6e 20 74 68  umns occur in th
13450 65 20 6f 72 64 65 72 0d 0a 20 20 20 20 20 20 20  e order..       
13460 20 2f 2f 2f 20 74 68 65 79 20 77 65 72 65 20 64   /// they were d
13470 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 63 61  efined by the ca
13480 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 64 65  ll to sqlite3_de
13490 63 6c 61 72 65 5f 76 74 61 62 28 29 20 69 6e 20  clare_vtab() in 
134a0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
134b0 20 78 43 72 65 61 74 65 20 6f 72 20 78 43 6f 6e   xCreate or xCon
134c0 6e 65 63 74 20 6d 65 74 68 6f 64 2e 20 48 69 64  nect method. Hid
134d0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  den columns are 
134e0 63 6f 75 6e 74 65 64 20 77 68 65 6e 0d 0a 20 20  counted when..  
134f0 20 20 20 20 20 20 2f 2f 2f 20 64 65 74 65 72 6d        /// determ
13500 69 6e 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  ining the column
13510 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20   index...       
13520 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
13530 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
13540 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
13550 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d 20  e aConstraint[] 
13560 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 73 20 69  array contains i
13570 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
13580 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e 74 73   all constraints
13590 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
135a0 61 74 20 61 70 70 6c 79 20 74 6f 20 74 68 65 20  at apply to the 
135b0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 42  virtual table. B
135c0 75 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 63  ut some of the c
135d0 6f 6e 73 74 72 61 69 6e 74 73 20 6d 69 67 68 74  onstraints might
135e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f  ..        /// no
135f0 74 20 62 65 20 75 73 61 62 6c 65 20 62 65 63 61  t be usable beca
13600 75 73 65 20 6f 66 20 74 68 65 20 77 61 79 20 74  use of the way t
13610 61 62 6c 65 73 20 61 72 65 20 6f 72 64 65 72 65  ables are ordere
13620 64 20 69 6e 20 61 20 6a 6f 69 6e 2e 20 54 68 65  d in a join. The
13630 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 42  ..        /// xB
13640 65 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 20  estIndex method 
13650 6d 75 73 74 20 74 68 65 72 65 66 6f 72 65 20 6f  must therefore o
13660 6e 6c 79 20 63 6f 6e 73 69 64 65 72 20 63 6f 6e  nly consider con
13670 73 74 72 61 69 6e 74 73 20 74 68 61 74 0d 0a 20  straints that.. 
13680 20 20 20 20 20 20 20 2f 2f 2f 20 68 61 76 65 20         /// have 
13690 61 6e 20 61 43 6f 6e 73 74 72 61 69 6e 74 5b 5d  an aConstraint[]
136a0 2e 75 73 61 62 6c 65 20 66 6c 61 67 20 77 68 69  .usable flag whi
136b0 63 68 20 69 73 20 74 72 75 65 2e 0d 0a 20 20 20  ch is true...   
136c0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
136d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
136e0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
136f0 2f 20 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f  / In addition to
13700 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f   WHERE clause co
13710 6e 73 74 72 61 69 6e 74 73 2c 20 74 68 65 20 53  nstraints, the S
13720 51 4c 69 74 65 20 63 6f 72 65 20 61 6c 73 6f 20  QLite core also 
13730 74 65 6c 6c 73 0d 0a 20 20 20 20 20 20 20 20 2f  tells..        /
13740 2f 2f 20 74 68 65 20 78 42 65 73 74 49 6e 64 65  // the xBestInde
13750 78 20 6d 65 74 68 6f 64 20 61 62 6f 75 74 20 74  x method about t
13760 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
13770 73 65 2e 20 28 49 6e 20 61 6e 20 61 67 67 72 65  se. (In an aggre
13780 67 61 74 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gate..        //
13790 2f 20 71 75 65 72 79 2c 20 74 68 65 20 53 51 4c  / query, the SQL
137a0 69 74 65 20 63 6f 72 65 20 6d 69 67 68 74 20 70  ite core might p
137b0 75 74 20 69 6e 20 47 52 4f 55 50 20 42 59 20 63  ut in GROUP BY c
137c0 6c 61 75 73 65 20 69 6e 66 6f 72 6d 61 74 69 6f  lause informatio
137d0 6e 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n in..        //
137e0 2f 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 4f  / place of the O
137f0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
13800 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 62 75 74 20  nformation, but 
13810 74 68 69 73 20 66 61 63 74 20 73 68 6f 75 6c 64  this fact should
13820 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f   not..        //
13830 2f 20 6d 61 6b 65 20 61 6e 79 20 64 69 66 66 65  / make any diffe
13840 72 65 6e 63 65 20 74 6f 20 74 68 65 20 78 42 65  rence to the xBe
13850 73 74 49 6e 64 65 78 20 6d 65 74 68 6f 64 2e 29  stIndex method.)
13860 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
13870 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
13880 2f 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  / ORDER BY claus
13890 65 20 61 72 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  e are columns in
138a0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
138b0 6c 65 2c 20 74 68 65 6e 20 6e 4f 72 64 65 72 42  le, then nOrderB
138c0 79 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  y..        /// w
138d0 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65  ill be the numbe
138e0 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20 74 68  r of terms in th
138f0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
13900 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20  e and the..     
13910 20 20 20 2f 2f 2f 20 61 4f 72 64 65 72 42 79 5b     /// aOrderBy[
13920 5d 20 61 72 72 61 79 20 77 69 6c 6c 20 69 64 65  ] array will ide
13930 6e 74 69 66 79 20 74 68 65 20 63 6f 6c 75 6d 6e  ntify the column
13940 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 69   for each term i
13950 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  n the..        /
13960 2f 2f 20 6f 72 64 65 72 20 62 79 20 63 6c 61 75  // order by clau
13970 73 65 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  se and whether o
13980 72 20 6e 6f 74 20 74 68 61 74 20 63 6f 6c 75 6d  r not that colum
13990 6e 20 69 73 20 41 53 43 20 6f 72 20 44 45 53 43  n is ASC or DESC
139a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
139b0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
139c0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
139d0 20 20 20 20 2f 2f 2f 20 32 2e 33 2e 32 20 4f 75      /// 2.3.2 Ou
139e0 74 70 75 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tputs..        /
139f0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
13a00 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
13a10 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 69 76 65          /// Give
13a20 6e 20 61 6c 6c 20 6f 66 20 74 68 65 20 69 6e 66  n all of the inf
13a30 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 2c 20  ormation above, 
13a40 74 68 65 20 6a 6f 62 20 6f 66 20 74 68 65 20 78  the job of the x
13a50 42 65 73 74 49 6e 64 65 78 0d 0a 20 20 20 20 20  BestIndex..     
13a60 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 20 69 74     /// method it
13a70 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20 74   to figure out t
13a80 68 65 20 62 65 73 74 20 77 61 79 20 74 6f 20 73  he best way to s
13a90 65 61 72 63 68 20 74 68 65 20 76 69 72 74 75 61  earch the virtua
13aa0 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  l table...      
13ab0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13ac0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13ad0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
13ae0 68 65 20 78 42 65 73 74 49 6e 64 65 78 20 6d 65  he xBestIndex me
13af0 74 68 6f 64 20 66 69 6c 6c 73 20 74 68 65 20 69  thod fills the i
13b00 64 78 4e 75 6d 20 61 6e 64 20 69 64 78 53 74 72  dxNum and idxStr
13b10 20 66 69 65 6c 64 73 20 77 69 74 68 0d 0a 20 20   fields with..  
13b20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d        /// inform
13b30 61 74 69 6f 6e 20 74 68 61 74 20 63 6f 6d 6d 75  ation that commu
13b40 6e 69 63 61 74 65 73 20 61 6e 20 69 6e 64 65 78  nicates an index
13b50 69 6e 67 20 73 74 72 61 74 65 67 79 20 74 6f 20  ing strategy to 
13b60 74 68 65 20 78 46 69 6c 74 65 72 0d 0a 20 20 20  the xFilter..   
13b70 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
13b80 20 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   The information
13b90 20 69 6e 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   in idxNum and i
13ba0 64 78 53 74 72 20 69 73 20 61 72 62 69 74 72 61  dxStr is arbitra
13bb0 72 79 20 61 73 20 66 61 72 20 61 73 0d 0a 20 20  ry as far as..  
13bc0 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 51        /// the SQ
13bd0 4c 69 74 65 20 63 6f 72 65 20 69 73 20 63 6f 6e  Lite core is con
13be0 63 65 72 6e 65 64 2e 20 54 68 65 20 53 51 4c 69  cerned. The SQLi
13bf0 74 65 20 63 6f 72 65 20 6a 75 73 74 20 63 6f 70  te core just cop
13c00 69 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ies the..       
13c10 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   /// information
13c20 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
13c30 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
13c40 41 6e 79 20 64 65 73 69 72 65 64 20 6d 65 61 6e  Any desired mean
13c50 69 6e 67 20 63 61 6e 0d 0a 20 20 20 20 20 20 20  ing can..       
13c60 20 2f 2f 2f 20 62 65 20 61 73 73 69 67 6e 65 64   /// be assigned
13c70 20 74 6f 20 69 64 78 4e 75 6d 20 61 6e 64 20 69   to idxNum and i
13c80 64 78 53 74 72 20 61 73 20 6c 6f 6e 67 20 61 73  dxStr as long as
13c90 20 78 42 65 73 74 49 6e 64 65 78 20 61 6e 64 20   xBestIndex and 
13ca0 78 46 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20  xFilter..       
13cb0 20 2f 2f 2f 20 61 67 72 65 65 20 6f 6e 20 77 68   /// agree on wh
13cc0 61 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20  at that meaning 
13cd0 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  is...        ///
13ce0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
13cf0 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
13d00 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 64        /// The id
13d10 78 53 74 72 20 76 61 6c 75 65 20 6d 61 79 20 62  xStr value may b
13d20 65 20 61 20 73 74 72 69 6e 67 20 6f 62 74 61 69  e a string obtai
13d30 6e 65 64 20 66 72 6f 6d 20 61 6e 20 53 51 4c 69  ned from an SQLi
13d40 74 65 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  te memory..     
13d50 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f     /// allocatio
13d60 6e 20 66 75 6e 63 74 69 6f 6e 20 73 75 63 68 20  n function such 
13d70 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  as sqlite3_mprin
13d80 74 66 28 29 2e 20 49 66 20 74 68 69 73 20 69 73  tf(). If this is
13d90 20 74 68 65 20 63 61 73 65 2c 0d 0a 20 20 20 20   the case,..    
13da0 20 20 20 20 2f 2f 2f 20 74 68 65 6e 20 74 68 65      /// then the
13db0 20 6e 65 65 64 54 6f 46 72 65 65 49 64 78 53 74   needToFreeIdxSt
13dc0 72 20 66 6c 61 67 20 6d 75 73 74 20 62 65 20 73  r flag must be s
13dd0 65 74 20 74 6f 20 74 72 75 65 20 73 6f 20 74 68  et to true so th
13de0 61 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  at the..        
13df0 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20  /// SQLite core 
13e00 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63 61 6c  will know to cal
13e10 6c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 29  l sqlite3_free()
13e20 20 6f 6e 20 74 68 61 74 20 73 74 72 69 6e 67 20   on that string 
13e30 77 68 65 6e 20 69 74 0d 0a 20 20 20 20 20 20 20  when it..       
13e40 20 2f 2f 2f 20 68 61 73 20 66 69 6e 69 73 68 65   /// has finishe
13e50 64 20 77 69 74 68 20 69 74 2c 20 61 6e 64 20 74  d with it, and t
13e60 68 75 73 20 61 76 6f 69 64 20 61 20 6d 65 6d 6f  hus avoid a memo
13e70 72 79 20 6c 65 61 6b 2e 0d 0a 20 20 20 20 20 20  ry leak...      
13e80 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
13e90 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
13ea0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
13eb0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
13ec0 62 6c 65 20 77 69 6c 6c 20 6f 75 74 70 75 74 20  ble will output 
13ed0 72 6f 77 73 20 69 6e 20 74 68 65 20 6f 72 64 65  rows in the orde
13ee0 72 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  r specified by t
13ef0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
13f00 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2c  ORDER BY clause,
13f10 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65 72 42   then the orderB
13f20 79 43 6f 6e 73 75 6d 65 64 20 66 6c 61 67 20 6d  yConsumed flag m
13f30 61 79 20 62 65 20 73 65 74 20 74 6f 20 74 72 75  ay be set to tru
13f40 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
13f50 49 66 20 74 68 65 20 6f 75 74 70 75 74 20 69 73  If the output is
13f60 20 6e 6f 74 20 61 75 74 6f 6d 61 74 69 63 61 6c   not automatical
13f70 6c 79 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63  ly in the correc
13f80 74 20 6f 72 64 65 72 20 74 68 65 6e 0d 0a 20 20  t order then..  
13f90 20 20 20 20 20 20 2f 2f 2f 20 6f 72 64 65 72 42        /// orderB
13fa0 79 43 6f 6e 73 75 6d 65 64 20 6d 75 73 74 20 62  yConsumed must b
13fb0 65 20 6c 65 66 74 20 69 6e 20 69 74 73 20 64 65  e left in its de
13fc0 66 61 75 6c 74 20 66 61 6c 73 65 20 73 65 74 74  fault false sett
13fd0 69 6e 67 2e 20 54 68 69 73 0d 0a 20 20 20 20 20  ing. This..     
13fe0 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 69 6e 64 69     /// will indi
13ff0 63 61 74 65 20 74 6f 20 74 68 65 20 53 51 4c 69  cate to the SQLi
14000 74 65 20 63 6f 72 65 20 74 68 61 74 20 69 74 20  te core that it 
14010 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 64 6f 20  will need to do 
14020 61 20 73 65 70 61 72 61 74 65 0d 0a 20 20 20 20  a separate..    
14030 20 20 20 20 2f 2f 2f 20 73 6f 72 74 69 6e 67 20      /// sorting 
14040 70 61 73 73 20 6f 76 65 72 20 74 68 65 20 64 61  pass over the da
14050 74 61 20 61 66 74 65 72 20 69 74 20 63 6f 6d 65  ta after it come
14060 73 20 6f 75 74 20 6f 66 20 74 68 65 20 76 69 72  s out of the vir
14070 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
14080 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
14090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
140a0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
140b0 2f 20 54 68 65 20 65 73 74 69 6d 61 74 65 64 43  / The estimatedC
140c0 6f 73 74 20 66 69 65 6c 64 20 73 68 6f 75 6c 64  ost field should
140d0 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 65   be set to the e
140e0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
140f0 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
14100 64 69 73 6b 20 61 63 63 65 73 73 20 6f 70 65 72  disk access oper
14110 61 74 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20  ations required 
14120 74 6f 20 65 78 65 63 75 74 65 20 74 68 69 73 20  to execute this 
14130 71 75 65 72 79 20 61 67 61 69 6e 73 74 20 74 68  query against th
14140 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
14150 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 54 68  irtual table. Th
14160 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 77 69  e SQLite core wi
14170 6c 6c 20 6f 66 74 65 6e 20 63 61 6c 6c 20 78 42  ll often call xB
14180 65 73 74 49 6e 64 65 78 20 6d 75 6c 74 69 70 6c  estIndex multipl
14190 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  e..        /// t
141a0 69 6d 65 73 20 77 69 74 68 20 64 69 66 66 65 72  imes with differ
141b0 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c  ent constraints,
141c0 20 6f 62 74 61 69 6e 20 6d 75 6c 74 69 70 6c 65   obtain multiple
141d0 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 2c   cost estimates,
141e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
141f0 65 6e 20 63 68 6f 6f 73 65 20 74 68 65 20 71 75  en choose the qu
14200 65 72 79 20 70 6c 61 6e 20 74 68 61 74 20 67 69  ery plan that gi
14210 76 65 73 20 74 68 65 20 6c 6f 77 65 73 74 20 65  ves the lowest e
14220 73 74 69 6d 61 74 65 2e 0d 0a 20 20 20 20 20 20  stimate...      
14230 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
14240 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14250 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
14260 68 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73  he aConstraintUs
14270 61 67 65 5b 5d 20 61 72 72 61 79 20 63 6f 6e 74  age[] array cont
14280 61 69 6e 73 20 6f 6e 65 20 65 6c 65 6d 65 6e 74  ains one element
14290 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
142a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 43  ..        /// nC
142b0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6e 73 74 72  onstraint constr
142c0 61 69 6e 74 73 20 69 6e 20 74 68 65 20 69 6e 70  aints in the inp
142d0 75 74 73 20 73 65 63 74 69 6f 6e 20 6f 66 20 74  uts section of t
142e0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
142f0 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
14300 66 6f 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  fo structure. Th
14310 65 20 61 43 6f 6e 73 74 72 61 69 6e 74 55 73 61  e aConstraintUsa
14320 67 65 5b 5d 20 61 72 72 61 79 20 69 73 20 75 73  ge[] array is us
14330 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
14340 62 79 20 78 42 65 73 74 49 6e 64 65 78 20 74 6f  by xBestIndex to
14350 20 74 65 6c 6c 20 74 68 65 20 63 6f 72 65 20 68   tell the core h
14360 6f 77 20 69 74 20 69 73 20 75 73 69 6e 67 20 74  ow it is using t
14370 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d  he constraints..
14380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
14390 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
143a0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
143b0 20 20 2f 2f 2f 20 54 68 65 20 78 42 65 73 74 49    /// The xBestI
143c0 6e 64 65 78 20 6d 65 74 68 6f 64 20 6d 61 79 20  ndex method may 
143d0 73 65 74 20 61 43 6f 6e 73 74 72 61 69 6e 74 55  set aConstraintU
143e0 73 61 67 65 5b 5d 2e 61 72 67 76 49 6e 64 65 78  sage[].argvIndex
143f0 20 65 6e 74 72 69 65 73 0d 0a 20 20 20 20 20 20   entries..      
14400 20 20 2f 2f 2f 20 74 6f 20 76 61 6c 75 65 73 20    /// to values 
14410 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 6e 65  greater than one
14420 2e 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 65 6e  . Exactly one en
14430 74 72 79 20 73 68 6f 75 6c 64 20 62 65 20 73 65  try should be se
14440 74 20 74 6f 20 31 2c 0d 0a 20 20 20 20 20 20 20  t to 1,..       
14450 20 2f 2f 2f 20 61 6e 6f 74 68 65 72 20 74 6f 20   /// another to 
14460 32 2c 20 61 6e 6f 74 68 65 72 20 74 6f 20 33 2c  2, another to 3,
14470 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 20 75 70   and so forth up
14480 20 74 6f 20 61 73 20 6d 61 6e 79 20 6f 72 20 61   to as many or a
14490 73 20 66 65 77 20 61 73 0d 0a 20 20 20 20 20 20  s few as..      
144a0 20 20 2f 2f 2f 20 74 68 65 20 78 42 65 73 74 49    /// the xBestI
144b0 6e 64 65 78 20 6d 65 74 68 6f 64 20 77 61 6e 74  ndex method want
144c0 73 2e 20 54 68 65 20 45 58 50 52 20 6f 66 20 74  s. The EXPR of t
144d0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
144e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
144f0 6e 73 74 72 61 69 6e 74 73 20 77 69 6c 6c 20 74  nstraints will t
14500 68 65 6e 20 62 65 20 70 61 73 73 65 64 20 69 6e  hen be passed in
14510 20 61 73 20 74 68 65 20 61 72 67 76 5b 5d 20 70   as the argv[] p
14520 61 72 61 6d 65 74 65 72 73 20 74 6f 0d 0a 20 20  arameters to..  
14530 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
14540 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
14550 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
14560 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
14570 20 20 20 20 20 2f 2f 2f 20 46 6f 72 20 65 78 61       /// For exa
14580 6d 70 6c 65 2c 20 69 66 20 74 68 65 20 61 43 6f  mple, if the aCo
14590 6e 73 74 72 61 69 6e 74 5b 33 5d 2e 61 72 67 76  nstraint[3].argv
145a0 49 6e 64 65 78 20 69 73 20 73 65 74 20 74 6f 20  Index is set to 
145b0 31 2c 20 74 68 65 6e 20 77 68 65 6e 0d 0a 20 20  1, then when..  
145c0 20 20 20 20 20 20 2f 2f 2f 20 78 46 69 6c 74 65        /// xFilte
145d0 72 20 69 73 20 63 61 6c 6c 65 64 2c 20 74 68 65  r is called, the
145e0 20 61 72 67 76 5b 30 5d 20 70 61 73 73 65 64 20   argv[0] passed 
145f0 74 6f 20 78 46 69 6c 74 65 72 20 77 69 6c 6c 20  to xFilter will 
14600 68 61 76 65 20 74 68 65 20 45 58 50 52 0d 0a 20  have the EXPR.. 
14610 20 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65         /// value
14620 20 6f 66 20 74 68 65 20 61 43 6f 6e 73 74 72 61   of the aConstra
14630 69 6e 74 5b 33 5d 20 63 6f 6e 73 74 72 61 69 6e  int[3] constrain
14640 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
14650 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
14660 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
14670 20 20 20 20 20 2f 2f 2f 20 42 79 20 64 65 66 61       /// By defa
14680 75 6c 74 2c 20 74 68 65 20 53 51 4c 69 74 65 20  ult, the SQLite 
14690 63 6f 72 65 20 64 6f 75 62 6c 65 20 63 68 65 63  core double chec
146a0 6b 73 20 61 6c 6c 20 63 6f 6e 73 74 72 61 69 6e  ks all constrain
146b0 74 73 20 6f 6e 20 65 61 63 68 0d 0a 20 20 20 20  ts on each..    
146c0 20 20 20 20 2f 2f 2f 20 72 6f 77 20 6f 66 20 74      /// row of t
146d0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
146e0 20 74 68 61 74 20 69 74 20 72 65 63 65 69 76 65   that it receive
146f0 73 2e 20 49 66 20 73 75 63 68 20 61 20 63 68 65  s. If such a che
14700 63 6b 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f  ck is..        /
14710 2f 2f 20 72 65 64 75 6e 64 61 6e 74 2c 20 74 68  // redundant, th
14720 65 20 78 42 65 73 74 46 69 6c 74 65 72 20 6d 65  e xBestFilter me
14730 74 68 6f 64 20 63 61 6e 20 73 75 70 70 72 65 73  thod can suppres
14740 73 20 74 68 61 74 20 64 6f 75 62 6c 65 2d 63 68  s that double-ch
14750 65 63 6b 20 62 79 0d 0a 20 20 20 20 20 20 20 20  eck by..        
14760 2f 2f 2f 20 73 65 74 74 69 6e 67 20 61 43 6f 6e  /// setting aCon
14770 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e 6f  straintUsage[].o
14780 6d 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  mit...        //
14790 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
147a0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
147b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
147c0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
147d0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
147e0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
147f0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
14800 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
14810 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
14820 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
14830 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
14840 61 72 61 6d 20 6e 61 6d 65 3d 22 70 49 6e 64 65  aram name="pInde
14850 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
14860 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
14870 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
14880 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 20 73 74  e3_index_info st
14890 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
148a0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
148b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
148c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
148d0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
148e0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
148f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
14900 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
14910 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
14920 64 65 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a  de xBestIndex(..
14930 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
14940 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20  tr pVtab,..     
14950 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 49         IntPtr pI
14960 6e 64 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ndex..          
14970 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
14980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
149d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
149e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
149f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
14a00 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65  / This method re
14a10 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e 65 63 74  leases a connect
14a20 69 6f 6e 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ion to a virtual
14a30 20 74 61 62 6c 65 2e 20 4f 6e 6c 79 20 74 68 65   table. Only the
14a40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
14a50 6c 69 74 65 33 5f 76 74 61 62 20 6f 62 6a 65 63  lite3_vtab objec
14a60 74 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  t is destroyed. 
14a70 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
14a80 65 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  e is not..      
14a90 20 20 2f 2f 2f 20 64 65 73 74 72 6f 79 65 64 20    /// destroyed 
14aa0 61 6e 64 20 61 6e 79 20 62 61 63 6b 69 6e 67 20  and any backing 
14ab0 73 74 6f 72 65 20 61 73 73 6f 63 69 61 74 65 64  store associated
14ac0 20 77 69 74 68 20 74 68 65 20 76 69 72 74 75 61   with the virtua
14ad0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
14ae0 20 2f 2f 2f 20 70 65 72 73 69 73 74 73 2e 20 54   /// persists. T
14af0 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64 6f 65  his method undoe
14b00 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20 78 43  s the work of xC
14b10 6f 6e 6e 65 63 74 2e 0d 0a 20 20 20 20 20 20 20  onnect...       
14b20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
14b30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
14b40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
14b50 69 73 20 6d 65 74 68 6f 64 20 69 73 20 61 20 64  is method is a d
14b60 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 61 20  estructor for a 
14b70 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
14b80 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
14b90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f  ..        /// Co
14ba0 6e 74 72 61 73 74 20 74 68 69 73 20 6d 65 74 68  ntrast this meth
14bb0 6f 64 20 77 69 74 68 20 78 44 65 73 74 72 6f 79  od with xDestroy
14bc0 2e 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 69  . The xDestroy i
14bd0 73 20 61 20 64 65 73 74 72 75 63 74 6f 72 0d 0a  s a destructor..
14be0 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20          /// for 
14bf0 74 68 65 20 65 6e 74 69 72 65 20 76 69 72 74 75  the entire virtu
14c00 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  al table...     
14c10 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
14c20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
14c30 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
14c40 54 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20  The xDisconnect 
14c50 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75 69 72  method is requir
14c60 65 64 20 66 6f 72 20 65 76 65 72 79 20 76 69 72  ed for every vir
14c70 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
14c80 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e      /// implemen
14c90 74 61 74 69 6f 6e 2c 20 74 68 6f 75 67 68 20 69  tation, though i
14ca0 74 20 69 73 20 61 63 63 65 70 74 61 62 6c 65 20  t is acceptable 
14cb0 66 6f 72 20 74 68 65 20 78 44 69 73 63 6f 6e 6e  for the xDisconn
14cc0 65 63 74 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ect and..       
14cd0 20 2f 2f 2f 20 78 44 65 73 74 72 6f 79 20 6d 65   /// xDestroy me
14ce0 74 68 6f 64 73 20 74 6f 20 62 65 20 74 68 65 20  thods to be the 
14cf0 73 61 6d 65 20 66 75 6e 63 74 69 6f 6e 20 69 66  same function if
14d00 20 74 68 61 74 20 6d 61 6b 65 73 20 73 65 6e 73   that makes sens
14d10 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f  e for..        /
14d20 2f 2f 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  // the particula
14d30 72 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  r virtual table.
14d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
14d50 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
14d60 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
14d70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
14d80 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d  m name="pVtab">.
14d90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
14da0 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20   native pointer 
14db0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  to the sqlite3_v
14dc0 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
14dd0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
14de0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
14df0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
14e00 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
14e10 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
14e20 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
14e30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
14e40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
14e50 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
14e60 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 0d 0a 20   xDisconnect(.. 
14e70 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
14e80 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
14e90 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
14ea0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14ef0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
14f00 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
14f10 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
14f20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
14f30 20 72 65 6c 65 61 73 65 73 20 61 20 63 6f 6e 6e   releases a conn
14f40 65 63 74 69 6f 6e 20 74 6f 20 61 20 76 69 72 74  ection to a virt
14f50 75 61 6c 20 74 61 62 6c 65 2c 20 6a 75 73 74 20  ual table, just 
14f60 6c 69 6b 65 20 74 68 65 0d 0a 20 20 20 20 20 20  like the..      
14f70 20 20 2f 2f 2f 20 78 44 69 73 63 6f 6e 6e 65 63    /// xDisconnec
14f80 74 20 6d 65 74 68 6f 64 2c 20 61 6e 64 20 69 74  t method, and it
14f90 20 61 6c 73 6f 20 64 65 73 74 72 6f 79 73 20 74   also destroys t
14fa0 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 74 61  he underlying ta
14fb0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
14fc0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
14fd0 20 54 68 69 73 20 6d 65 74 68 6f 64 20 75 6e 64   This method und
14fe0 6f 65 73 20 74 68 65 20 77 6f 72 6b 20 6f 66 20  oes the work of 
14ff0 78 43 72 65 61 74 65 2e 0d 0a 20 20 20 20 20 20  xCreate...      
15000 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
15010 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15020 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15030 68 65 20 78 44 69 73 63 6f 6e 6e 65 63 74 20 6d  he xDisconnect m
15040 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
15050 77 68 65 6e 65 76 65 72 20 61 20 64 61 74 61 62  whenever a datab
15060 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ase connection..
15070 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74          /// that
15080 20 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20   uses a virtual 
15090 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
150a0 20 54 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   The xDestroy me
150b0 74 68 6f 64 20 69 73 20 6f 6e 6c 79 0d 0a 20 20  thod is only..  
150c0 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64        /// called
150d0 20 77 68 65 6e 20 61 20 44 52 4f 50 20 54 41 42   when a DROP TAB
150e0 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  LE statement is 
150f0 65 78 65 63 75 74 65 64 20 61 67 61 69 6e 73 74  executed against
15100 20 74 68 65 20 76 69 72 74 75 61 6c 0d 0a 20 20   the virtual..  
15110 20 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e        /// table.
15120 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15130 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15140 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
15150 20 20 20 2f 2f 2f 20 54 68 65 20 78 44 65 73 74     /// The xDest
15160 72 6f 79 20 6d 65 74 68 6f 64 20 69 73 20 72 65  roy method is re
15170 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
15180 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
15190 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
151a0 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 6f 75  ementation, thou
151b0 67 68 20 69 74 20 69 73 20 61 63 63 65 70 74 61  gh it is accepta
151c0 62 6c 65 20 66 6f 72 20 74 68 65 20 78 44 69 73  ble for the xDis
151d0 63 6f 6e 6e 65 63 74 20 61 6e 64 0d 0a 20 20 20  connect and..   
151e0 20 20 20 20 20 2f 2f 2f 20 78 44 65 73 74 72 6f       /// xDestro
151f0 79 20 6d 65 74 68 6f 64 73 20 74 6f 20 62 65 20  y methods to be 
15200 74 68 65 20 73 61 6d 65 20 66 75 6e 63 74 69 6f  the same functio
15210 6e 20 69 66 20 74 68 61 74 20 6d 61 6b 65 73 20  n if that makes 
15220 73 65 6e 73 65 20 66 6f 72 0d 0a 20 20 20 20 20  sense for..     
15230 20 20 20 2f 2f 2f 20 74 68 65 20 70 61 72 74 69     /// the parti
15240 63 75 6c 61 72 20 76 69 72 74 75 61 6c 20 74 61  cular virtual ta
15250 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
15260 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
15270 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
15280 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
15290 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
152a0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  b">..        ///
152b0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
152c0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
152d0 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
152e0 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
152f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
15310 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
15320 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
15330 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
15340 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
15350 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
15360 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
15370 43 6f 64 65 20 78 44 65 73 74 72 6f 79 28 0d 0a  Code xDestroy(..
15380 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
15390 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20  tr pVtab..      
153a0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
153b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
153c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
15400 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
15410 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
15420 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
15430 20 20 2f 2f 2f 20 54 68 65 20 78 4f 70 65 6e 20    /// The xOpen 
15440 6d 65 74 68 6f 64 20 63 72 65 61 74 65 73 20 61  method creates a
15450 20 6e 65 77 20 63 75 72 73 6f 72 20 75 73 65 64   new cursor used
15460 20 66 6f 72 20 61 63 63 65 73 73 69 6e 67 20 28   for accessing (
15470 72 65 61 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  read..        //
15480 2f 20 61 6e 64 2f 6f 72 20 77 72 69 74 69 6e 67  / and/or writing
15490 29 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ) a virtual tabl
154a0 65 2e 20 41 20 73 75 63 63 65 73 73 66 75 6c 20  e. A successful 
154b0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
154c0 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
154d0 6d 65 74 68 6f 64 20 77 69 6c 6c 20 61 6c 6c 6f  method will allo
154e0 63 61 74 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  cate the memory 
154f0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
15500 76 74 61 62 5f 63 75 72 73 6f 72 20 28 6f 72 20  vtab_cursor (or 
15510 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  a..        /// s
15520 75 62 63 6c 61 73 73 29 2c 20 69 6e 69 74 69 61  ubclass), initia
15530 6c 69 7a 65 20 74 68 65 20 6e 65 77 20 6f 62 6a  lize the new obj
15540 65 63 74 2c 20 61 6e 64 20 6d 61 6b 65 20 2a 70  ect, and make *p
15550 70 43 75 72 73 6f 72 20 70 6f 69 6e 74 20 74 6f  pCursor point to
15560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
15570 65 20 6e 65 77 20 6f 62 6a 65 63 74 2e 20 54 68  e new object. Th
15580 65 20 73 75 63 63 65 73 73 66 75 6c 20 63 61 6c  e successful cal
15590 6c 20 74 68 65 6e 20 72 65 74 75 72 6e 73 20 53  l then returns S
155a0 51 4c 49 54 45 5f 4f 4b 2e 0d 0a 20 20 20 20 20  QLITE_OK...     
155b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
155c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
155d0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
155e0 46 6f 72 20 65 76 65 72 79 20 73 75 63 63 65 73  For every succes
155f0 73 66 75 6c 20 63 61 6c 6c 20 74 6f 20 74 68 69  sful call to thi
15600 73 20 6d 65 74 68 6f 64 2c 20 74 68 65 20 53 51  s method, the SQ
15610 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 0d 0a  Lite core will..
15620 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 74 65          /// late
15630 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 43 6c  r invoke the xCl
15640 6f 73 65 20 6d 65 74 68 6f 64 20 74 6f 20 64 65  ose method to de
15650 73 74 72 6f 79 20 74 68 65 20 61 6c 6c 6f 63 61  stroy the alloca
15660 74 65 64 20 63 75 72 73 6f 72 2e 0d 0a 20 20 20  ted cursor...   
15670 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
15680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
15690 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
156a0 2f 20 54 68 65 20 78 4f 70 65 6e 20 6d 65 74 68  / The xOpen meth
156b0 6f 64 20 6e 65 65 64 20 6e 6f 74 20 69 6e 69 74  od need not init
156c0 69 61 6c 69 7a 65 20 74 68 65 20 70 56 74 61 62  ialize the pVtab
156d0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 0d 0a 20   field of the.. 
156e0 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
156f0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 73  e3_vtab_cursor s
15700 74 72 75 63 74 75 72 65 2e 20 54 68 65 20 53 51  tructure. The SQ
15710 4c 69 74 65 20 63 6f 72 65 20 77 69 6c 6c 20 74  Lite core will t
15720 61 6b 65 20 63 61 72 65 20 6f 66 0d 0a 20 20 20  ake care of..   
15730 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 63 68       /// that ch
15740 6f 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ore automaticall
15750 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
15760 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
15770 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15780 20 20 20 20 20 2f 2f 2f 20 41 20 76 69 72 74 75       /// A virtu
15790 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
157a0 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  ntation must be 
157b0 61 62 6c 65 20 74 6f 20 73 75 70 70 6f 72 74 20  able to support 
157c0 61 6e 20 61 72 62 69 74 72 61 72 79 0d 0a 20 20  an arbitrary..  
157d0 20 20 20 20 20 20 2f 2f 2f 20 6e 75 6d 62 65 72        /// number
157e0 20 6f 66 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73   of simultaneous
157f0 6c 79 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2e  ly open cursors.
15800 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15810 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15820 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
15830 20 20 20 2f 2f 2f 20 57 68 65 6e 20 69 6e 69 74     /// When init
15840 69 61 6c 6c 79 20 6f 70 65 6e 65 64 2c 20 74 68  ially opened, th
15850 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 20 61  e cursor is in a
15860 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
15870 65 2e 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  e. The..        
15880 2f 2f 2f 20 53 51 4c 69 74 65 20 63 6f 72 65 20  /// SQLite core 
15890 77 69 6c 6c 20 69 6e 76 6f 6b 65 20 74 68 65 20  will invoke the 
158a0 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
158b0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  n the cursor pri
158c0 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f  or to..        /
158d0 2f 2f 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74  // any attempt t
158e0 6f 20 70 6f 73 69 74 69 6f 6e 20 6f 72 20 72 65  o position or re
158f0 61 64 20 66 72 6f 6d 20 74 68 65 20 63 75 72 73  ad from the curs
15900 6f 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  or...        ///
15910 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
15920 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
15930 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4f        /// The xO
15940 70 65 6e 20 6d 65 74 68 6f 64 20 69 73 20 72 65  pen method is re
15950 71 75 69 72 65 64 20 66 6f 72 20 65 76 65 72 79  quired for every
15960 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
15970 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
15980 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20  ementation...   
15990 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
159a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
159b0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
159c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
159d0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
159e0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
159f0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
15a00 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
15a10 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
15a20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15a30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
15a40 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15a50 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
15a60 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
15a70 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
15a80 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
15a90 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e 74 20  dified to point 
15aa0 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a 20 20  to the newly..  
15ab0 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74 65        /// create
15ac0 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  d native sqlite3
15ad0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
15ae0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
15af0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
15b00 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
15b10 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
15b20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
15b30 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
15b40 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
15b50 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
15b60 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
15b70 45 72 72 6f 72 43 6f 64 65 20 78 4f 70 65 6e 28  ErrorCode xOpen(
15b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
15b90 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
15ba0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
15bb0 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20  Ptr pCursor..   
15bc0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
15bd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15c20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
15c30 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
15c40 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
15c50 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 43 6c       /// The xCl
15c60 6f 73 65 20 6d 65 74 68 6f 64 20 63 6c 6f 73 65  ose method close
15c70 73 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  s a cursor previ
15c80 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 20  ously opened by 
15c90 78 4f 70 65 6e 2e 20 54 68 65 0d 0a 20 20 20 20  xOpen. The..    
15ca0 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 20 63      /// SQLite c
15cb0 6f 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ore will always 
15cc0 63 61 6c 6c 20 78 43 6c 6f 73 65 20 6f 6e 63 65  call xClose once
15cd0 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
15ce0 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 20   opened..       
15cf0 20 2f 2f 2f 20 75 73 69 6e 67 20 78 4f 70 65 6e   /// using xOpen
15d00 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
15d10 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
15d20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
15d30 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
15d40 68 6f 64 20 6d 75 73 74 20 72 65 6c 65 61 73 65  hod must release
15d50 20 61 6c 6c 20 72 65 73 6f 75 72 63 65 73 20 61   all resources a
15d60 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68 65 0d  llocated by the.
15d70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 72  .        /// cor
15d80 72 65 73 70 6f 6e 64 69 6e 67 20 78 4f 70 65 6e  responding xOpen
15d90 20 63 61 6c 6c 2e 20 54 68 65 20 72 6f 75 74 69   call. The routi
15da0 6e 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 63  ne will not be c
15db0 61 6c 6c 65 64 20 61 67 61 69 6e 20 65 76 65 6e  alled again even
15dc0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 66  ..        /// if
15dd0 20 69 74 20 72 65 74 75 72 6e 73 20 61 6e 20 65   it returns an e
15de0 72 72 6f 72 2e 20 54 68 65 20 53 51 4c 69 74 65  rror. The SQLite
15df0 20 63 6f 72 65 20 77 69 6c 6c 20 6e 6f 74 20 75   core will not u
15e00 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..        
15e10 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /// sqlite3_vtab
15e20 5f 63 75 72 73 6f 72 20 61 67 61 69 6e 20 61 66  _cursor again af
15e30 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20  ter it has been 
15e40 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  closed...       
15e50 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
15e60 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
15e70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
15e80 65 20 78 43 6c 6f 73 65 20 6d 65 74 68 6f 64 20  e xClose method 
15e90 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
15ea0 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
15eb0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
15ec0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
15ed0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
15ee0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
15ef0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
15f00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
15f10 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
15f20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
15f30 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
15f40 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
15f50 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
15f60 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
15f70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
15f80 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
15f90 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
15fa0 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
15fb0 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
15fc0 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
15fd0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
15fe0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
15ff0 45 72 72 6f 72 43 6f 64 65 20 78 43 6c 6f 73 65  ErrorCode xClose
16000 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  (..            I
16010 6e 74 50 74 72 20 70 43 75 72 73 6f 72 0d 0a 20  ntPtr pCursor.. 
16020 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
16030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
16040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
16090 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
160a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
160b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
160c0 6d 65 74 68 6f 64 20 62 65 67 69 6e 73 20 61 20  method begins a 
160d0 73 65 61 72 63 68 20 6f 66 20 61 20 76 69 72 74  search of a virt
160e0 75 61 6c 20 74 61 62 6c 65 2e 20 54 68 65 20 66  ual table. The f
160f0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 0d 0a 20  irst argument.. 
16100 20 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 61 20         /// is a 
16110 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 62 79  cursor opened by
16120 20 78 4f 70 65 6e 2e 20 54 68 65 20 6e 65 78 74   xOpen. The next
16130 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 20 64 65   two argument de
16140 66 69 6e 65 20 61 0d 0a 20 20 20 20 20 20 20 20  fine a..        
16150 2f 2f 2f 20 70 61 72 74 69 63 75 6c 61 72 20 73  /// particular s
16160 65 61 72 63 68 20 69 6e 64 65 78 20 70 72 65 76  earch index prev
16170 69 6f 75 73 6c 79 20 63 68 6f 73 65 6e 20 62 79  iously chosen by
16180 20 78 42 65 73 74 49 6e 64 65 78 2e 20 54 68 65   xBestIndex. The
16190 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70  ..        /// sp
161a0 65 63 69 66 69 63 20 6d 65 61 6e 69 6e 67 73 20  ecific meanings 
161b0 6f 66 20 69 64 78 4e 75 6d 20 61 6e 64 20 69 64  of idxNum and id
161c0 78 53 74 72 20 61 72 65 20 75 6e 69 6d 70 6f 72  xStr are unimpor
161d0 74 61 6e 74 20 61 73 20 6c 6f 6e 67 20 61 73 0d  tant as long as.
161e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 78 46 69  .        /// xFi
161f0 6c 74 65 72 20 61 6e 64 20 78 42 65 73 74 49 6e  lter and xBestIn
16200 64 65 78 20 61 67 72 65 65 20 6f 6e 20 77 68 61  dex agree on wha
16210 74 20 74 68 61 74 20 6d 65 61 6e 69 6e 67 20 69  t that meaning i
16220 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s...        /// 
16230 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
16240 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
16250 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 42 65       /// The xBe
16260 73 74 49 6e 64 65 78 20 66 75 6e 63 74 69 6f 6e  stIndex function
16270 20 6d 61 79 20 68 61 76 65 20 72 65 71 75 65 73   may have reques
16280 74 65 64 20 74 68 65 20 76 61 6c 75 65 73 20 6f  ted the values o
16290 66 20 63 65 72 74 61 69 6e 0d 0a 20 20 20 20 20  f certain..     
162a0 20 20 20 2f 2f 2f 20 65 78 70 72 65 73 73 69 6f     /// expressio
162b0 6e 73 20 75 73 69 6e 67 20 74 68 65 20 61 43 6f  ns using the aCo
162c0 6e 73 74 72 61 69 6e 74 55 73 61 67 65 5b 5d 2e  nstraintUsage[].
162d0 61 72 67 76 49 6e 64 65 78 20 76 61 6c 75 65 73  argvIndex values
162e0 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 20   of the..       
162f0 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 69 6e 64   /// sqlite3_ind
16300 65 78 5f 69 6e 66 6f 20 73 74 72 75 63 74 75 72  ex_info structur
16310 65 2e 20 54 68 6f 73 65 20 76 61 6c 75 65 73 20  e. Those values 
16320 61 72 65 20 70 61 73 73 65 64 20 74 6f 20 78 46  are passed to xF
16330 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 20 20 2f  ilter..        /
16340 2f 2f 20 75 73 69 6e 67 20 74 68 65 20 61 72 67  // using the arg
16350 63 20 61 6e 64 20 61 72 67 76 20 70 61 72 61 6d  c and argv param
16360 65 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  eters...        
16370 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
16380 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
16390 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49 66 20  .        /// If 
163a0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
163b0 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  e contains one o
163c0 72 20 6d 6f 72 65 20 72 6f 77 73 20 74 68 61 74  r more rows that
163d0 20 6d 61 74 63 68 20 74 68 65 0d 0a 20 20 20 20   match the..    
163e0 20 20 20 20 2f 2f 2f 20 73 65 61 72 63 68 20 63      /// search c
163f0 72 69 74 65 72 69 61 2c 20 74 68 65 6e 20 74 68  riteria, then th
16400 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  e cursor must be
16410 20 6c 65 66 74 20 70 6f 69 6e 74 20 61 74 20 74   left point at t
16420 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20  he first..      
16430 20 20 2f 2f 2f 20 72 6f 77 2e 20 53 75 62 73 65    /// row. Subse
16440 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 78  quent calls to x
16450 45 6f 66 20 6d 75 73 74 20 72 65 74 75 72 6e 20  Eof must return 
16460 66 61 6c 73 65 20 28 7a 65 72 6f 29 2e 20 49 66  false (zero). If
16470 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   there..        
16480 2f 2f 2f 20 61 72 65 20 6e 6f 20 72 6f 77 73 20  /// are no rows 
16490 6d 61 74 63 68 2c 20 74 68 65 6e 20 74 68 65 20  match, then the 
164a0 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 6c  cursor must be l
164b0 65 66 74 20 69 6e 20 61 20 73 74 61 74 65 20 74  eft in a state t
164c0 68 61 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hat..        ///
164d0 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
164e0 78 45 6f 66 20 74 6f 20 72 65 74 75 72 6e 20 74  xEof to return t
164f0 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20  rue (non-zero). 
16500 54 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69 6e  The SQLite engin
16510 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  e..        /// w
16520 69 6c 6c 20 75 73 65 20 74 68 65 20 78 43 6f 6c  ill use the xCol
16530 75 6d 6e 20 61 6e 64 20 78 52 6f 77 69 64 20 6d  umn and xRowid m
16540 65 74 68 6f 64 73 20 74 6f 20 61 63 63 65 73 73  ethods to access
16550 20 74 68 61 74 20 72 6f 77 20 63 6f 6e 74 65 6e   that row conten
16560 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
16570 54 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64  The xNext method
16580 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
16590 20 61 64 76 61 6e 63 65 20 74 6f 20 74 68 65 20   advance to the 
165a0 6e 65 78 74 20 72 6f 77 2e 0d 0a 20 20 20 20 20  next row...     
165b0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
165c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
165d0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
165e0 54 68 69 73 20 6d 65 74 68 6f 64 20 6d 75 73 74  This method must
165f0 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
16600 4b 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2c  K if successful,
16610 20 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 65 72   or an sqlite er
16620 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ror..        ///
16630 20 63 6f 64 65 20 69 66 20 61 6e 20 65 72 72 6f   code if an erro
16640 72 20 6f 63 63 75 72 73 2e 0d 0a 20 20 20 20 20  r occurs...     
16650 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16660 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
16670 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
16680 54 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  The xFilter meth
16690 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20 66  od is required f
166a0 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61 6c  or every virtual
166b0 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20   table..        
166c0 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  /// implementati
166d0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
166e0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
166f0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
16700 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
16710 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73  aram name="pCurs
16720 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
16730 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
16740 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
16750 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
16760 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72  derived structur
16770 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
16780 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
16790 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
167a0 65 3d 22 69 64 78 4e 75 6d 22 3e 0d 0a 20 20 20  e="idxNum">..   
167b0 20 20 20 20 20 2f 2f 2f 20 4e 75 6d 62 65 72 20       /// Number 
167c0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 64 65  used to help ide
167d0 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65 63 74  ntify the select
167e0 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20 20 20  ed index...     
167f0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
16810 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74 72  ram name="idxStr
16820 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
16830 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
16840 65 72 20 74 6f 20 74 68 65 20 55 54 46 2d 38 20  er to the UTF-8 
16850 65 6e 63 6f 64 65 64 20 73 74 72 69 6e 67 20 63  encoded string c
16860 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20  ontaining the.. 
16870 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e         /// strin
16880 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  g used to help i
16890 64 65 6e 74 69 66 79 20 74 68 65 20 73 65 6c 65  dentify the sele
168a0 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20 20  cted index...   
168b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
168c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
168d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63  param name="argc
168e0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
168f0 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 61  The number of na
16900 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
16910 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
16920 74 72 75 63 74 75 72 65 73 20 73 70 65 63 69 66  tructures specif
16930 69 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ied..        ///
16940 20 69 6e 20 3c 70 61 72 61 6d 72 65 66 20 6e 61   in <paramref na
16950 6d 65 3d 22 61 72 67 76 22 20 2f 3e 2e 0d 0a 20  me="argv" />... 
16960 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
16970 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
16980 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
16990 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
169a0 2f 20 41 6e 20 61 72 72 61 79 20 6f 66 20 6e 61  / An array of na
169b0 74 69 76 65 20 70 6f 69 6e 74 65 72 73 20 74 6f  tive pointers to
169c0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 73   sqlite3_value s
169d0 74 72 75 63 74 75 72 65 73 20 63 6f 6e 74 61 69  tructures contai
169e0 6e 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ning..        //
169f0 2f 20 66 69 6c 74 65 72 69 6e 67 20 63 72 69 74  / filtering crit
16a00 65 72 69 61 20 66 6f 72 20 74 68 65 20 73 65 6c  eria for the sel
16a10 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20 20  ected index...  
16a20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
16a30 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
16a40 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
16a50 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
16a60 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
16a70 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
16a80 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
16a90 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
16aa0 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d  orCode xFilter(.
16ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
16ac0 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20  Ptr pCursor,..  
16ad0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 64            int id
16ae0 78 4e 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  xNum,..         
16af0 20 20 20 49 6e 74 50 74 72 20 69 64 78 53 74 72     IntPtr idxStr
16b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
16b10 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
16b20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61 72 67        IntPtr arg
16b30 76 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  v..            )
16b40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
16b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16ba0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
16bb0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
16bc0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
16bd0 68 65 20 78 4e 65 78 74 20 6d 65 74 68 6f 64 20  he xNext method 
16be0 61 64 76 61 6e 63 65 73 20 61 20 76 69 72 74 75  advances a virtu
16bf0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  al table cursor 
16c00 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
16c10 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
16c20 61 20 72 65 73 75 6c 74 20 73 65 74 20 69 6e 69  a result set ini
16c30 74 69 61 74 65 64 20 62 79 20 78 46 69 6c 74 65  tiated by xFilte
16c40 72 2e 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  r. If the cursor
16c50 20 69 73 20 61 6c 72 65 61 64 79 0d 0a 20 20 20   is already..   
16c60 20 20 20 20 20 2f 2f 2f 20 70 6f 69 6e 74 69 6e       /// pointin
16c70 67 20 61 74 20 74 68 65 20 6c 61 73 74 20 72 6f  g at the last ro
16c80 77 20 77 68 65 6e 20 74 68 69 73 20 72 6f 75 74  w when this rout
16c90 69 6e 65 20 69 73 20 63 61 6c 6c 65 64 2c 20 74  ine is called, t
16ca0 68 65 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  hen the..       
16cb0 20 2f 2f 2f 20 63 75 72 73 6f 72 20 6e 6f 20 6c   /// cursor no l
16cc0 6f 6e 67 65 72 20 70 6f 69 6e 74 73 20 74 6f 20  onger points to 
16cd0 76 61 6c 69 64 20 64 61 74 61 20 61 6e 64 20 61  valid data and a
16ce0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
16cf0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
16d00 20 2f 2f 2f 20 78 45 6f 66 20 6d 65 74 68 6f 64   /// xEof method
16d10 20 6d 75 73 74 20 72 65 74 75 72 6e 20 74 72 75   must return tru
16d20 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 2e 20 49 66  e (non-zero). If
16d30 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0d 0a   the cursor is..
16d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75 63 63          /// succ
16d50 65 73 73 66 75 6c 6c 79 20 61 64 76 61 6e 63 65  essfully advance
16d60 64 20 74 6f 20 61 6e 6f 74 68 65 72 20 72 6f 77  d to another row
16d70 20 6f 66 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65   of content, the
16d80 6e 20 73 75 62 73 65 71 75 65 6e 74 0d 0a 20 20  n subsequent..  
16d90 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 73 20        /// calls 
16da0 74 6f 20 78 45 6f 66 20 6d 75 73 74 20 72 65 74  to xEof must ret
16db0 75 72 6e 20 66 61 6c 73 65 20 28 7a 65 72 6f 29  urn false (zero)
16dc0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16dd0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16de0 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
16df0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
16e00 68 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20  hod must return 
16e10 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20 73 75 63  SQLITE_OK if suc
16e20 63 65 73 73 66 75 6c 2c 20 6f 72 20 61 6e 20 73  cessful, or an s
16e30 71 6c 69 74 65 20 65 72 72 6f 72 0d 0a 20 20 20  qlite error..   
16e40 20 20 20 20 20 2f 2f 2f 20 63 6f 64 65 20 69 66       /// code if
16e50 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
16e60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16e70 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
16e80 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20  /// <para>..    
16e90 20 20 20 20 2f 2f 2f 20 54 68 65 20 78 4e 65 78      /// The xNex
16ea0 74 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  t method is requ
16eb0 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
16ec0 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
16ed0 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
16ee0 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
16ef0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
16f00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
16f10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
16f20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16f30 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20  "pCursor">..    
16f40 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
16f50 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
16f60 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  e sqlite3_vtab_c
16f70 75 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74  ursor derived st
16f80 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  ructure...      
16f90 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
16fa0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
16fb0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
16fc0 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
16fd0 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
16fe0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
16ff0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
17000 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
17010 64 65 20 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  de xNext(..     
17020 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43         IntPtr pC
17030 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ursor..         
17040 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
17050 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17090 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
170a0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
170b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
170c0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
170d0 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65 74 68  // The xEof meth
170e0 6f 64 20 6d 75 73 74 20 72 65 74 75 72 6e 20 66  od must return f
170f0 61 6c 73 65 20 28 7a 65 72 6f 29 20 69 66 20 74  alse (zero) if t
17100 68 65 20 73 70 65 63 69 66 69 65 64 20 63 75 72  he specified cur
17110 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  sor..        ///
17120 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
17130 73 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  s to a valid row
17140 20 6f 66 20 64 61 74 61 2c 20 6f 72 20 74 72 75   of data, or tru
17150 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 0d 0a 20 20  e (non-zero)..  
17160 20 20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77        /// otherw
17170 69 73 65 2e 20 54 68 69 73 20 6d 65 74 68 6f 64  ise. This method
17180 20 69 73 20 63 61 6c 6c 65 64 20 62 79 20 74 68   is called by th
17190 65 20 53 51 4c 20 65 6e 67 69 6e 65 20 69 6d 6d  e SQL engine imm
171a0 65 64 69 61 74 65 6c 79 0d 0a 20 20 20 20 20 20  ediately..      
171b0 20 20 2f 2f 2f 20 61 66 74 65 72 20 65 61 63 68    /// after each
171c0 20 78 46 69 6c 74 65 72 20 61 6e 64 20 78 4e 65   xFilter and xNe
171d0 78 74 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0d 0a  xt invocation...
171e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
171f0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
17200 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20   <para>..       
17210 20 2f 2f 2f 20 54 68 65 20 78 45 6f 66 20 6d 65   /// The xEof me
17220 74 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64  thod is required
17230 20 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75   for every virtu
17240 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
17250 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  ntation...      
17260 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
17270 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
17280 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
17290 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
172a0 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
172b0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
172c0 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
172d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
172e0 72 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72  rsor derived str
172f0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
17300 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
17310 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
17320 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
17330 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e 6f  / Non-zero if no
17340 20 6d 6f 72 65 20 72 6f 77 73 20 61 72 65 20 61   more rows are a
17350 76 61 69 6c 61 62 6c 65 3b 20 7a 65 72 6f 20 6f  vailable; zero o
17360 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 20  therwise...     
17370 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
17380 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 78  >..        int x
17390 45 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Eof(..          
173a0 20 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72    IntPtr pCursor
173b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
173c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
173d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17410 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
17420 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
17430 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
17440 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
17450 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 69 6e  e SQLite core in
17460 76 6f 6b 65 73 20 74 68 69 73 20 6d 65 74 68 6f  vokes this metho
17470 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 69  d in order to fi
17480 6e 64 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72  nd the value for
17490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
174a0 65 20 4e 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e N-th column of
174b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
174c0 2e 20 4e 20 69 73 20 7a 65 72 6f 2d 62 61 73 65  . N is zero-base
174d0 64 20 73 6f 20 74 68 65 20 66 69 72 73 74 0d 0a  d so the first..
174e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 75          /// colu
174f0 6d 6e 20 69 73 20 6e 75 6d 62 65 72 65 64 20 30  mn is numbered 0
17500 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e 20 6d 65  . The xColumn me
17510 74 68 6f 64 20 6d 61 79 20 72 65 74 75 72 6e 20  thod may return 
17520 69 74 73 20 72 65 73 75 6c 74 20 62 61 63 6b 0d  its result back.
17530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20  .        /// to 
17540 53 51 4c 69 74 65 20 75 73 69 6e 67 20 6f 6e 65  SQLite using one
17550 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
17560 67 20 69 6e 74 65 72 66 61 63 65 3a 0d 0a 20 20  g interface:..  
17570 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17580 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17590 63 6f 64 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f  code>..        /
175a0 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
175b0 65 73 75 6c 74 5f 62 6c 6f 62 28 29 0d 0a 20 20  esult_blob()..  
175c0 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71        ///     sq
175d0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
175e0 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  ble()..        /
175f0 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
17600 65 73 75 6c 74 5f 69 6e 74 28 29 0d 0a 20 20 20  esult_int()..   
17610 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c       ///     sql
17620 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
17630 34 28 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  4()..        ///
17640 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
17650 75 6c 74 5f 6e 75 6c 6c 28 29 0d 0a 20 20 20 20  ult_null()..    
17660 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
17670 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
17680 29 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20  )..        ///  
17690 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
176a0 74 5f 74 65 78 74 31 36 28 29 0d 0a 20 20 20 20  t_text16()..    
176b0 20 20 20 20 2f 2f 2f 20 20 20 20 20 73 71 6c 69      ///     sqli
176c0 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
176d0 36 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 2f  6le()..        /
176e0 2f 2f 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  //     sqlite3_r
176f0 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28 29  esult_text16be()
17700 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
17710 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
17720 5f 7a 65 72 6f 62 6c 6f 62 28 29 0d 0a 20 20 20  _zeroblob()..   
17730 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
17740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17750 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17760 2f 20 49 66 20 74 68 65 20 78 43 6f 6c 75 6d 6e  / If the xColumn
17770 20 6d 65 74 68 6f 64 20 69 6d 70 6c 65 6d 65 6e   method implemen
17780 74 61 74 69 6f 6e 20 63 61 6c 6c 73 20 6e 6f 6e  tation calls non
17790 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
177a0 6e 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ns..        /// 
177b0 61 62 6f 76 65 2c 20 74 68 65 6e 20 74 68 65 20  above, then the 
177c0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6c  value of the col
177d0 75 6d 6e 20 64 65 66 61 75 6c 74 73 20 74 6f 20  umn defaults to 
177e0 61 6e 20 53 51 4c 20 4e 55 4c 4c 2e 0d 0a 20 20  an SQL NULL...  
177f0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
17800 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17810 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
17820 2f 2f 20 54 6f 20 72 61 69 73 65 20 61 6e 20 65  // To raise an e
17830 72 72 6f 72 2c 20 74 68 65 20 78 43 6f 6c 75 6d  rror, the xColum
17840 6e 20 6d 65 74 68 6f 64 20 73 68 6f 75 6c 64 20  n method should 
17850 75 73 65 20 6f 6e 65 20 6f 66 20 74 68 65 0d 0a  use one of the..
17860 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65 73 75          /// resu
17870 6c 74 5f 74 65 78 74 28 29 20 6d 65 74 68 6f 64  lt_text() method
17880 73 20 74 6f 20 73 65 74 20 74 68 65 20 65 72 72  s to set the err
17890 6f 72 20 6d 65 73 73 61 67 65 20 74 65 78 74 2c  or message text,
178a0 20 74 68 65 6e 20 72 65 74 75 72 6e 20 61 6e 0d   then return an.
178b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 70 70  .        /// app
178c0 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 63  ropriate error c
178d0 6f 64 65 2e 20 54 68 65 20 78 43 6f 6c 75 6d 6e  ode. The xColumn
178e0 20 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74   method must ret
178f0 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 6f 6e  urn SQLITE_OK on
17900 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
17910 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
17920 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
17930 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
17940 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
17950 20 78 43 6f 6c 75 6d 6e 20 6d 65 74 68 6f 64 20   xColumn method 
17960 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
17970 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74 61  every virtual ta
17980 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
17990 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
179a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
179b0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
179c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
179d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
179e0 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22  m name="pCursor"
179f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
17a00 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
17a10 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  r to the sqlite3
17a20 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64 65 72  _vtab_cursor der
17a30 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
17a40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
17a50 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
17a60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
17a70 70 43 6f 6e 74 65 78 74 22 3e 0d 0a 20 20 20 20  pContext">..    
17a80 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
17a90 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
17aa0 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
17ab0 74 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 62  t structure to b
17ac0 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  e used..        
17ad0 2f 2f 2f 20 66 6f 72 20 72 65 74 75 72 6e 69 6e  /// for returnin
17ae0 67 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  g the specified 
17af0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 74 6f 20  column value to 
17b00 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d  the SQLite core.
17b10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62  .        /// lib
17b20 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  rary...        /
17b30 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
17b40 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
17b50 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
17b60 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 7a         /// The z
17b70 65 72 6f 2d 62 61 73 65 64 20 69 6e 64 65 78 20  ero-based index 
17b80 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
17b90 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74   the column cont
17ba0 61 69 6e 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  aining the..    
17bb0 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 74 6f      /// value to
17bc0 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20   be returned... 
17bd0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
17be0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
17bf0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
17c00 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
17c10 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
17c20 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
17c30 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
17c40 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
17c50 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75 6d 6e 28  rorCode xColumn(
17c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
17c70 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
17c80 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
17c90 72 20 70 43 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  r pContext,..   
17ca0 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
17cb0 65 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ex..            
17cc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
17cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17d20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
17d30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
17d40 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
17d50 41 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 76  A successful inv
17d60 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
17d70 6d 65 74 68 6f 64 20 77 69 6c 6c 20 63 61 75 73  method will caus
17d80 65 20 2a 70 52 6f 77 69 64 20 74 6f 20 62 65 0d  e *pRowid to be.
17d90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 69 6c  .        /// fil
17da0 6c 65 64 20 77 69 74 68 20 74 68 65 20 72 6f 77  led with the row
17db0 69 64 20 6f 66 20 72 6f 77 20 74 68 61 74 20 74  id of row that t
17dc0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
17dd0 20 63 75 72 73 6f 72 20 70 43 75 72 20 69 73 0d   cursor pCur is.
17de0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 75 72  .        /// cur
17df0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
17e00 61 74 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20  at. This method 
17e10 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
17e20 4b 20 6f 6e 20 73 75 63 63 65 73 73 2e 20 49 74  K on success. It
17e30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
17e40 74 75 72 6e 73 20 61 6e 20 61 70 70 72 6f 70 72  turns an appropr
17e50 69 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 20  iate error code 
17e60 6f 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20  on failure...   
17e70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
17e80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
17e90 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
17ea0 2f 20 54 68 65 20 78 52 6f 77 69 64 20 6d 65 74  / The xRowid met
17eb0 68 6f 64 20 69 73 20 72 65 71 75 69 72 65 64 20  hod is required 
17ec0 66 6f 72 20 65 76 65 72 79 20 76 69 72 74 75 61  for every virtua
17ed0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  l table..       
17ee0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
17ef0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
17f00 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
17f10 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
17f20 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
17f30 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
17f40 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
17f50 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
17f60 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
17f70 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
17f80 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74 75   derived structu
17f90 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  re...        ///
17fa0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
17fb0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
17fc0 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
17fd0 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
17fe0 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
17ff0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
18000 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
18010 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
18020 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
18030 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
18040 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
18050 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65   row for the spe
18060 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a  cified cursor...
18070 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
18080 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
18090 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
180a0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
180b0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
180c0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
180d0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
180e0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
180f0 72 72 6f 72 43 6f 64 65 20 78 52 6f 77 49 64 28  rrorCode xRowId(
18100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
18110 74 50 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20  tPtr pCursor,.. 
18120 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
18130 6f 6e 67 20 72 6f 77 49 64 0d 0a 20 20 20 20 20  ong rowId..     
18140 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
18150 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
181a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
181b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
181c0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
181d0 20 20 20 2f 2f 2f 20 41 6c 6c 20 63 68 61 6e 67     /// All chang
181e0 65 73 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  es to a virtual 
181f0 74 61 62 6c 65 20 61 72 65 20 6d 61 64 65 20 75  table are made u
18200 73 69 6e 67 20 74 68 65 20 78 55 70 64 61 74 65  sing the xUpdate
18210 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
18220 20 20 2f 2f 2f 20 54 68 69 73 20 6f 6e 65 20 6d    /// This one m
18230 65 74 68 6f 64 20 63 61 6e 20 62 65 20 75 73 65  ethod can be use
18240 64 20 74 6f 20 69 6e 73 65 72 74 2c 20 64 65 6c  d to insert, del
18250 65 74 65 2c 20 6f 72 20 75 70 64 61 74 65 2e 0d  ete, or update..
18260 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
18270 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18280 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
18290 20 20 2f 2f 2f 20 54 68 65 20 61 72 67 63 20 70    /// The argc p
182a0 61 72 61 6d 65 74 65 72 20 73 70 65 63 69 66 69  arameter specifi
182b0 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  es the number of
182c0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
182d0 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 2f 2f  argv..        //
182e0 2f 20 61 72 72 61 79 2e 20 54 68 65 20 76 61 6c  / array. The val
182f0 75 65 20 6f 66 20 61 72 67 63 20 77 69 6c 6c 20  ue of argc will 
18300 62 65 20 31 20 66 6f 72 20 61 20 70 75 72 65 20  be 1 for a pure 
18310 64 65 6c 65 74 65 20 6f 70 65 72 61 74 69 6f 6e  delete operation
18320 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
18330 20 4e 2b 32 20 66 6f 72 20 61 6e 20 69 6e 73 65   N+2 for an inse
18340 72 74 20 6f 72 20 72 65 70 6c 61 63 65 20 6f 72  rt or replace or
18350 20 75 70 64 61 74 65 20 77 68 65 72 65 20 4e 20   update where N 
18360 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
18370 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f  ..        /// co
18380 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
18390 6c 65 2e 20 49 6e 20 74 68 65 20 70 72 65 76 69  le. In the previ
183a0 6f 75 73 20 73 65 6e 74 65 6e 63 65 2c 20 4e 20  ous sentence, N 
183b0 69 6e 63 6c 75 64 65 73 20 61 6e 79 0d 0a 20 20  includes any..  
183c0 20 20 20 20 20 20 2f 2f 2f 20 68 69 64 64 65 6e        /// hidden
183d0 20 63 6f 6c 75 6d 6e 73 2e 0d 0a 20 20 20 20 20   columns...     
183e0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
183f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
18400 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18410 45 76 65 72 79 20 61 72 67 76 20 65 6e 74 72 79  Every argv entry
18420 20 77 69 6c 6c 20 68 61 76 65 20 61 20 6e 6f 6e   will have a non
18430 2d 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 43  -NULL value in C
18440 20 62 75 74 20 6d 61 79 20 63 6f 6e 74 61 69 6e   but may contain
18450 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
18460 65 20 53 51 4c 20 76 61 6c 75 65 20 4e 55 4c 4c  e SQL value NULL
18470 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  . In other words
18480 2c 20 69 74 20 69 73 20 61 6c 77 61 79 73 20 74  , it is always t
18490 72 75 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  rue that..      
184a0 20 20 2f 2f 2f 20 61 72 67 76 5b 69 5d 21 3d 30    /// argv[i]!=0
184b0 20 66 6f 72 20 69 20 62 65 74 77 65 65 6e 20 30   for i between 0
184c0 20 61 6e 64 20 61 72 67 63 2d 31 2e 20 48 6f 77   and argc-1. How
184d0 65 76 65 72 2c 20 69 74 20 6d 69 67 68 74 20 62  ever, it might b
184e0 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
184f0 2f 2f 20 63 61 73 65 20 74 68 61 74 20 73 71 6c  // case that sql
18500 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
18510 61 72 67 76 5b 69 5d 29 3d 3d 53 51 4c 49 54 45  argv[i])==SQLITE
18520 5f 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20  _NULL...        
18530 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20  /// </para>..   
18540 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
18550 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
18560 20 61 72 67 76 5b 30 5d 20 70 61 72 61 6d 65 74   argv[0] paramet
18570 65 72 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  er is the rowid 
18580 6f 66 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  of a row in the 
18590 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20  virtual table.. 
185a0 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f 20 62 65         /// to be
185b0 20 64 65 6c 65 74 65 64 2e 20 49 66 20 61 72 67   deleted. If arg
185c0 76 5b 30 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e  v[0] is an SQL N
185d0 55 4c 4c 2c 20 74 68 65 6e 20 6e 6f 20 64 65 6c  ULL, then no del
185e0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 0d 0a 20  etion occurs... 
185f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
18600 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
18610 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
18620 2f 2f 2f 20 54 68 65 20 61 72 67 76 5b 31 5d 20  /// The argv[1] 
18630 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65  parameter is the
18640 20 72 6f 77 69 64 20 6f 66 20 61 20 6e 65 77 20   rowid of a new 
18650 72 6f 77 20 74 6f 20 62 65 20 69 6e 73 65 72 74  row to be insert
18660 65 64 20 69 6e 74 6f 0d 0a 20 20 20 20 20 20 20  ed into..       
18670 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
18680 20 74 61 62 6c 65 2e 20 49 66 20 61 72 67 76 5b   table. If argv[
18690 31 5d 20 69 73 20 61 6e 20 53 51 4c 20 4e 55 4c  1] is an SQL NUL
186a0 4c 2c 20 74 68 65 6e 20 74 68 65 0d 0a 20 20 20  L, then the..   
186b0 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
186c0 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 63 68 6f  ntation must cho
186d0 6f 73 65 20 61 20 72 6f 77 69 64 20 66 6f 72 20  ose a rowid for 
186e0 74 68 65 20 6e 65 77 6c 79 20 69 6e 73 65 72 74  the newly insert
186f0 65 64 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  ed row...       
18700 20 2f 2f 2f 20 53 75 62 73 65 71 75 65 6e 74 20   /// Subsequent 
18710 61 72 67 76 5b 5d 20 65 6e 74 72 69 65 73 20 63  argv[] entries c
18720 6f 6e 74 61 69 6e 20 76 61 6c 75 65 73 20 6f 66  ontain values of
18730 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
18740 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
18750 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2c 20   virtual table, 
18760 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 61  in the order tha
18770 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 77 65  t the columns we
18780 72 65 20 64 65 63 6c 61 72 65 64 2e 20 54 68 65  re declared. The
18790 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 75  ..        /// nu
187a0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
187b0 77 69 6c 6c 20 6d 61 74 63 68 20 74 68 65 20 74  will match the t
187c0 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
187d0 20 74 68 61 74 20 74 68 65 0d 0a 20 20 20 20 20   that the..     
187e0 20 20 20 2f 2f 2f 20 78 43 6f 6e 6e 65 63 74 20     /// xConnect 
187f0 6f 72 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f  or xCreate metho
18800 64 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  d made using the
18810 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
18820 5f 76 74 61 62 28 29 0d 0a 20 20 20 20 20 20 20  _vtab()..       
18830 20 2f 2f 2f 20 63 61 6c 6c 2e 20 41 6c 6c 20 68   /// call. All h
18840 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 61 72  idden columns ar
18850 65 20 69 6e 63 6c 75 64 65 64 2e 0d 0a 20 20 20  e included...   
18860 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
18870 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18880 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18890 2f 20 57 68 65 6e 20 64 6f 69 6e 67 20 61 6e 20  / When doing an 
188a0 69 6e 73 65 72 74 20 77 69 74 68 6f 75 74 20 61  insert without a
188b0 20 72 6f 77 69 64 20 28 61 72 67 63 3e 31 2c 20   rowid (argc>1, 
188c0 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20 53 51  argv[1] is an SQ
188d0 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  L..        /// N
188e0 55 4c 4c 29 2c 20 74 68 65 20 69 6d 70 6c 65 6d  ULL), the implem
188f0 65 6e 74 61 74 69 6f 6e 20 6d 75 73 74 20 73 65  entation must se
18900 74 20 2a 70 52 6f 77 69 64 20 74 6f 20 74 68 65  t *pRowid to the
18910 20 72 6f 77 69 64 20 6f 66 20 74 68 65 0d 0a 20   rowid of the.. 
18920 20 20 20 20 20 20 20 2f 2f 2f 20 6e 65 77 6c 79         /// newly
18930 20 69 6e 73 65 72 74 65 64 20 72 6f 77 3b 20 74   inserted row; t
18940 68 69 73 20 77 69 6c 6c 20 62 65 63 6f 6d 65 20  his will become 
18950 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  the value return
18960 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
18970 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6c     /// sqlite3_l
18980 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
18990 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 74  () function. Set
189a0 74 69 6e 67 20 74 68 69 73 20 76 61 6c 75 65 20  ting this value 
189b0 69 6e 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20  in all the..    
189c0 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 20 63 61      /// other ca
189d0 73 65 73 20 69 73 20 61 20 68 61 72 6d 6c 65 73  ses is a harmles
189e0 73 20 6e 6f 2d 6f 70 3b 20 74 68 65 20 53 51 4c  s no-op; the SQL
189f0 69 74 65 20 65 6e 67 69 6e 65 20 69 67 6e 6f 72  ite engine ignor
18a00 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  es the..        
18a10 2f 2f 2f 20 2a 70 52 6f 77 69 64 20 72 65 74 75  /// *pRowid retu
18a20 72 6e 20 76 61 6c 75 65 20 69 66 20 61 72 67 63  rn value if argc
18a30 3d 3d 31 20 6f 72 20 61 72 67 76 5b 31 5d 20 69  ==1 or argv[1] i
18a40 73 20 6e 6f 74 20 61 6e 20 53 51 4c 20 4e 55 4c  s not an SQL NUL
18a50 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  L...        /// 
18a60 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
18a70 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
18a80 20 20 20 20 20 2f 2f 2f 20 45 61 63 68 20 63 61       /// Each ca
18a90 6c 6c 20 74 6f 20 78 55 70 64 61 74 65 20 77 69  ll to xUpdate wi
18aa0 6c 6c 20 66 61 6c 6c 20 69 6e 74 6f 20 6f 6e 65  ll fall into one
18ab0 20 6f 66 20 63 61 73 65 73 20 73 68 6f 77 6e 20   of cases shown 
18ac0 62 65 6c 6f 77 2e 20 4e 6f 74 65 0d 0a 20 20 20  below. Note..   
18ad0 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 72 65       /// that re
18ae0 66 65 72 65 6e 63 65 73 20 74 6f 20 61 72 67 76  ferences to argv
18af0 5b 69 5d 20 6d 65 61 6e 20 74 68 65 20 53 51 4c  [i] mean the SQL
18b00 20 76 61 6c 75 65 20 68 65 6c 64 20 77 69 74 68   value held with
18b10 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..        
18b20 2f 2f 2f 20 61 72 67 76 5b 69 5d 20 6f 62 6a 65  /// argv[i] obje
18b30 63 74 2c 20 6e 6f 74 20 74 68 65 20 61 72 67 76  ct, not the argv
18b40 5b 69 5d 20 6f 62 6a 65 63 74 20 69 74 73 65 6c  [i] object itsel
18b50 66 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  f...        /// 
18b60 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
18b70 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20   /// <code>..   
18b80 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67       ///     arg
18b90 63 20 3d 20 31 0d 0a 20 20 20 20 20 20 20 20 2f  c = 1..        /
18ba0 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20  // </code>..    
18bb0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
18bc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18bd0 20 20 20 20 54 68 65 20 73 69 6e 67 6c 65 20 72      The single r
18be0 6f 77 20 77 69 74 68 20 72 6f 77 69 64 20 65 71  ow with rowid eq
18bf0 75 61 6c 20 74 6f 20 61 72 67 76 5b 30 5d 20 69  ual to argv[0] i
18c00 73 20 64 65 6c 65 74 65 64 2e 20 4e 6f 0d 0a 20  s deleted. No.. 
18c10 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
18c20 20 20 20 69 6e 73 65 72 74 20 6f 63 63 75 72 73     insert occurs
18c30 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18c40 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18c50 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
18c60 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63      ///     argc
18c70 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f   > 1..        //
18c80 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20  /     argv[0] = 
18c90 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NULL..        //
18ca0 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20 20 20 20  / </code>..     
18cb0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
18cc0 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
18cd0 20 20 20 41 20 6e 65 77 20 72 6f 77 20 69 73 20     A new row is 
18ce0 69 6e 73 65 72 74 65 64 20 77 69 74 68 20 61 20  inserted with a 
18cf0 72 6f 77 69 64 20 61 72 67 76 5b 31 5d 20 61 6e  rowid argv[1] an
18d00 64 20 63 6f 6c 75 6d 6e 0d 0a 20 20 20 20 20 20  d column..      
18d10 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 76 61    ///         va
18d20 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32 5d 20  lues in argv[2] 
18d30 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49  and following. I
18d40 66 20 61 72 67 76 5b 31 5d 20 69 73 20 61 6e 20  f argv[1] is an 
18d50 53 51 4c 20 4e 55 4c 4c 2c 0d 0a 20 20 20 20 20  SQL NULL,..     
18d60 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20 74     ///         t
18d70 68 65 20 61 20 6e 65 77 20 75 6e 69 71 75 65 20  he a new unique 
18d80 72 6f 77 69 64 20 69 73 20 67 65 6e 65 72 61 74  rowid is generat
18d90 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
18da0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
18db0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
18dc0 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
18dd0 20 20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 63      ///     argc
18de0 20 3e 20 31 0d 0a 20 20 20 20 20 20 20 20 2f 2f   > 1..        //
18df0 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3f 20  /     argv[0] ? 
18e00 4e 55 4c 4c 0d 0a 20 20 20 20 20 20 20 20 2f 2f  NULL..        //
18e10 2f 20 20 20 20 20 61 72 67 76 5b 30 5d 20 3d 20  /     argv[0] = 
18e20 61 72 67 76 5b 31 5d 0d 0a 20 20 20 20 20 20 20  argv[1]..       
18e30 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e 0d 0a 20 20   /// </code>..  
18e40 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
18e50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
18e60 20 20 20 20 20 20 54 68 65 20 72 6f 77 20 77 69        The row wi
18e70 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b 30 5d  th rowid argv[0]
18e80 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
18e90 20 6e 65 77 20 76 61 6c 75 65 73 20 69 6e 0d 0a   new values in..
18ea0 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18eb0 20 20 20 20 61 72 67 76 5b 32 5d 20 61 6e 64 20      argv[2] and 
18ec0 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 72 61 6d 65  following parame
18ed0 74 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ters...        /
18ee0 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
18ef0 20 20 20 20 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a      /// <code>..
18f00 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20          ///     
18f10 61 72 67 63 20 3e 20 31 0d 0a 20 20 20 20 20 20  argc > 1..      
18f20 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
18f30 5d 20 3f 20 4e 55 4c 4c 0d 0a 20 20 20 20 20 20  ] ? NULL..      
18f40 20 20 2f 2f 2f 20 20 20 20 20 61 72 67 76 5b 30    ///     argv[0
18f50 5d 20 3f 20 61 72 67 76 5b 31 5d 0d 0a 20 20 20  ] ? argv[1]..   
18f60 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64 65 3e       /// </code>
18f70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
18f80 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
18f90 2f 20 20 20 20 20 20 20 20 20 54 68 65 20 72 6f  /         The ro
18fa0 77 20 77 69 74 68 20 72 6f 77 69 64 20 61 72 67  w with rowid arg
18fb0 76 5b 30 5d 20 69 73 20 75 70 64 61 74 65 64 20  v[0] is updated 
18fc0 77 69 74 68 20 72 6f 77 69 64 20 61 72 67 76 5b  with rowid argv[
18fd0 31 5d 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  1]..        /// 
18fe0 20 20 20 20 20 20 20 20 61 6e 64 20 6e 65 77 20          and new 
18ff0 76 61 6c 75 65 73 20 69 6e 20 61 72 67 76 5b 32  values in argv[2
19000 5d 20 61 6e 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  ] and following 
19010 70 61 72 61 6d 65 74 65 72 73 2e 20 54 68 69 73  parameters. This
19020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20  ..        ///   
19030 20 20 20 20 20 20 77 69 6c 6c 20 6f 63 63 75 72        will occur
19040 20 77 68 65 6e 20 61 6e 20 53 51 4c 20 73 74 61   when an SQL sta
19050 74 65 6d 65 6e 74 20 75 70 64 61 74 65 73 20 61  tement updates a
19060 20 72 6f 77 69 64 2c 20 61 73 20 69 6e 0d 0a 20   rowid, as in.. 
19070 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20 20 20         ///      
19080 20 20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74     the statement
19090 3a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  :..        /// <
190a0 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
190b0 2f 2f 2f 20 3c 63 6f 64 65 3e 0d 0a 20 20 20 20  /// <code>..    
190c0 20 20 20 20 2f 2f 2f 20 20 20 20 20 20 20 20 20      ///         
190d0 20 20 20 20 55 50 44 41 54 45 20 74 61 62 6c 65      UPDATE table
190e0 20 53 45 54 20 72 6f 77 69 64 3d 72 6f 77 69 64   SET rowid=rowid
190f0 2b 31 20 57 48 45 52 45 20 2e 2e 2e 3b 0d 0a 20  +1 WHERE ...;.. 
19100 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 63 6f 64         /// </cod
19110 65 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e>..        /// 
19120 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  <para>..        
19130 2f 2f 2f 20 54 68 65 20 78 55 70 64 61 74 65 20  /// The xUpdate 
19140 6d 65 74 68 6f 64 20 6d 75 73 74 20 72 65 74 75  method must retu
19150 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 20 69 66 20  rn SQLITE_OK if 
19160 61 6e 64 20 6f 6e 6c 79 20 69 66 20 69 74 20 69  and only if it i
19170 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  s..        /// s
19180 75 63 63 65 73 73 66 75 6c 2e 20 49 66 20 61 20  uccessful. If a 
19190 66 61 69 6c 75 72 65 20 6f 63 63 75 72 73 2c 20  failure occurs, 
191a0 74 68 65 20 78 55 70 64 61 74 65 20 6d 75 73 74  the xUpdate must
191b0 20 72 65 74 75 72 6e 20 61 6e 0d 0a 20 20 20 20   return an..    
191c0 20 20 20 20 2f 2f 2f 20 61 70 70 72 6f 70 72 69      /// appropri
191d0 61 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  ate error code. 
191e0 4f 6e 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  On a failure, th
191f0 65 20 70 56 54 61 62 2d 3e 7a 45 72 72 4d 73 67  e pVTab->zErrMsg
19200 20 65 6c 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20   element..      
19210 20 20 2f 2f 2f 20 6d 61 79 20 6f 70 74 69 6f 6e    /// may option
19220 61 6c 6c 79 20 62 65 20 72 65 70 6c 61 63 65 64  ally be replaced
19230 20 77 69 74 68 20 65 72 72 6f 72 20 6d 65 73 73   with error mess
19240 61 67 65 20 74 65 78 74 20 73 74 6f 72 65 64 20  age text stored 
19250 69 6e 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20  in memory..     
19260 20 20 20 2f 2f 2f 20 61 6c 6c 6f 63 61 74 65 64     /// allocated
19270 20 66 72 6f 6d 20 53 51 4c 69 74 65 20 75 73 69   from SQLite usi
19280 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 73 75 63  ng functions suc
19290 68 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72  h as sqlite3_mpr
192a0 69 6e 74 66 28 29 20 6f 72 0d 0a 20 20 20 20 20  intf() or..     
192b0 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 6d     /// sqlite3_m
192c0 61 6c 6c 6f 63 28 29 2e 0d 0a 20 20 20 20 20 20  alloc()...      
192d0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
192e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
192f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 49  >..        /// I
19300 66 20 74 68 65 20 78 55 70 64 61 74 65 20 6d 65  f the xUpdate me
19310 74 68 6f 64 20 76 69 6f 6c 61 74 65 73 20 73 6f  thod violates so
19320 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6f 66  me constraint of
19330 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
19340 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  le..        /// 
19350 28 69 6e 63 6c 75 64 69 6e 67 2c 20 62 75 74 20  (including, but 
19360 6e 6f 74 20 6c 69 6d 69 74 65 64 20 74 6f 2c 20  not limited to, 
19370 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74  attempting to st
19380 6f 72 65 20 61 20 76 61 6c 75 65 20 6f 66 20 74  ore a value of t
19390 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
193a0 77 72 6f 6e 67 20 64 61 74 61 74 79 70 65 2c 20  wrong datatype, 
193b0 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 73 74  attempting to st
193c0 6f 72 65 20 61 20 76 61 6c 75 65 20 74 68 61 74  ore a value that
193d0 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72   is too large or
193e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 6f  ..        /// to
193f0 6f 20 73 6d 61 6c 6c 2c 20 6f 72 20 61 74 74 65  o small, or atte
19400 6d 70 74 69 6e 67 20 74 6f 20 63 68 61 6e 67 65  mpting to change
19410 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 76 61 6c   a read-only val
19420 75 65 29 20 74 68 65 6e 20 74 68 65 0d 0a 20 20  ue) then the..  
19430 20 20 20 20 20 20 2f 2f 2f 20 78 55 70 64 61 74        /// xUpdat
19440 65 20 6d 75 73 74 20 66 61 69 6c 20 77 69 74 68  e must fail with
19450 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
19460 65 72 72 6f 72 20 63 6f 64 65 2e 0d 0a 20 20 20  error code...   
19470 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
19490 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
194a0 2f 20 54 68 65 72 65 20 6d 69 67 68 74 20 62 65  / There might be
194b0 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 71 6c   one or more sql
194c0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
194d0 20 6f 62 6a 65 63 74 73 20 6f 70 65 6e 20 61 6e   objects open an
194e0 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  d in..        //
194f0 2f 20 75 73 65 20 6f 6e 20 74 68 65 20 76 69 72  / use on the vir
19500 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 73 74 61  tual table insta
19510 6e 63 65 20 61 6e 64 20 70 65 72 68 61 70 73 20  nce and perhaps 
19520 65 76 65 6e 20 6f 6e 20 74 68 65 20 72 6f 77 20  even on the row 
19530 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
19540 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
19550 65 20 77 68 65 6e 20 74 68 65 20 78 55 70 64 61  e when the xUpda
19560 74 65 20 6d 65 74 68 6f 64 20 69 73 20 69 6e 76  te method is inv
19570 6f 6b 65 64 2e 20 54 68 65 0d 0a 20 20 20 20 20  oked. The..     
19580 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74     /// implement
19590 61 74 69 6f 6e 20 6f 66 20 78 55 70 64 61 74 65  ation of xUpdate
195a0 20 6d 75 73 74 20 62 65 20 70 72 65 70 61 72 65   must be prepare
195b0 64 20 66 6f 72 20 61 74 74 65 6d 70 74 73 20 74  d for attempts t
195c0 6f 20 64 65 6c 65 74 65 0d 0a 20 20 20 20 20 20  o delete..      
195d0 20 20 2f 2f 2f 20 6f 72 20 6d 6f 64 69 66 79 20    /// or modify 
195e0 72 6f 77 73 20 6f 66 20 74 68 65 20 74 61 62 6c  rows of the tabl
195f0 65 20 6f 75 74 20 66 72 6f 6d 20 6f 74 68 65 72  e out from other
19600 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72   existing cursor
19610 73 2e 20 49 66 20 74 68 65 0d 0a 20 20 20 20 20  s. If the..     
19620 20 20 20 2f 2f 2f 20 76 69 72 74 75 61 6c 20 74     /// virtual t
19630 61 62 6c 65 20 63 61 6e 6e 6f 74 20 61 63 63 6f  able cannot acco
19640 6d 6d 6f 64 61 74 65 20 73 75 63 68 20 63 68 61  mmodate such cha
19650 6e 67 65 73 2c 20 74 68 65 20 78 55 70 64 61 74  nges, the xUpdat
19660 65 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20  e method..      
19670 20 20 2f 2f 2f 20 6d 75 73 74 20 72 65 74 75 72    /// must retur
19680 6e 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e  n an error code.
19690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
196a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
196b0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
196c0 20 20 20 2f 2f 2f 20 54 68 65 20 78 55 70 64 61     /// The xUpda
196d0 74 65 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74  te method is opt
196e0 69 6f 6e 61 6c 2e 20 49 66 20 74 68 65 20 78 55  ional. If the xU
196f0 70 64 61 74 65 20 70 6f 69 6e 74 65 72 20 69 6e  pdate pointer in
19700 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
19710 2f 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  / sqlite3_module
19720 20 66 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74   for a virtual t
19730 61 62 6c 65 20 69 73 20 61 20 4e 55 4c 4c 20 70  able is a NULL p
19740 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68 65  ointer, then the
19750 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
19760 72 74 75 61 6c 20 74 61 62 6c 65 20 69 73 20 72  rtual table is r
19770 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20  ead-only...     
19780 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
19790 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
197a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
197b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
197c0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
197d0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
197e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
197f0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
19800 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
19810 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19820 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
19830 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
19840 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
19850 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
19860 66 20 6e 65 77 20 6f 72 20 6d 6f 64 69 66 69 65  f new or modifie
19870 64 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  d column values 
19880 63 6f 6e 74 61 69 6e 65 64 20 69 6e 0d 0a 20 20  contained in..  
19890 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
198a0 72 65 66 20 6e 61 6d 65 3d 22 61 72 67 76 22 20  ref name="argv" 
198b0 2f 3e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  />...        ///
198c0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
198d0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
198e0 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20  me="argv">..    
198f0 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
19900 79 20 6f 66 20 6e 61 74 69 76 65 20 70 6f 69 6e  y of native poin
19910 74 65 72 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  ters to sqlite3_
19920 76 61 6c 75 65 20 73 74 72 75 63 74 75 72 65 73  value structures
19930 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
19940 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77       /// the new
19950 20 6f 72 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c   or modified col
19960 75 6d 6e 20 76 61 6c 75 65 73 2c 20 69 66 20 61  umn values, if a
19970 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ny...        ///
19980 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
19990 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
199a0 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
199b0 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
199c0 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
199d0 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
199e0 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
199f0 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
19a00 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
19a10 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
19a20 20 66 6f 72 20 74 68 65 20 72 6f 77 20 74 68 61   for the row tha
19a30 74 20 77 61 73 20 69 6e 73 65 72 74 65 64 2c 20  t was inserted, 
19a40 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20  if any...       
19a50 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19a60 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
19a70 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
19a80 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
19a90 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
19aa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19ab0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
19ac0 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
19ad0 65 20 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20  e xUpdate(..    
19ae0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
19af0 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
19b00 20 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20     int argc,..  
19b10 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
19b20 20 61 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20   argv,..        
19b30 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
19b40 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
19b50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
19b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ba0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19bb0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
19bc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
19bd0 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
19be0 54 68 69 73 20 6d 65 74 68 6f 64 20 62 65 67 69  This method begi
19bf0 6e 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ns a transaction
19c00 20 6f 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   on a virtual ta
19c10 62 6c 65 2e 20 54 68 69 73 20 69 73 20 6d 65 74  ble. This is met
19c20 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  hod..        ///
19c30 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68   is optional. Th
19c40 65 20 78 42 65 67 69 6e 20 70 6f 69 6e 74 65 72  e xBegin pointer
19c50 20 6f 66 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75   of sqlite3_modu
19c60 6c 65 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0d  le may be NULL..
19c70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
19c80 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
19c90 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
19ca0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
19cb0 64 20 69 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  d is always foll
19cc0 6f 77 65 64 20 62 79 20 6f 6e 65 20 63 61 6c 6c  owed by one call
19cd0 20 74 6f 20 65 69 74 68 65 72 20 74 68 65 20 78   to either the x
19ce0 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20 20 20 20 20  Commit or..     
19cf0 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c 62 61 63 6b     /// xRollback
19d00 20 6d 65 74 68 6f 64 2e 20 56 69 72 74 75 61 6c   method. Virtual
19d10 20 74 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69   table transacti
19d20 6f 6e 73 20 64 6f 20 6e 6f 74 20 6e 65 73 74 2c  ons do not nest,
19d30 20 73 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   so the..       
19d40 20 2f 2f 2f 20 78 42 65 67 69 6e 20 6d 65 74 68   /// xBegin meth
19d50 6f 64 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 69  od will not be i
19d60 6e 76 6f 6b 65 64 20 6d 6f 72 65 20 74 68 61 6e  nvoked more than
19d70 20 6f 6e 63 65 20 6f 6e 20 61 20 73 69 6e 67 6c   once on a singl
19d80 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
19d90 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77 69 74  irtual table wit
19da0 68 6f 75 74 20 61 6e 20 69 6e 74 65 72 76 65 6e  hout an interven
19db0 69 6e 67 20 63 61 6c 6c 20 74 6f 20 65 69 74 68  ing call to eith
19dc0 65 72 20 78 43 6f 6d 6d 69 74 20 6f 72 0d 0a 20  er xCommit or.. 
19dd0 20 20 20 20 20 20 20 2f 2f 2f 20 78 52 6f 6c 6c         /// xRoll
19de0 62 61 63 6b 2e 20 4d 75 6c 74 69 70 6c 65 20 63  back. Multiple c
19df0 61 6c 6c 73 20 74 6f 20 6f 74 68 65 72 20 6d 65  alls to other me
19e00 74 68 6f 64 73 20 63 61 6e 20 61 6e 64 20 6c 69  thods can and li
19e10 6b 65 6c 79 20 77 69 6c 6c 0d 0a 20 20 20 20 20  kely will..     
19e20 20 20 20 2f 2f 2f 20 6f 63 63 75 72 20 69 6e 20     /// occur in 
19e30 62 65 74 77 65 65 6e 20 74 68 65 20 78 42 65 67  between the xBeg
19e40 69 6e 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65  in and the corre
19e50 73 70 6f 6e 64 69 6e 67 20 78 43 6f 6d 6d 69 74  sponding xCommit
19e60 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
19e70 20 78 52 6f 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20   xRollback...   
19e80 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
19e90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
19ea0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
19eb0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
19ec0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
19ed0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
19ee0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
19ef0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
19f00 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
19f10 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
19f20 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
19f30 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
19f40 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
19f50 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
19f60 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
19f70 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
19f80 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
19f90 74 65 45 72 72 6f 72 43 6f 64 65 20 78 42 65 67  teErrorCode xBeg
19fa0 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
19fb0 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
19fc0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
19fd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1a030 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1a040 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1a050 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1a060 6d 65 74 68 6f 64 20 73 69 67 6e 61 6c 73 20 74  method signals t
1a070 68 65 20 73 74 61 72 74 20 6f 66 20 61 20 74 77  he start of a tw
1a080 6f 2d 70 68 61 73 65 20 63 6f 6d 6d 69 74 20 6f  o-phase commit o
1a090 6e 20 61 20 76 69 72 74 75 61 6c 0d 0a 20 20 20  n a virtual..   
1a0a0 20 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e 20       /// table. 
1a0b0 54 68 69 73 20 69 73 20 6d 65 74 68 6f 64 20 69  This is method i
1a0c0 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 54 68 65 20  s optional. The 
1a0d0 78 53 79 6e 63 20 70 6f 69 6e 74 65 72 20 6f 66  xSync pointer of
1a0e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 71  ..        /// sq
1a0f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79  lite3_module may
1a100 20 62 65 20 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20   be NULL...     
1a110 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1a120 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1a130 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  a>..        /// 
1a140 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 6f  This method is o
1a150 6e 6c 79 20 69 6e 76 6f 6b 65 64 20 61 66 74 65  nly invoked afte
1a160 72 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 78 42  r call to the xB
1a170 65 67 69 6e 20 6d 65 74 68 6f 64 20 61 6e 64 0d  egin method and.
1a180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 72 69  .        /// pri
1a190 6f 72 20 74 6f 20 61 6e 20 78 43 6f 6d 6d 69 74  or to an xCommit
1a1a0 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 2e 20 49   or xRollback. I
1a1b0 6e 20 6f 72 64 65 72 20 74 6f 20 69 6d 70 6c 65  n order to imple
1a1c0 6d 65 6e 74 20 74 77 6f 2d 70 68 61 73 65 0d 0a  ment two-phase..
1a1d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6d 6d          /// comm
1a1e0 69 74 2c 20 74 68 65 20 78 53 79 6e 63 20 6d 65  it, the xSync me
1a1f0 74 68 6f 64 20 6f 6e 20 61 6c 6c 20 76 69 72 74  thod on all virt
1a200 75 61 6c 20 74 61 62 6c 65 73 20 69 73 20 69 6e  ual tables is in
1a210 76 6f 6b 65 64 20 70 72 69 6f 72 20 74 6f 0d 0a  voked prior to..
1a220 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 76 6f          /// invo
1a230 6b 69 6e 67 20 74 68 65 20 78 43 6f 6d 6d 69 74  king the xCommit
1a240 20 6d 65 74 68 6f 64 20 6f 6e 20 61 6e 79 20 76   method on any v
1a250 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 49 66  irtual table. If
1a260 20 61 6e 79 20 6f 66 20 74 68 65 0d 0a 20 20 20   any of the..   
1a270 20 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 20 6d       /// xSync m
1a280 65 74 68 6f 64 73 20 66 61 69 6c 2c 20 74 68 65  ethods fail, the
1a290 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
1a2a0 69 6f 6e 20 69 73 20 72 6f 6c 6c 65 64 20 62 61  ion is rolled ba
1a2b0 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ck...        ///
1a2c0 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1a2d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1a2e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1a2f0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62  aram name="pVtab
1a300 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1a310 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
1a320 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  er to the sqlite
1a330 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
1a340 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
1a350 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1a360 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
1a370 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1a380 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53  /// A standard S
1a390 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64  QLite return cod
1a3a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1a3b0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1a3c0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1a3d0 6f 64 65 20 78 53 79 6e 63 28 0d 0a 20 20 20 20  ode xSync(..    
1a3e0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1a3f0 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
1a400 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
1a410 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1a460 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1a470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
1a480 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1a490 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 63 61  / This method ca
1a4a0 75 73 65 73 20 61 20 76 69 72 74 75 61 6c 20 74  uses a virtual t
1a4b0 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  able transaction
1a4c0 20 74 6f 20 63 6f 6d 6d 69 74 2e 20 54 68 69 73   to commit. This
1a4d0 20 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   is..        ///
1a4e0 20 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f   method is optio
1a4f0 6e 61 6c 2e 20 54 68 65 20 78 43 6f 6d 6d 69 74  nal. The xCommit
1a500 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c 69   pointer of sqli
1a510 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20 62  te3_module may b
1a520 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  e..        /// N
1a530 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ULL...        //
1a540 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20  / </para>..     
1a550 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1a560 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61 6c         /// A cal
1a570 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f 64  l to this method
1a580 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20   always follows 
1a590 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f 20  a prior call to 
1a5a0 78 42 65 67 69 6e 20 61 6e 64 0d 0a 20 20 20 20  xBegin and..    
1a5b0 20 20 20 20 2f 2f 2f 20 78 53 79 6e 63 2e 0d 0a      /// xSync...
1a5c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1a5d0 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ra>..        ///
1a5e0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1a5f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1a600 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
1a610 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e         /// The n
1a620 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
1a630 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
1a640 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  b derived struct
1a650 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
1a660 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1a670 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1a680 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
1a690 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
1a6a0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
1a6b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
1a6c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
1a6d0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
1a6e0 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20  Commit(..       
1a6f0 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1a700 62 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  b..            )
1a710 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1a750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a760 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a770 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1a780 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1a790 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1a7a0 68 69 73 20 6d 65 74 68 6f 64 20 63 61 75 73 65  his method cause
1a7b0 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
1a7c0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f  e transaction to
1a7d0 20 72 6f 6c 6c 62 61 63 6b 2e 20 54 68 69 73 20   rollback. This 
1a7e0 69 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  is..        /// 
1a7f0 6d 65 74 68 6f 64 20 69 73 20 6f 70 74 69 6f 6e  method is option
1a800 61 6c 2e 20 54 68 65 20 78 52 6f 6c 6c 62 61 63  al. The xRollbac
1a810 6b 20 70 6f 69 6e 74 65 72 20 6f 66 20 73 71 6c  k pointer of sql
1a820 69 74 65 33 5f 6d 6f 64 75 6c 65 20 6d 61 79 20  ite3_module may 
1a830 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1a840 4e 55 4c 4c 2e 0d 0a 20 20 20 20 20 20 20 20 2f  NULL...        /
1a850 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1a860 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1a870 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 63 61          /// A ca
1a880 6c 6c 20 74 6f 20 74 68 69 73 20 6d 65 74 68 6f  ll to this metho
1a890 64 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73  d always follows
1a8a0 20 61 20 70 72 69 6f 72 20 63 61 6c 6c 20 74 6f   a prior call to
1a8b0 20 78 42 65 67 69 6e 2e 0d 0a 20 20 20 20 20 20   xBegin...      
1a8c0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20    /// </para>.. 
1a8d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1a8e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1a8f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1a900 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
1a910 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1a920 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
1a930 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
1a940 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a  ved structure...
1a950 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1a960 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1a970 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1a980 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1a990 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1a9a0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1a9b0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1a9c0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1a9d0 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c 62 61  rrorCode xRollba
1a9e0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
1a9f0 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
1aa00 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1aa10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1aa70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1aa80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1aa90 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1aaa0 6d 65 74 68 6f 64 20 70 72 6f 76 69 64 65 73 20  method provides 
1aab0 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20 74 68 61  notification tha
1aac0 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  t the virtual ta
1aad0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ble..        ///
1aae0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
1aaf0 74 68 61 74 20 74 68 65 20 76 69 72 74 75 61 6c  that the virtual
1ab00 20 74 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 67   table will be g
1ab10 69 76 65 6e 20 61 20 6e 65 77 20 6e 61 6d 65 2e  iven a new name.
1ab20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   If..        ///
1ab30 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74   this method ret
1ab40 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f 4b 20 74  urns SQLITE_OK t
1ab50 68 65 6e 20 53 51 4c 69 74 65 20 72 65 6e 61 6d  hen SQLite renam
1ab60 65 73 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  es the table. If
1ab70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
1ab80 69 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e  is method return
1ab90 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 20  s an error code 
1aba0 74 68 65 6e 20 74 68 65 20 72 65 6e 61 6d 69 6e  then the renamin
1abb0 67 20 69 73 20 70 72 65 76 65 6e 74 65 64 2e 0d  g is prevented..
1abc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1abd0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1abe0 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1abf0 20 20 2f 2f 2f 20 54 68 65 20 78 52 65 6e 61 6d    /// The xRenam
1ac00 65 20 6d 65 74 68 6f 64 20 69 73 20 72 65 71 75  e method is requ
1ac10 69 72 65 64 20 66 6f 72 20 65 76 65 72 79 20 76  ired for every v
1ac20 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20  irtual table..  
1ac30 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d        /// implem
1ac40 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  entation...     
1ac50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a     /// </para>..
1ac60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1ac70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1ac80 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1ac90 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
1aca0 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65    /// The native
1acb0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
1acc0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
1acd0 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
1ace0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1acf0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1ad00 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1ad10 6e 41 72 67 22 3e 0d 0a 20 20 20 20 20 20 20 20  nArg">..        
1ad20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  /// The number o
1ad30 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
1ad40 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e  he function bein
1ad50 67 20 73 6f 75 67 68 74 2e 0d 0a 20 20 20 20 20  g sought...     
1ad60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1ad70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1ad80 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 61 6d 65 22  ram name="zName"
1ad90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
1ada0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
1adb0 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f  unction being so
1adc0 75 67 68 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ught...        /
1add0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1ade0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1adf0 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22 3e  name="callback">
1ae00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 70  ..        /// Up
1ae10 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 69 73  on success, this
1ae20 20 70 61 72 61 6d 65 74 65 72 20 6d 75 73 74 20   parameter must 
1ae30 62 65 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 63  be modified to c
1ae40 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20  ontain the..    
1ae50 20 20 20 20 2f 2f 2f 20 64 65 6c 65 67 61 74 65      /// delegate
1ae60 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1ae70 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
1ae80 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e 63  e specified func
1ae90 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
1aea0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1aeb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1aec0 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74  name="pClientDat
1aed0 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  a">..        ///
1aee0 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
1aef0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
1af00 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
1af10 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the.. 
1af20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76         /// nativ
1af30 65 20 75 73 65 72 2d 64 61 74 61 20 70 6f 69 6e  e user-data poin
1af40 74 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ter associated w
1af50 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ith..        ///
1af60 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
1af70 22 63 61 6c 6c 62 61 63 6b 22 20 2f 3e 2e 0d 0a  "callback" />...
1af80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1af90 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1afa0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1afb0 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72       /// Non-zer
1afc0 6f 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69  o if the specifi
1afd0 65 64 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ed function was 
1afe0 66 6f 75 6e 64 3b 20 7a 65 72 6f 20 6f 74 68 65  found; zero othe
1aff0 72 77 69 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  rwise...        
1b000 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1b010 20 20 20 20 20 20 20 20 69 6e 74 20 78 46 69 6e          int xFin
1b020 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  dFunction(..    
1b030 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
1b040 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20  Vtab,..         
1b050 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d 0a 20 20     int nArg,..  
1b060 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
1b070 20 7a 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20   zName,..       
1b080 20 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 43       ref SQLiteC
1b090 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
1b0a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1b0b0 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
1b0c0 74 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20  tData..         
1b0d0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
1b0e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1b0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b120 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b130 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1b140 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1b150 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1b160 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 70  // This method p
1b170 72 6f 76 69 64 65 73 20 6e 6f 74 69 66 69 63 61  rovides notifica
1b180 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 76 69  tion that the vi
1b190 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20  rtual table..   
1b1a0 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65       /// impleme
1b1b0 6e 74 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  ntation that the
1b1c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 77   virtual table w
1b1d0 69 6c 6c 20 62 65 20 67 69 76 65 6e 20 61 20 6e  ill be given a n
1b1e0 65 77 20 6e 61 6d 65 2e 20 49 66 0d 0a 20 20 20  ew name. If..   
1b1f0 20 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65       /// this me
1b200 74 68 6f 64 20 72 65 74 75 72 6e 73 20 53 51 4c  thod returns SQL
1b210 49 54 45 5f 4f 4b 20 74 68 65 6e 20 53 51 4c 69  ITE_OK then SQLi
1b220 74 65 20 72 65 6e 61 6d 65 73 20 74 68 65 20 74  te renames the t
1b230 61 62 6c 65 2e 20 49 66 0d 0a 20 20 20 20 20 20  able. If..      
1b240 20 20 2f 2f 2f 20 74 68 69 73 20 6d 65 74 68 6f    /// this metho
1b250 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72  d returns an err
1b260 6f 72 20 63 6f 64 65 20 74 68 65 6e 20 74 68 65  or code then the
1b270 20 72 65 6e 61 6d 69 6e 67 20 69 73 20 70 72 65   renaming is pre
1b280 76 65 6e 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  vented...       
1b290 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20   /// </para>..  
1b2a0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e        /// <para>
1b2b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1b2c0 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  e xRename method
1b2d0 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72   is required for
1b2e0 20 65 76 65 72 79 20 76 69 72 74 75 61 6c 20 74   every virtual t
1b2f0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  able..        //
1b300 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  / implementation
1b310 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1b320 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1b330 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1b340 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1b350 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1b360 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1b370 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1b380 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1b390 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1b3a0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1b3b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1b3c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1b3d0 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77 22 3e 0d 0a  m name="zNew">..
1b3e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1b3f0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1b400 6f 20 74 68 65 20 55 54 46 2d 38 20 65 6e 63 6f  o the UTF-8 enco
1b410 64 65 64 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  ded string conta
1b420 69 6e 69 6e 67 20 74 68 65 20 6e 65 77 0d 0a 20  ining the new.. 
1b430 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 6d 65 20         /// name 
1b440 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
1b450 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
1b460 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1b470 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1b480 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1b490 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1b4a0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1b4b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1b4c0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1b4d0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1b4e0 20 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20   xRename(..     
1b4f0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
1b500 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
1b510 20 20 49 6e 74 50 74 72 20 7a 4e 65 77 0d 0a 20    IntPtr zNew.. 
1b520 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1b530 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1b590 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1b5a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20     /// <para>.. 
1b5b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 73 65         /// These
1b5c0 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69 64 65   methods provide
1b5d0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
1b5e0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
1b5f0 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n an..        //
1b600 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f  / opportunity to
1b610 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73 74 65   implement neste
1b620 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  d transactions. 
1b630 54 68 65 79 20 61 72 65 20 61 6c 77 61 79 73 0d  They are always.
1b640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70 74  .        /// opt
1b650 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c 20 6f  ional and will o
1b660 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20 69 6e  nly be called in
1b670 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
1b680 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65 72 2e  3.7.7 and later.
1b690 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1b6a0 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1b6b0 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1b6c0 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53 61 76     /// When xSav
1b6d0 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73 20 69  epoint(X,N) is i
1b6e0 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69 73 20  nvoked, that is 
1b6f0 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68 65 20  a signal to the 
1b700 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20 20 20  virtual..       
1b710 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74 68 61   /// table X tha
1b720 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61 76 65  t it should save
1b730 20 69 74 73 20 63 75 72 72 65 6e 74 20 73 74 61   its current sta
1b740 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e 74 20  te as savepoint 
1b750 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20 2f 2f  N. A..        //
1b760 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  / subsequent cal
1b770 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1b780 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68 61 74  (X,R) means that
1b790 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68   the state of th
1b7a0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
1b7b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 68 6f  irtual table sho
1b7c0 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20 77 68  uld return to wh
1b7d0 61 74 20 69 74 20 77 61 73 20 77 68 65 6e 20 78  at it was when x
1b7e0 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29 20 77  Savepoint(X,R) w
1b7f0 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  as..        /// 
1b800 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54 68 65  last called. The
1b810 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61   call to xRollba
1b820 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c 20 69  ckTo(X,R) will i
1b830 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d 0a 20  nvalidate all.. 
1b840 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76 65 70         /// savep
1b850 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52 3b 20  oints with N>R; 
1b860 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 76 61  none of the inva
1b870 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e 74 73  lided savepoints
1b880 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
1b890 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62 61 63    /// rolled bac
1b8a0 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20 77 69  k or released wi
1b8b0 74 68 6f 75 74 20 66 69 72 73 74 20 62 65 69 6e  thout first bein
1b8c0 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 64 20  g reinitialized 
1b8d0 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20 20 20  by a call..     
1b8e0 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76 65 70     /// to xSavep
1b8f0 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c 20 74  oint(). A call t
1b900 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d 29 20  o xRelease(X,M) 
1b910 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c 6c 20  invalidates all 
1b920 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20 20 20  savepoints..    
1b930 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20 4e 3e      /// where N>
1b940 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  =M...        ///
1b950 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20   </para>..      
1b960 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20    /// <para>..  
1b970 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f        /// None o
1b980 66 20 74 68 65 20 78 53 61 76 65 70 6f 69 6e 74  f the xSavepoint
1b990 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29 2c 20  (), xRelease(), 
1b9a0 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 29  or xRollbackTo()
1b9b0 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d 0a 20   methods will.. 
1b9c0 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65 72 20         /// ever 
1b9d0 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65 70 74  be called except
1b9e0 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61 6c 6c   in between call
1b9f0 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20 61 6e  s to xBegin() an
1ba00 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20 20 20  d either..      
1ba10 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28 29 20    /// xCommit() 
1ba20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d  or xRollback()..
1ba30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1ba40 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1ba50 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1ba60 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1ba70 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
1ba80 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
1ba90 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
1baa0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
1bab0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
1bac0 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
1bad0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1bae0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1baf0 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69 6e 74  name="iSavepoint
1bb00 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1bb10 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67  This is an integ
1bb20 65 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e  er identifier un
1bb30 64 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68  der which the th
1bb40 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20  e current state 
1bb50 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  of..        /// 
1bb60 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1bb70 65 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65  e should be save
1bb80 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1bb90 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1bba0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1bbb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1bbc0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1bbd0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1bbe0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1bbf0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1bc00 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 53 61  iteErrorCode xSa
1bc10 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
1bc20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
1bc30 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
1bc40 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d   int iSavepoint.
1bc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1bc60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bcb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1bcc0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1bcd0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d       /// <para>.
1bce0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1bcf0 73 65 20 6d 65 74 68 6f 64 73 20 70 72 6f 76 69  se methods provi
1bd00 64 65 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  de the virtual t
1bd10 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
1bd20 69 6f 6e 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  ion an..        
1bd30 2f 2f 2f 20 6f 70 70 6f 72 74 75 6e 69 74 79 20  /// opportunity 
1bd40 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 6e 65 73  to implement nes
1bd50 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ted transactions
1bd60 2e 20 54 68 65 79 20 61 72 65 20 61 6c 77 61 79  . They are alway
1bd70 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f  s..        /// o
1bd80 70 74 69 6f 6e 61 6c 20 61 6e 64 20 77 69 6c 6c  ptional and will
1bd90 20 6f 6e 6c 79 20 62 65 20 63 61 6c 6c 65 64 20   only be called 
1bda0 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
1bdb0 6e 20 33 2e 37 2e 37 20 61 6e 64 20 6c 61 74 65  n 3.7.7 and late
1bdc0 72 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  r...        /// 
1bdd0 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20  </para>..       
1bde0 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20   /// <para>..   
1bdf0 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 78 53       /// When xS
1be00 61 76 65 70 6f 69 6e 74 28 58 2c 4e 29 20 69 73  avepoint(X,N) is
1be10 20 69 6e 76 6f 6b 65 64 2c 20 74 68 61 74 20 69   invoked, that i
1be20 73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 74 68  s a signal to th
1be30 65 20 76 69 72 74 75 61 6c 0d 0a 20 20 20 20 20  e virtual..     
1be40 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 58 20 74     /// table X t
1be50 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20 73 61  hat it should sa
1be60 76 65 20 69 74 73 20 63 75 72 72 65 6e 74 20 73  ve its current s
1be70 74 61 74 65 20 61 73 20 73 61 76 65 70 6f 69 6e  tate as savepoin
1be80 74 20 4e 2e 20 41 0d 0a 20 20 20 20 20 20 20 20  t N. A..        
1be90 2f 2f 2f 20 73 75 62 73 65 71 75 65 6e 74 20 63  /// subsequent c
1bea0 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b  all to xRollback
1beb0 54 6f 28 58 2c 52 29 20 6d 65 61 6e 73 20 74 68  To(X,R) means th
1bec0 61 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  at the state of 
1bed0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1bee0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
1bef0 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 74 6f 20  hould return to 
1bf00 77 68 61 74 20 69 74 20 77 61 73 20 77 68 65 6e  what it was when
1bf10 20 78 53 61 76 65 70 6f 69 6e 74 28 58 2c 52 29   xSavepoint(X,R)
1bf20 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f   was..        //
1bf30 2f 20 6c 61 73 74 20 63 61 6c 6c 65 64 2e 20 54  / last called. T
1bf40 68 65 20 63 61 6c 6c 20 74 6f 20 78 52 6f 6c 6c  he call to xRoll
1bf50 62 61 63 6b 54 6f 28 58 2c 52 29 20 77 69 6c 6c  backTo(X,R) will
1bf60 20 69 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 0d   invalidate all.
1bf70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 61 76  .        /// sav
1bf80 65 70 6f 69 6e 74 73 20 77 69 74 68 20 4e 3e 52  epoints with N>R
1bf90 3b 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  ; none of the in
1bfa0 76 61 6c 69 64 65 64 20 73 61 76 65 70 6f 69 6e  valided savepoin
1bfb0 74 73 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  ts will be..    
1bfc0 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65 64 20 62      /// rolled b
1bfd0 61 63 6b 20 6f 72 20 72 65 6c 65 61 73 65 64 20  ack or released 
1bfe0 77 69 74 68 6f 75 74 20 66 69 72 73 74 20 62 65  without first be
1bff0 69 6e 67 20 72 65 69 6e 69 74 69 61 6c 69 7a 65  ing reinitialize
1c000 64 20 62 79 20 61 20 63 61 6c 6c 0d 0a 20 20 20  d by a call..   
1c010 20 20 20 20 20 2f 2f 2f 20 74 6f 20 78 53 61 76       /// to xSav
1c020 65 70 6f 69 6e 74 28 29 2e 20 41 20 63 61 6c 6c  epoint(). A call
1c030 20 74 6f 20 78 52 65 6c 65 61 73 65 28 58 2c 4d   to xRelease(X,M
1c040 29 20 69 6e 76 61 6c 69 64 61 74 65 73 20 61 6c  ) invalidates al
1c050 6c 20 73 61 76 65 70 6f 69 6e 74 73 0d 0a 20 20  l savepoints..  
1c060 20 20 20 20 20 20 2f 2f 2f 20 77 68 65 72 65 20        /// where 
1c070 4e 3e 3d 4d 2e 0d 0a 20 20 20 20 20 20 20 20 2f  N>=M...        /
1c080 2f 2f 20 3c 2f 70 61 72 61 3e 0d 0a 20 20 20 20  // </para>..    
1c090 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 3e 0d 0a      /// <para>..
1c0a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 65          /// None
1c0b0 20 6f 66 20 74 68 65 20 78 53 61 76 65 70 6f 69   of the xSavepoi
1c0c0 6e 74 28 29 2c 20 78 52 65 6c 65 61 73 65 28 29  nt(), xRelease()
1c0d0 2c 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  , or xRollbackTo
1c0e0 28 29 20 6d 65 74 68 6f 64 73 20 77 69 6c 6c 0d  () methods will.
1c0f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 76 65  .        /// eve
1c100 72 20 62 65 20 63 61 6c 6c 65 64 20 65 78 63 65  r be called exce
1c110 70 74 20 69 6e 20 62 65 74 77 65 65 6e 20 63 61  pt in between ca
1c120 6c 6c 73 20 74 6f 20 78 42 65 67 69 6e 28 29 20  lls to xBegin() 
1c130 61 6e 64 20 65 69 74 68 65 72 0d 0a 20 20 20 20  and either..    
1c140 20 20 20 20 2f 2f 2f 20 78 43 6f 6d 6d 69 74 28      /// xCommit(
1c150 29 20 6f 72 20 78 52 6f 6c 6c 62 61 63 6b 28 29  ) or xRollback()
1c160 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c170 2f 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20  /para>..        
1c180 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1c190 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
1c1a0 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
1c1b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1c1c0 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
1c1d0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
1c1e0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
1c1f0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
1c200 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1c210 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1c220 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70 6f 69  m name="iSavepoi
1c230 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nt">..        //
1c240 2f 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74  / This is an int
1c250 65 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64  eger used to ind
1c260 69 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73  icate that any s
1c270 61 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68  aved states with
1c280 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   an..        ///
1c290 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
1c2a0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1c2b0 6c 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64  l to this should
1c2c0 20 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74   be deleted by t
1c2d0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1c2e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1c2f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1c300 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1c310 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1c320 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1c330 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1c340 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1c350 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1c360 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1c370 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65 61 73  rrorCode xReleas
1c380 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1c390 49 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20  IntPtr pVtab,.. 
1c3a0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69             int i
1c3b0 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20  Savepoint..     
1c3c0 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
1c3d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c420 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
1c430 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1c440 2f 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20  // <para>..     
1c450 20 20 20 2f 2f 2f 20 54 68 65 73 65 20 6d 65 74     /// These met
1c460 68 6f 64 73 20 70 72 6f 76 69 64 65 20 74 68 65  hods provide the
1c470 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
1c480 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 61 6e  mplementation an
1c490 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6f 70  ..        /// op
1c4a0 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 69 6d 70  portunity to imp
1c4b0 6c 65 6d 65 6e 74 20 6e 65 73 74 65 64 20 74 72  lement nested tr
1c4c0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 54 68 65 79  ansactions. They
1c4d0 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20   are always..   
1c4e0 20 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e 61       /// optiona
1c4f0 6c 20 61 6e 64 20 77 69 6c 6c 20 6f 6e 6c 79 20  l and will only 
1c500 62 65 20 63 61 6c 6c 65 64 20 69 6e 20 53 51 4c  be called in SQL
1c510 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1c520 37 20 61 6e 64 20 6c 61 74 65 72 2e 0d 0a 20 20  7 and later...  
1c530 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1c540 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1c550 70 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f  para>..        /
1c560 2f 2f 20 57 68 65 6e 20 78 53 61 76 65 70 6f 69  // When xSavepoi
1c570 6e 74 28 58 2c 4e 29 20 69 73 20 69 6e 76 6f 6b  nt(X,N) is invok
1c580 65 64 2c 20 74 68 61 74 20 69 73 20 61 20 73 69  ed, that is a si
1c590 67 6e 61 6c 20 74 6f 20 74 68 65 20 76 69 72 74  gnal to the virt
1c5a0 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ual..        ///
1c5b0 20 74 61 62 6c 65 20 58 20 74 68 61 74 20 69 74   table X that it
1c5c0 20 73 68 6f 75 6c 64 20 73 61 76 65 20 69 74 73   should save its
1c5d0 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 61   current state a
1c5e0 73 20 73 61 76 65 70 6f 69 6e 74 20 4e 2e 20 41  s savepoint N. A
1c5f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 75  ..        /// su
1c600 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 20 74 6f  bsequent call to
1c610 20 78 52 6f 6c 6c 62 61 63 6b 54 6f 28 58 2c 52   xRollbackTo(X,R
1c620 29 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  ) means that the
1c630 20 73 74 61 74 65 20 6f 66 20 74 68 65 0d 0a 20   state of the.. 
1c640 20 20 20 20 20 20 20 2f 2f 2f 20 76 69 72 74 75         /// virtu
1c650 61 6c 20 74 61 62 6c 65 20 73 68 6f 75 6c 64 20  al table should 
1c660 72 65 74 75 72 6e 20 74 6f 20 77 68 61 74 20 69  return to what i
1c670 74 20 77 61 73 20 77 68 65 6e 20 78 53 61 76 65  t was when xSave
1c680 70 6f 69 6e 74 28 58 2c 52 29 20 77 61 73 0d 0a  point(X,R) was..
1c690 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 61 73 74          /// last
1c6a0 20 63 61 6c 6c 65 64 2e 20 54 68 65 20 63 61 6c   called. The cal
1c6b0 6c 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 54 6f  l to xRollbackTo
1c6c0 28 58 2c 52 29 20 77 69 6c 6c 20 69 6e 76 61 6c  (X,R) will inval
1c6d0 69 64 61 74 65 20 61 6c 6c 0d 0a 20 20 20 20 20  idate all..     
1c6e0 20 20 20 2f 2f 2f 20 73 61 76 65 70 6f 69 6e 74     /// savepoint
1c6f0 73 20 77 69 74 68 20 4e 3e 52 3b 20 6e 6f 6e 65  s with N>R; none
1c700 20 6f 66 20 74 68 65 20 69 6e 76 61 6c 69 64 65   of the invalide
1c710 64 20 73 61 76 65 70 6f 69 6e 74 73 20 77 69 6c  d savepoints wil
1c720 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  l be..        //
1c730 2f 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6f 72  / rolled back or
1c740 20 72 65 6c 65 61 73 65 64 20 77 69 74 68 6f 75   released withou
1c750 74 20 66 69 72 73 74 20 62 65 69 6e 67 20 72 65  t first being re
1c760 69 6e 69 74 69 61 6c 69 7a 65 64 20 62 79 20 61  initialized by a
1c770 20 63 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 2f   call..        /
1c780 2f 2f 20 74 6f 20 78 53 61 76 65 70 6f 69 6e 74  // to xSavepoint
1c790 28 29 2e 20 41 20 63 61 6c 6c 20 74 6f 20 78 52  (). A call to xR
1c7a0 65 6c 65 61 73 65 28 58 2c 4d 29 20 69 6e 76 61  elease(X,M) inva
1c7b0 6c 69 64 61 74 65 73 20 61 6c 6c 20 73 61 76 65  lidates all save
1c7c0 70 6f 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  points..        
1c7d0 2f 2f 2f 20 77 68 65 72 65 20 4e 3e 3d 4d 2e 0d  /// where N>=M..
1c7e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1c7f0 61 72 61 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ara>..        //
1c800 2f 20 3c 70 61 72 61 3e 0d 0a 20 20 20 20 20 20  / <para>..      
1c810 20 20 2f 2f 2f 20 4e 6f 6e 65 20 6f 66 20 74 68    /// None of th
1c820 65 20 78 53 61 76 65 70 6f 69 6e 74 28 29 2c 20  e xSavepoint(), 
1c830 78 52 65 6c 65 61 73 65 28 29 2c 20 6f 72 20 78  xRelease(), or x
1c840 52 6f 6c 6c 62 61 63 6b 54 6f 28 29 20 6d 65 74  RollbackTo() met
1c850 68 6f 64 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20  hods will..     
1c860 20 20 20 2f 2f 2f 20 65 76 65 72 20 62 65 20 63     /// ever be c
1c870 61 6c 6c 65 64 20 65 78 63 65 70 74 20 69 6e 20  alled except in 
1c880 62 65 74 77 65 65 6e 20 63 61 6c 6c 73 20 74 6f  between calls to
1c890 20 78 42 65 67 69 6e 28 29 20 61 6e 64 20 65 69   xBegin() and ei
1c8a0 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ther..        //
1c8b0 2f 20 78 43 6f 6d 6d 69 74 28 29 20 6f 72 20 78  / xCommit() or x
1c8c0 52 6f 6c 6c 62 61 63 6b 28 29 2e 0d 0a 20 20 20  Rollback()...   
1c8d0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 3e       /// </para>
1c8e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1c8f0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1c900 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1c910 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
1c920 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69      /// The nati
1c930 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  ve pointer to th
1c940 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64  e sqlite3_vtab d
1c950 65 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65  erived structure
1c960 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1c970 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1c980 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1c990 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
1c9a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1c9b0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 69   is an integer i
1c9c0 64 65 6e 74 69 66 69 65 72 20 75 73 65 64 20 74  dentifier used t
1c9d0 6f 20 73 70 65 63 69 66 79 20 61 20 73 70 65 63  o specify a spec
1c9e0 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20 20 20  ific saved..    
1c9f0 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20 66 6f      /// state fo
1ca00 72 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  r the virtual ta
1ca10 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20 72 65  ble for it to re
1ca20 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62 61 63  store itself bac
1ca30 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20 20 20  k to, which..   
1ca40 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20       /// should 
1ca50 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20 65 66  also have the ef
1ca60 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69 6e 67  fect of deleting
1ca70 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61 74 65   all saved state
1ca80 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20 20 20  s with an..     
1ca90 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 69     /// integer i
1caa0 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74 65  dentifier greate
1cab0 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e 65 2e  r than this one.
1cac0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1cad0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1cae0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1caf0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1cb00 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1cb10 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1cb20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1cb30 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1cb40 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c 6c  eErrorCode xRoll
1cb50 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20  backTo(..       
1cb60 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61       IntPtr pVta
1cb70 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b,..            
1cb80 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a  int iSavepoint..
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1cba0 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1cbb0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
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 2f 2f 2f 2f 2f 2f  ////////////////
1cbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1cc10 23 72 65 67 69 6f 6e 20 49 53 51 4c 69 74 65 4d  #region ISQLiteM
1cc20 61 6e 61 67 65 64 4d 6f 64 75 6c 65 20 49 6e 74  anagedModule Int
1cc30 65 72 66 61 63 65 0d 0a 20 20 20 20 2f 2f 2f 20  erface..    /// 
1cc40 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1cc50 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 66 61 63  // This interfac
1cc60 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 76  e represents a v
1cc70 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
1cc80 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 77 72 69 74  lementation writ
1cc90 74 65 6e 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ten in..    /// 
1cca0 6d 61 6e 61 67 65 64 20 63 6f 64 65 2e 0d 0a 20  managed code... 
1ccb0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1ccc0 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e  >..    public in
1ccd0 74 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 4d  terface ISQLiteM
1cce0 61 6e 61 67 65 64 4d 6f 64 75 6c 65 0d 0a 20 20  anagedModule..  
1ccf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f    {..        ///
1cd00 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1cd10 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
1cd20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1cd30 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 76  schema for the v
1cd40 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
1cd50 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 2f   been..        /
1cd60 2f 2f 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  // declared...  
1cd70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1cd80 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 62 6f  ary>..        bo
1cd90 6f 6c 20 44 65 63 6c 61 72 65 64 20 7b 20 67 65  ol Declared { ge
1cda0 74 3b 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t; }....        
1cdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cdf0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ce00 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1ce10 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65  ..        /// Re
1ce20 74 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  turns the name o
1ce30 66 20 74 68 65 20 6d 6f 64 75 6c 65 20 61 73 20  f the module as 
1ce40 69 74 20 77 61 73 20 72 65 67 69 73 74 65 72 65  it was registere
1ce50 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
1ce60 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 63  e..        /// c
1ce70 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
1ce80 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1ce90 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 73 74  ary>..        st
1cea0 72 69 6e 67 20 4e 61 6d 65 20 7b 20 67 65 74 3b  ring Name { get;
1ceb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1cec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ced0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf00 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1cf10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1cf20 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1cf30 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1cf40 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1cf50 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1cf60 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1cf70 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1cf80 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74  .xCreate" /> met
1cf90 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1cfa0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1cfb0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1cfc0 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f   name="connectio
1cfd0 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n">..        ///
1cfe0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1cff0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1d000 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1d010 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 20  ance associated 
1d020 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  with..        //
1d030 2f 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  / the virtual ta
1d040 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
1d050 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1d060 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1d070 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44 61 74 61  ame="pClientData
1d080 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
1d090 54 68 65 20 6e 61 74 69 76 65 20 75 73 65 72 2d  The native user-
1d0a0 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73 73  data pointer ass
1d0b0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
1d0c0 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20 69 74 20  s module, as it 
1d0d0 77 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  was..        ///
1d0e0 20 70 72 6f 76 69 64 65 64 20 74 6f 20 74 68 65   provided to the
1d0f0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
1d100 72 61 72 79 20 77 68 65 6e 20 74 68 65 20 6e 61  rary when the na
1d110 74 69 76 65 20 6d 6f 64 75 6c 65 20 69 6e 73 74  tive module inst
1d120 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1d130 2f 20 77 61 73 20 63 72 65 61 74 65 64 2e 0d 0a  / was created...
1d140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1d150 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1d160 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61  / <param name="a
1d170 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20 20 20 20  rguments">..    
1d180 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
1d190 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61 62 61 73  le name, databas
1d1a0 65 20 6e 61 6d 65 2c 20 76 69 72 74 75 61 6c 20  e name, virtual 
1d1b0 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61 6e 64 20  table name, and 
1d1c0 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20 20 20 20  all other..     
1d1d0 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65 6e 74 73     /// arguments
1d1e0 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 43   passed to the C
1d1f0 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
1d200 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  BLE statement...
1d210 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1d220 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1d230 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1d240 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1d250 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
1d260 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  , this parameter
1d270 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69 65   must be modifie
1d280 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  d to contain the
1d290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1d2a0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1d2b0 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1d2c0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1d2d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
1d2e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
1d2f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
1d300 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1d310 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1d320 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1d330 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  error">..       
1d340 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72   /// Upon failur
1d350 65 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  e, this paramete
1d360 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66 69  r must be modifi
1d370 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
1d380 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
1d390 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  /// message...  
1d3a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1d3b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1d3c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1d3d0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1d3e0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1d3f0 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1d400 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1d410 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1d420 6f 72 43 6f 64 65 20 43 72 65 61 74 65 28 0d 0a  orCode Create(..
1d430 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1d440 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e  teConnection con
1d450 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a 20 69 6e 20  nection,  /* in 
1d460 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1d470 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74 44 61  IntPtr pClientDa
1d480 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ta,           /*
1d490 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1d4a0 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
1d4b0 75 6d 65 6e 74 73 2c 20 20 20 20 20 20 20 20 20  uments,         
1d4c0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1d4d0 20 20 20 20 20 20 20 20 72 65 66 20 53 51 4c 69          ref SQLi
1d4e0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74  teVirtualTable t
1d4f0 61 62 6c 65 2c 20 2f 2a 20 6f 75 74 20 2a 2f 0d  able, /* out */.
1d500 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1d510 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20   string error   
1d520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1d530 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  t */..          
1d540 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
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 2f 2f  ////////////////
1d580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d590 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d5a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1d5b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
1d5c0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
1d5d0 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
1d5e0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1d5f0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
1d600 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
1d610 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20  le.xConnect" /> 
1d620 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
1d630 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1d640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1d650 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63  ram name="connec
1d660 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20 20 20  tion">..        
1d670 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1d680 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
1d690 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ion" /> object i
1d6a0 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74  nstance associat
1d6b0 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 20  ed with..       
1d6c0 20 2f 2f 2f 20 74 68 65 20 76 69 72 74 75 61 6c   /// the virtual
1d6d0 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
1d6e0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1d6f0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
1d700 6d 20 6e 61 6d 65 3d 22 70 43 6c 69 65 6e 74 44  m name="pClientD
1d710 61 74 61 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ata">..        /
1d720 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 75 73  // The native us
1d730 65 72 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20  er-data pointer 
1d740 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1d750 74 68 69 73 20 6d 6f 64 75 6c 65 2c 20 61 73 20  this module, as 
1d760 69 74 20 77 61 73 0d 0a 20 20 20 20 20 20 20 20  it was..        
1d770 2f 2f 2f 20 70 72 6f 76 69 64 65 64 20 74 6f 20  /// provided to 
1d780 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1d790 6c 69 62 72 61 72 79 20 77 68 65 6e 20 74 68 65  library when the
1d7a0 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 20 69   native module i
1d7b0 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20  nstance..       
1d7c0 20 2f 2f 2f 20 77 61 73 20 63 72 65 61 74 65 64   /// was created
1d7d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d7e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1d7f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d800 3d 22 61 72 67 75 6d 65 6e 74 73 22 3e 0d 0a 20  ="arguments">.. 
1d810 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d         /// The m
1d820 6f 64 75 6c 65 20 6e 61 6d 65 2c 20 64 61 74 61  odule name, data
1d830 62 61 73 65 20 6e 61 6d 65 2c 20 76 69 72 74 75  base name, virtu
1d840 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 2c 20 61  al table name, a
1d850 6e 64 20 61 6c 6c 20 6f 74 68 65 72 0d 0a 20 20  nd all other..  
1d860 20 20 20 20 20 20 2f 2f 2f 20 61 72 67 75 6d 65        /// argume
1d870 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
1d880 65 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  e CREATE VIRTUAL
1d890 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
1d8a0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1d8b0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1d8c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1d8d0 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20  ="table">..     
1d8e0 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1d8f0 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1d900 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1d910 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1d920 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1d930 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1d940 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
1d950 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1d960 63 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ce associated wi
1d970 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  th..        /// 
1d980 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
1d990 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
1d9a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1d9b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1d9c0 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
1d9d0 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66 61 69      /// Upon fai
1d9e0 6c 75 72 65 2c 20 74 68 69 73 20 70 61 72 61 6d  lure, this param
1d9f0 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64  eter must be mod
1da00 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  ified to contain
1da10 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
1da20 20 20 20 2f 2f 2f 20 6d 65 73 73 61 67 65 2e 0d     /// message..
1da30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1da40 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1da50 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1da60 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e        /// A stan
1da70 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75  dard SQLite retu
1da80 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20  rn code...      
1da90 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
1daa0 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
1dab0 45 72 72 6f 72 43 6f 64 65 20 43 6f 6e 6e 65 63  ErrorCode Connec
1dac0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1dad0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1dae0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 20 2f 2a   connection,  /*
1daf0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1db00 20 20 20 20 49 6e 74 50 74 72 20 70 43 6c 69 65      IntPtr pClie
1db10 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20  ntData,         
1db20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
1db30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
1db40 20 61 72 67 75 6d 65 6e 74 73 2c 20 20 20 20 20   arguments,     
1db50 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
1db60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1db70 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
1db80 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 6f 75 74  le table, /* out
1db90 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1dba0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1dbb0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r              /
1dbc0 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20  * out */..      
1dbd0 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20        );....    
1dbe0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1dbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1dc30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
1dc40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1dc50 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73  / This method is
1dc60 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f   called in respo
1dc70 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  nse to the..    
1dc80 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
1dc90 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
1dca0 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
1dcb0 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  x" /> method... 
1dcc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
1dcd0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
1dce0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1dcf0 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20  table">..       
1dd00 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
1dd10 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61  ef="SQLiteVirtua
1dd20 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  lTable" /> objec
1dd30 74 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63  t instance assoc
1dd40 69 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f  iated..        /
1dd50 2f 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72  // with this vir
1dd60 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
1dd70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
1dd80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
1dd90 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65  param name="inde
1dda0 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  x">..        ///
1ddb0 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1ddc0 53 51 4c 69 74 65 49 6e 64 65 78 22 20 2f 3e 20  SQLiteIndex" /> 
1ddd0 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1dde0 63 6f 6e 74 61 69 6e 69 6e 67 20 61 6c 6c 20 74  containing all t
1ddf0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1de00 64 61 74 61 20 66 6f 72 20 74 68 65 20 69 6e 70  data for the inp
1de10 75 74 73 20 61 6e 64 20 6f 75 74 70 75 74 73 20  uts and outputs 
1de20 72 65 6c 61 74 69 6e 67 20 74 6f 20 69 6e 64 65  relating to inde
1de30 78 20 73 65 6c 65 63 74 69 6f 6e 2e 0d 0a 20 20  x selection...  
1de40 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1de50 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1de60 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1de70 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1de80 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1de90 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1dea0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1deb0 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1dec0 6f 72 43 6f 64 65 20 42 65 73 74 49 6e 64 65 78  orCode BestIndex
1ded0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  (..            S
1dee0 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
1def0 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a  e table, /* in *
1df00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  /..            S
1df10 51 4c 69 74 65 49 6e 64 65 78 20 69 6e 64 65 78  QLiteIndex index
1df20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20           /* in, 
1df30 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
1df40 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
1df50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1dfa0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1dfb0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1dfc0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
1dfd0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
1dfe0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
1dff0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
1e000 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
1e010 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74  dule.xDisconnect
1e020 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1e030 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
1e040 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
1e050 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1e060 61 62 6c 65 22 3e 0d 0a 20 20 20 20 20 20 20 20  able">..        
1e070 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
1e080 66 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c  f="SQLiteVirtual
1e090 54 61 62 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  Table" /> object
1e0a0 20 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69   instance associ
1e0b0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ated..        //
1e0c0 2f 20 77 69 74 68 20 74 68 69 73 20 76 69 72 74  / with this virt
1e0d0 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  ual table...    
1e0e0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1e0f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
1e100 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1e110 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20   /// A standard 
1e120 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
1e130 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  de...        ///
1e140 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
1e150 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
1e160 43 6f 64 65 20 44 69 73 63 6f 6e 6e 65 63 74 28  Code Disconnect(
1e170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1e180 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
1e190 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20 2a 2f 0d   table /* in */.
1e1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d  .            );.
1e1b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1e1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e200 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
1e210 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1e220 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65       /// This me
1e230 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69  thod is called i
1e240 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68  n response to th
1e250 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
1e260 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
1e270 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44  eNativeModule.xD
1e280 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65 74 68 6f  estroy" /> metho
1e290 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1e2a0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1e2b0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e2c0 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1e2d0 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1e2e0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1e2f0 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1e300 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1e310 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1e320 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1e330 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1e340 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e350 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e360 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
1e370 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
1e380 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
1e390 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
1e3a0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1e3b0 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
1e3c0 65 45 72 72 6f 72 43 6f 64 65 20 44 65 73 74 72  eErrorCode Destr
1e3d0 6f 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oy(..           
1e3e0 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61   SQLiteVirtualTa
1e3f0 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e 20  ble table /* in 
1e400 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1e410 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1e420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e470 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1e480 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1e490 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1e4a0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1e4b0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1e4c0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1e4d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1e4e0 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f  .xOpen" /> metho
1e4f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1e500 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1e510 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e520 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20  ame="table">..  
1e530 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
1e540 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56  ee cref="SQLiteV
1e550 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20  irtualTable" /> 
1e560 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
1e570 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
1e580 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69      /// with thi
1e590 73 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  s virtual table.
1e5a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e5b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1e5c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1e5d0 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
1e5e0 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
1e5f0 65 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65  ess, this parame
1e600 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69  ter must be modi
1e610 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  fied to contain 
1e620 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1e630 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1e640 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1e650 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1e660 69 6e 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61  instance associa
1e670 74 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ted..        ///
1e680 20 77 69 74 68 20 74 68 65 20 6e 65 77 6c 79 20   with the newly 
1e690 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74  opened virtual t
1e6a0 61 62 6c 65 20 63 75 72 73 6f 72 2e 0d 0a 20 20  able cursor...  
1e6b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
1e6c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
1e6d0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
1e6e0 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
1e6f0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
1e700 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  code...        /
1e710 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
1e720 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
1e730 6f 72 43 6f 64 65 20 4f 70 65 6e 28 0d 0a 20 20  orCode Open(..  
1e740 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1e750 56 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62  VirtualTable tab
1e760 6c 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le,           /*
1e770 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1e780 20 20 20 20 72 65 66 20 53 51 4c 69 74 65 56 69      ref SQLiteVi
1e790 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1e7a0 20 63 75 72 73 6f 72 20 2f 2a 20 6f 75 74 20 2a   cursor /* out *
1e7b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  /..            )
1e7c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e810 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e820 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1e830 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20         /// This 
1e840 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64  method is called
1e850 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
1e860 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1e870 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
1e880 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
1e890 78 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f  xClose" /> metho
1e8a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
1e8b0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1e8c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1e8d0 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20  ame="cursor">.. 
1e8e0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
1e8f0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
1e900 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1e910 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  or" /> object in
1e920 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  stance..        
1e930 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
1e940 69 74 68 20 74 68 65 20 70 72 65 76 69 6f 75 73  ith the previous
1e950 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61  ly opened virtua
1e960 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74  l table cursor t
1e970 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  o be..        //
1e980 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20  / used...       
1e990 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1e9a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
1e9b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
1e9c0 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c  / A standard SQL
1e9d0 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
1e9e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1e9f0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
1ea00 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
1ea10 65 20 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20  e Close(..      
1ea20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1ea30 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1ea40 75 72 73 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a  ursor /* in */..
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1ea60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1ea70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eab0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1eac0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1ead0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1eae0 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1eaf0 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1eb00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1eb10 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1eb20 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69  NativeModule.xFi
1eb30 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  lter" /> method.
1eb40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1eb50 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1eb60 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1eb70 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1eb80 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1eb90 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1eba0 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1ebb0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1ebc0 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1ebd0 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
1ebe0 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
1ebf0 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1ec00 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
1ec10 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1ec20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1ec30 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1ec40 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
1ec50 6e 61 6d 65 3d 22 69 6e 64 65 78 4e 75 6d 62 65  name="indexNumbe
1ec60 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
1ec70 20 4e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   Number used to 
1ec80 68 65 6c 70 20 69 64 65 6e 74 69 66 79 20 74 68  help identify th
1ec90 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65 78  e selected index
1eca0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1ecb0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
1ecc0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1ecd0 3d 22 69 6e 64 65 78 53 74 72 69 6e 67 22 3e 0d  ="indexString">.
1ece0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 74 72  .        /// Str
1ecf0 69 6e 67 20 75 73 65 64 20 74 6f 20 68 65 6c 70  ing used to help
1ed00 20 69 64 65 6e 74 69 66 79 20 74 68 65 20 73 65   identify the se
1ed10 6c 65 63 74 65 64 20 69 6e 64 65 78 2e 0d 0a 20  lected index... 
1ed20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
1ed30 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
1ed40 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
1ed50 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  lues">..        
1ed60 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 73 20 63  /// The values c
1ed70 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1ed80 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
1ed90 68 65 20 73 65 6c 65 63 74 65 64 20 69 6e 64 65  he selected inde
1eda0 78 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  x...        /// 
1edb0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
1edc0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
1edd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
1ede0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
1edf0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
1ee00 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
1ee10 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
1ee20 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
1ee30 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
1ee40 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
1ee50 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73 6f  ableCursor curso
1ee60 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  r, /* in */..   
1ee70 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64           int ind
1ee80 65 78 4e 75 6d 62 65 72 2c 20 20 20 20 20 20 20  exNumber,       
1ee90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
1eea0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1eeb0 73 74 72 69 6e 67 20 69 6e 64 65 78 53 74 72 69  string indexStri
1eec0 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
1eed0 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
1eee0 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 61 6c         SQLiteVal
1eef0 75 65 5b 5d 20 76 61 6c 75 65 73 20 20 20 20 20  ue[] values     
1ef00 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
1ef10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
1ef20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ef30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
1ef80 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1ef90 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
1efa0 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
1efb0 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
1efc0 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
1efd0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
1efe0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
1eff0 4e 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Next" /> method.
1f000 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1f010 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1f020 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1f030 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
1f040 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
1f050 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
1f060 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
1f070 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
1f080 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ance..        //
1f090 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
1f0a0 68 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  h the previously
1f0b0 20 6f 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20   opened virtual 
1f0c0 74 61 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20  table cursor to 
1f0d0 62 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  be..        /// 
1f0e0 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  used...        /
1f0f0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1f100 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
1f110 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
1f120 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
1f130 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
1f140 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
1f150 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
1f160 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1f170 4e 65 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20  Next(..         
1f180 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
1f190 54 61 62 6c 65 43 75 72 73 6f 72 20 63 75 72 73  TableCursor curs
1f1a0 6f 72 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20  or /* in */..   
1f1b0 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20           );.... 
1f1c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f210 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1f220 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
1f230 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64   /// This method
1f240 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65   is called in re
1f250 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20  sponse to the.. 
1f260 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
1f270 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
1f280 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20  iveModule.xEof" 
1f290 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
1f2a0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1f2b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
1f2c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 75 72  <param name="cur
1f2d0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  sor">..        /
1f2e0 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
1f2f0 3d 22 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54  ="SQLiteVirtualT
1f300 61 62 6c 65 43 75 72 73 6f 72 22 20 2f 3e 20 6f  ableCursor" /> o
1f310 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 0d 0a  bject instance..
1f320 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f          /// asso
1f330 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
1f340 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65  previously opene
1f350 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  d virtual table 
1f360 63 75 72 73 6f 72 20 74 6f 20 62 65 0d 0a 20 20  cursor to be..  
1f370 20 20 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 0d        /// used..
1f380 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
1f390 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
1f3a0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
1f3b0 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65        /// Non-ze
1f3c0 72 6f 20 69 66 20 6e 6f 20 6d 6f 72 65 20 72 6f  ro if no more ro
1f3d0 77 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ws are available
1f3e0 3b 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  ; zero otherwise
1f3f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
1f400 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
1f410 20 20 20 62 6f 6f 6c 20 45 6f 66 28 0d 0a 20 20     bool Eof(..  
1f420 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
1f430 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73  VirtualTableCurs
1f440 6f 72 20 63 75 72 73 6f 72 20 2f 2a 20 69 6e 20  or cursor /* in 
1f450 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1f460 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f4c0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1f4d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
1f4e0 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
1f4f0 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
1f500 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
1f510 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
1f520 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
1f530 2e 78 43 6f 6c 75 6d 6e 22 20 2f 3e 20 6d 65 74  .xColumn" /> met
1f540 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  hod...        //
1f550 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1f560 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
1f570 20 6e 61 6d 65 3d 22 63 75 72 73 6f 72 22 3e 0d   name="cursor">.
1f580 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
1f590 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1f5a0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43 75  teVirtualTableCu
1f5b0 72 73 6f 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  rsor" /> object 
1f5c0 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20 20  instance..      
1f5d0 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
1f5e0 20 77 69 74 68 20 74 68 65 20 70 72 65 76 69 6f   with the previo
1f5f0 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 72 74  usly opened virt
1f600 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
1f610 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
1f620 2f 2f 2f 20 75 73 65 64 2e 0d 0a 20 20 20 20 20  /// used...     
1f630 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1f640 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
1f650 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 74 65 78  ram name="contex
1f660 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
1f670 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1f680 53 51 4c 69 74 65 43 6f 6e 74 65 78 74 22 20 2f  SQLiteContext" /
1f690 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1f6a0 65 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  e to be used for
1f6b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72 65  ..        /// re
1f6c0 74 75 72 6e 69 6e 67 20 74 68 65 20 73 70 65 63  turning the spec
1f6d0 69 66 69 65 64 20 63 6f 6c 75 6d 6e 20 76 61 6c  ified column val
1f6e0 75 65 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65  ue to the SQLite
1f6f0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
1f700 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1f710 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1f720 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1f730 6e 64 65 78 22 3e 0d 0a 20 20 20 20 20 20 20 20  ndex">..        
1f740 2f 2f 2f 20 54 68 65 20 7a 65 72 6f 2d 62 61 73  /// The zero-bas
1f750 65 64 20 69 6e 64 65 78 20 63 6f 72 72 65 73 70  ed index corresp
1f760 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f  onding to the co
1f770 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 69 6e 67 20  lumn containing 
1f780 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
1f790 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74   value to be ret
1f7a0 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  urned...        
1f7b0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1f7c0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
1f7d0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
1f7e0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
1f7f0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
1f800 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
1f810 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
1f820 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
1f830 20 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20 20   Column(..      
1f840 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
1f850 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 20 63  ualTableCursor c
1f860 75 72 73 6f 72 2c 20 2f 2a 20 69 6e 20 2a 2f 0d  ursor, /* in */.
1f870 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1f880 69 74 65 43 6f 6e 74 65 78 74 20 63 6f 6e 74 65  iteContext conte
1f890 78 74 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  xt,           /*
1f8a0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1f8b0 20 20 20 20 69 6e 74 20 69 6e 64 65 78 20 20 20      int index   
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8d0 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
1f8e0 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a 0d             );...
1f8f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
1f950 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1f960 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68     /// This meth
1f970 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 20  od is called in 
1f980 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65 0d  response to the.
1f990 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
1f9a0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
1f9b0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77  ativeModule.xRow
1f9c0 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  Id" /> method...
1f9d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
1f9e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
1f9f0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1fa00 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  "cursor">..     
1fa10 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
1fa20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72 74  cref="SQLiteVirt
1fa30 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 22 20  ualTableCursor" 
1fa40 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
1fa50 63 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ce..        /// 
1fa60 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1fa70 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  the previously o
1fa80 70 65 6e 65 64 20 76 69 72 74 75 61 6c 20 74 61  pened virtual ta
1fa90 62 6c 65 20 63 75 72 73 6f 72 20 74 6f 20 62 65  ble cursor to be
1faa0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73  ..        /// us
1fab0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ed...        ///
1fac0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
1fad0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1fae0 6d 65 3d 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20  me="rowId">..   
1faf0 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75       /// Upon su
1fb00 63 63 65 73 73 2c 20 74 68 69 73 20 70 61 72 61  ccess, this para
1fb10 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20 6d 6f  meter must be mo
1fb20 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74 61 69  dified to contai
1fb30 6e 20 74 68 65 20 75 6e 69 71 75 65 0d 0a 20 20  n the unique..  
1fb40 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65        /// intege
1fb50 72 20 72 6f 77 20 69 64 65 6e 74 69 66 69 65 72  r row identifier
1fb60 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
1fb70 20 72 6f 77 20 66 6f 72 20 74 68 65 20 73 70 65   row for the spe
1fb80 63 69 66 69 65 64 20 63 75 72 73 6f 72 2e 0d 0a  cified cursor...
1fb90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1fba0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1fbb0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1fbc0 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64       /// A stand
1fbd0 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
1fbe0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  n code...       
1fbf0 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
1fc00 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
1fc10 72 72 6f 72 43 6f 64 65 20 52 6f 77 49 64 28 0d  rrorCode RowId(.
1fc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1fc30 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
1fc40 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 20 2f 2a  ursor cursor, /*
1fc50 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
1fc60 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
1fc70 49 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Id              
1fc80 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 29 3b 0d 0a              );..
1fca0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1fcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
1fd00 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1fd10 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
1fd20 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20 69 6e  hod is called in
1fd30 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74 68 65   response to the
1fd40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
1fd50 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
1fd60 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70  NativeModule.xUp
1fd70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  date" /> method.
1fd80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1fd90 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1fda0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1fdb0 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20 20  e="table">..    
1fdc0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
1fdd0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69 72   cref="SQLiteVir
1fde0 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f 62  tualTable" /> ob
1fdf0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61 73  ject instance as
1fe00 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..      
1fe10 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73 20    /// with this 
1fe20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
1fe30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
1fe40 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
1fe50 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76  / <param name="v
1fe60 61 6c 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20  alues">..       
1fe70 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f   /// The array o
1fe80 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  f <see cref="SQL
1fe90 69 74 65 56 61 6c 75 65 22 20 2f 3e 20 6f 62 6a  iteValue" /> obj
1fea0 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63 6f  ect instances co
1feb0 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20 20 20  ntaining..      
1fec0 20 20 2f 2f 2f 20 74 68 65 20 6e 65 77 20 6f 72    /// the new or
1fed0 20 6d 6f 64 69 66 69 65 64 20 63 6f 6c 75 6d 6e   modified column
1fee0 20 76 61 6c 75 65 73 2c 20 69 66 20 61 6e 79 2e   values, if any.
1fef0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
1ff00 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
1ff10 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1ff20 22 72 6f 77 49 64 22 3e 0d 0a 20 20 20 20 20 20  "rowId">..      
1ff30 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
1ff40 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
1ff50 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
1ff60 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
1ff70 68 65 20 75 6e 69 71 75 65 0d 0a 20 20 20 20 20  he unique..     
1ff80 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72 20 72     /// integer r
1ff90 6f 77 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f  ow identifier fo
1ffa0 72 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 77  r the row that w
1ffb0 61 73 20 69 6e 73 65 72 74 65 64 2c 20 69 66 20  as inserted, if 
1ffc0 61 6e 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  any...        //
1ffd0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1ffe0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1fff0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
20000 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
20010 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
20020 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
20030 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
20040 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 55  QLiteErrorCode U
20050 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  pdate(..        
20060 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
20070 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
20080 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
20090 20 20 20 20 53 51 4c 69 74 65 56 61 6c 75 65 5b      SQLiteValue[
200a0 5d 20 76 61 6c 75 65 73 2c 20 20 20 20 20 2f 2a  ] values,     /*
200b0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
200c0 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77      ref long row
200d0 49 64 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  Id            /*
200e0 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20   out */..       
200f0 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20       );....     
20100 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20150 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
20160 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
20170 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20   This method is 
20180 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e  called in respon
20190 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  se to the..     
201a0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
201b0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
201c0 6f 64 75 6c 65 2e 78 42 65 67 69 6e 22 20 2f 3e  odule.xBegin" />
201d0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
201e0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
201f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
20200 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
20210 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
20220 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
20230 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
20240 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
20250 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
20260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
20270 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
20280 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
20290 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
202a0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
202b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
202c0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
202d0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
202e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
202f0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20300 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
20310 20 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20   Begin(..       
20320 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75       SQLiteVirtu
20330 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a  alTable table /*
20340 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
20350 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
20360 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
203b0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
203c0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
203d0 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
203e0 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
203f0 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
20400 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
20410 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
20420 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20 6d  dule.xSync" /> m
20430 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
20440 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
20450 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
20460 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
20470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
20480 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
20490 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
204a0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
204b0 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
204c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
204d0 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
204e0 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
204f0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
20500 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
20510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
20520 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
20530 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
20540 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
20550 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53  urns>..        S
20560 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
20570 79 6e 63 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ync(..          
20580 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
20590 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69 6e  able table /* in
205a0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
205b0 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f   );....        /
205c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20600 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20610 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
20620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
20630 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c  s method is call
20640 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  ed in response t
20650 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
20660 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  // <see cref="IS
20670 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
20680 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65  e.xCommit" /> me
20690 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f  thod...        /
206a0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
206b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
206c0 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d  m name="table">.
206d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
206e0 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
206f0 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20  teVirtualTable" 
20700 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
20710 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  ce associated.. 
20720 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20         /// with 
20730 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61 62  this virtual tab
20740 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  le...        ///
20750 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
20760 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
20770 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20  ..        /// A 
20780 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
20790 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20  return code...  
207a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
207b0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51  rns>..        SQ
207c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 6f  LiteErrorCode Co
207d0 6d 6d 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  mmit(..         
207e0 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
207f0 54 61 62 6c 65 20 74 61 62 6c 65 20 2f 2a 20 69  Table table /* i
20800 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  n */..          
20810 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    );....        
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20860 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20870 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
20880 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
20890 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c  is method is cal
208a0 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
208b0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
208c0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49  /// <see cref="I
208d0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
208e0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
208f0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
20900 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
20910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
20920 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65  aram name="table
20930 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
20940 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
20950 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c  QLiteVirtualTabl
20960 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
20970 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64  tance associated
20980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69  ..        /// wi
20990 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20  th this virtual 
209a0 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  table...        
209b0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
209c0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
209d0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
209e0 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
209f0 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
20a00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72  .        /// </r
20a10 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
20a20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
20a30 20 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20   Rollback(..    
20a40 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 69          SQLiteVi
20a50 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65  rtualTable table
20a60 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
20a70 20 20 20 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20         );....   
20a80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20ad0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
20ae0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
20af0 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 69  // This method i
20b00 73 20 63 61 6c 6c 65 64 20 69 6e 20 72 65 73 70  s called in resp
20b10 6f 6e 73 65 20 74 6f 20 74 68 65 0d 0a 20 20 20  onse to the..   
20b20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
20b30 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
20b40 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e  eModule.xFindFun
20b50 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ction" /> method
20b60 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
20b70 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
20b80 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
20b90 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a 20 20 20  me="table">..   
20ba0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
20bb0 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
20bc0 72 74 75 61 6c 54 61 62 6c 65 22 20 2f 3e 20 6f  rtualTable" /> o
20bd0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 61  bject instance a
20be0 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..     
20bf0 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 69 73     /// with this
20c00 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d   virtual table..
20c10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
20c20 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
20c30 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
20c40 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d  argumentCount">.
20c50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
20c60 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
20c70 65 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63  ents to the func
20c80 74 69 6f 6e 20 62 65 69 6e 67 20 73 6f 75 67 68  tion being sough
20c90 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
20ca0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
20cb0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
20cc0 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 20  e="name">..     
20cd0 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
20ce0 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
20cf0 62 65 69 6e 67 20 73 6f 75 67 68 74 2e 0d 0a 20  being sought... 
20d00 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
20d10 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
20d20 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
20d30 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 20 20  nction">..      
20d40 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65    /// Upon succe
20d50 73 73 2c 20 74 68 69 73 20 70 61 72 61 6d 65 74  ss, this paramet
20d60 65 72 20 6d 75 73 74 20 62 65 20 6d 6f 64 69 66  er must be modif
20d70 69 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  ied to contain t
20d80 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
20d90 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
20da0 65 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  eFunction" /> ob
20db0 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 72 65  ject instance re
20dc0 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 0d 0a 20  sponsible for.. 
20dd0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c 65         /// imple
20de0 6d 65 6e 74 69 6e 67 20 74 68 65 20 73 70 65 63  menting the spec
20df0 69 66 69 65 64 20 66 75 6e 63 74 69 6f 6e 2e 0d  ified function..
20e00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
20e10 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
20e20 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
20e30 70 43 6c 69 65 6e 74 44 61 74 61 22 3e 0d 0a 20  pClientData">.. 
20e40 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
20e50 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
20e60 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
20e70 6d 6f 64 69 66 69 65 64 20 74 6f 20 63 6f 6e 74  modified to cont
20e80 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ain the..       
20e90 20 2f 2f 2f 20 6e 61 74 69 76 65 20 75 73 65 72   /// native user
20ea0 2d 64 61 74 61 20 70 6f 69 6e 74 65 72 20 61 73  -data pointer as
20eb0 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20  sociated with.. 
20ec0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
20ed0 6d 72 65 66 20 6e 61 6d 65 3d 22 66 75 6e 63 74  mref name="funct
20ee0 69 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 20 20  ion" />...      
20ef0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
20f00 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
20f10 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
20f20 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
20f30 68 65 20 73 70 65 63 69 66 69 65 64 20 66 75 6e  he specified fun
20f40 63 74 69 6f 6e 20 77 61 73 20 66 6f 75 6e 64 3b  ction was found;
20f50 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e   zero otherwise.
20f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
20f70 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
20f80 20 20 62 6f 6f 6c 20 46 69 6e 64 46 75 6e 63 74    bool FindFunct
20f90 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
20fa0 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
20fb0 61 62 6c 65 20 74 61 62 6c 65 2c 20 20 20 20 2f  able table,    /
20fc0 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
20fd0 20 20 20 20 20 69 6e 74 20 61 72 67 75 6d 65 6e       int argumen
20fe0 74 43 6f 75 6e 74 2c 20 20 20 20 20 20 20 20 20  tCount,         
20ff0 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
21000 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
21010 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ame,            
21020 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
21030 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 53             ref S
21040 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
21050 6e 63 74 69 6f 6e 2c 20 2f 2a 20 6f 75 74 20 2a  nction, /* out *
21060 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
21070 65 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e  ef IntPtr pClien
21080 74 44 61 74 61 20 20 20 20 20 20 20 2f 2a 20 6f  tData       /* o
21090 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ut */..         
210a0 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     );....       
210b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
210c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21100 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
21110 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
21120 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63 61  his method is ca
21130 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65  lled in response
21140 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
21150 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
21160 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
21170 75 6c 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20  ule.xRename" /> 
21180 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
21190 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
211a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
211b0 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
211c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
211d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
211e0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
211f0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
21200 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
21210 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
21220 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
21230 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
21240 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
21250 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
21260 6e 61 6d 65 3d 22 6e 65 77 4e 61 6d 65 22 3e 0d  name="newName">.
21270 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
21280 20 6e 65 77 20 6e 61 6d 65 20 66 6f 72 20 74 68   new name for th
21290 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
212a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
212b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
212c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
212d0 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74 61         /// A sta
212e0 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 74  ndard SQLite ret
212f0 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...     
21300 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
21310 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  >..        SQLit
21320 65 45 72 72 6f 72 43 6f 64 65 20 52 65 6e 61 6d  eErrorCode Renam
21330 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
21340 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
21350 6c 65 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20  le table, /* in 
21360 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
21370 73 74 72 69 6e 67 20 6e 65 77 4e 61 6d 65 20 20  string newName  
21380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
21390 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
213a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  );....        //
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21400 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
21410 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73          /// This
21420 20 6d 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65   method is calle
21430 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f  d in response to
21440 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
21450 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  / <see cref="ISQ
21460 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
21470 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e 20  .xSavepoint" /> 
21480 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
21490 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
214a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
214b0 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22  ram name="table"
214c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
214d0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
214e0 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
214f0 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
21500 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d  ance associated.
21510 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74  .        /// wit
21520 68 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74  h this virtual t
21530 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  able...        /
21540 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
21550 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
21560 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22  name="savepoint"
21570 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
21580 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65  his is an intege
21590 72 20 69 64 65 6e 74 69 66 69 65 72 20 75 6e 64  r identifier und
215a0 65 72 20 77 68 69 63 68 20 74 68 65 20 74 68 65  er which the the
215b0 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f   current state o
215c0 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74  f..        /// t
215d0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
215e0 20 73 68 6f 75 6c 64 20 62 65 20 73 61 76 65 64   should be saved
215f0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
21600 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
21610 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
21620 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73 74          /// A st
21630 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
21640 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
21650 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
21660 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  s>..        SQLi
21670 74 65 45 72 72 6f 72 43 6f 64 65 20 53 61 76 65  teErrorCode Save
21680 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  point(..        
21690 20 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61      SQLiteVirtua
216a0 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20 2f 2a  lTable table, /*
216b0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
216c0 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f 69 6e      int savepoin
216d0 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t             /*
216e0 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
216f0 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20      );....      
21700 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21750 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
21760 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
21770 54 68 69 73 20 6d 65 74 68 6f 64 20 69 73 20 63  This method is c
21780 61 6c 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73  alled in respons
21790 65 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  e to the..      
217a0 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
217b0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
217c0 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f  dule.xRelease" /
217d0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
217e0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
217f0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
21800 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c  param name="tabl
21810 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
21820 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
21830 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62  SQLiteVirtualTab
21840 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
21850 73 74 61 6e 63 65 20 61 73 73 6f 63 69 61 74 65  stance associate
21860 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 77  d..        /// w
21870 69 74 68 20 74 68 69 73 20 76 69 72 74 75 61 6c  ith this virtual
21880 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20   table...       
21890 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
218a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
218b0 6d 20 6e 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e  m name="savepoin
218c0 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  t">..        ///
218d0 20 54 68 69 73 20 69 73 20 61 6e 20 69 6e 74 65   This is an inte
218e0 67 65 72 20 75 73 65 64 20 74 6f 20 69 6e 64 69  ger used to indi
218f0 63 61 74 65 20 74 68 61 74 20 61 6e 79 20 73 61  cate that any sa
21900 76 65 64 20 73 74 61 74 65 73 20 77 69 74 68 20  ved states with 
21910 61 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  an..        /// 
21920 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61 74  identifier great
21930 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
21940 20 74 6f 20 74 68 69 73 20 73 68 6f 75 6c 64 20   to this should 
21950 62 65 20 64 65 6c 65 74 65 64 20 62 79 20 74 68  be deleted by th
21960 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76  e..        /// v
21970 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20  irtual table... 
21980 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
21990 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
219a0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
219b0 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
219c0 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
219d0 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   code...        
219e0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
219f0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
21a00 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 28  rorCode Release(
21a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
21a20 4c 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65  LiteVirtualTable
21a30 20 74 61 62 6c 65 2c 20 2f 2a 20 69 6e 20 2a 2f   table, /* in */
21a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ..            in
21a50 74 20 73 61 76 65 70 6f 69 6e 74 20 20 20 20 20  t savepoint     
21a60 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
21a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 3b  ..            );
21a80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
21ae0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
21af0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d        /// This m
21b00 65 74 68 6f 64 20 69 73 20 63 61 6c 6c 65 64 20  ethod is called 
21b10 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 74  in response to t
21b20 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
21b30 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
21b40 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
21b50 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
21b60 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
21b70 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
21b80 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
21b90 61 6d 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e  am name="table">
21ba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21bb0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
21bc0 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22  iteVirtualTable"
21bd0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
21be0 6e 63 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  nce associated..
21bf0 20 20 20 20 20 20 20 20 2f 2f 2f 20 77 69 74 68          /// with
21c00 20 74 68 69 73 20 76 69 72 74 75 61 6c 20 74 61   this virtual ta
21c10 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ble...        //
21c20 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
21c30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
21c40 61 6d 65 3d 22 73 61 76 65 70 6f 69 6e 74 22 3e  ame="savepoint">
21c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
21c60 69 73 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  is is an integer
21c70 20 69 64 65 6e 74 69 66 69 65 72 20 75 73 65 64   identifier used
21c80 20 74 6f 20 73 70 65 63 69 66 79 20 61 20 73 70   to specify a sp
21c90 65 63 69 66 69 63 20 73 61 76 65 64 0d 0a 20 20  ecific saved..  
21ca0 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65 20        /// state 
21cb0 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c 20  for the virtual 
21cc0 74 61 62 6c 65 20 66 6f 72 20 69 74 20 74 6f 20  table for it to 
21cd0 72 65 73 74 6f 72 65 20 69 74 73 65 6c 66 20 62  restore itself b
21ce0 61 63 6b 20 74 6f 2c 20 77 68 69 63 68 0d 0a 20  ack to, which.. 
21cf0 20 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c         /// shoul
21d00 64 20 61 6c 73 6f 20 68 61 76 65 20 74 68 65 20  d also have the 
21d10 65 66 66 65 63 74 20 6f 66 20 64 65 6c 65 74 69  effect of deleti
21d20 6e 67 20 61 6c 6c 20 73 61 76 65 64 20 73 74 61  ng all saved sta
21d30 74 65 73 20 77 69 74 68 20 61 6e 0d 0a 20 20 20  tes with an..   
21d40 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 67 65 72       /// integer
21d50 20 69 64 65 6e 74 69 66 69 65 72 20 67 72 65 61   identifier grea
21d60 74 65 72 20 74 68 61 6e 20 74 68 69 73 20 6f 6e  ter than this on
21d70 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
21d80 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
21d90 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
21da0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41 20 73  .        /// A s
21db0 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
21dc0 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
21dd0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
21de0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ns>..        SQL
21df0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 6f 6c  iteErrorCode Rol
21e00 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
21e10 20 20 20 20 20 20 53 51 4c 69 74 65 56 69 72 74        SQLiteVirt
21e20 75 61 6c 54 61 62 6c 65 20 74 61 62 6c 65 2c 20  ualTable table, 
21e30 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
21e40 20 20 20 20 20 20 69 6e 74 20 73 61 76 65 70 6f        int savepo
21e50 69 6e 74 20 20 20 20 20 20 20 20 20 20 20 20 20  int             
21e60 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
21e70 20 20 20 20 20 20 29 3b 0d 0a 20 20 20 20 7d 0d        );..    }.
21e80 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
21e90 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
21ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ee0 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f  //....    #regio
21ef0 6e 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 53  n SQLiteMemory S
21f00 74 61 74 69 63 20 43 6c 61 73 73 0d 0a 20 20 20  tatic Class..   
21f10 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
21f20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61      /// This cla
21f30 73 73 20 63 6f 6e 74 61 69 6e 73 20 73 74 61 74  ss contains stat
21f40 69 63 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20  ic methods that 
21f50 61 72 65 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f  are used to allo
21f60 63 61 74 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 6d  cate,..    /// m
21f70 61 6e 69 70 75 6c 61 74 65 2c 20 61 6e 64 20 66  anipulate, and f
21f80 72 65 65 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72  ree native memor
21f90 79 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68  y provided by th
21fa0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
21fb0 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  brary...    /// 
21fc0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21fd0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
21fe0 63 6c 61 73 73 20 53 51 4c 69 74 65 4d 65 6d 6f  class SQLiteMemo
21ff0 72 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ry..    {..     
22000 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
22010 74 65 20 44 61 74 61 0d 0a 23 69 66 20 54 52 41  te Data..#if TRA
22020 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d  CK_MEMORY_BYTES.
22030 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
22040 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
22050 2f 2f 2f 20 54 68 69 73 20 6f 62 6a 65 63 74 20  /// This object 
22060 69 6e 73 74 61 6e 63 65 20 69 73 20 75 73 65 64  instance is used
22070 20 74 6f 20 73 79 6e 63 68 72 6f 6e 69 7a 65 20   to synchronize 
22080 61 63 63 65 73 73 20 74 6f 20 74 68 65 20 6f 74  access to the ot
22090 68 65 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  her..        ///
220a0 20 73 74 61 74 69 63 20 66 69 65 6c 64 73 20 6f   static fields o
220b0 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20  f this class... 
220c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
220d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
220e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
220f0 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
22100 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d  new object();...
22110 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
22170 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
22180 20 20 20 2f 2f 2f 20 54 68 65 20 74 6f 74 61 6c     /// The total
22190 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74   number of outst
221a0 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79  anding memory by
221b0 74 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  tes allocated by
221c0 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 2f   this..        /
221d0 2f 2f 20 63 6c 61 73 73 20 75 73 69 6e 67 20 74  // class using t
221e0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
221f0 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...       
22200 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
22210 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
22220 20 73 74 61 74 69 63 20 69 6e 74 20 62 79 74 65   static int byte
22230 73 41 6c 6c 6f 63 61 74 65 64 3b 0d 0a 0d 0a 20  sAllocated;.... 
22240 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22290 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
222a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
222b0 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75 6d   /// The maximum
222c0 20 6e 75 6d 62 65 72 20 6f 66 20 6f 75 74 73 74   number of outst
222d0 61 6e 64 69 6e 67 20 6d 65 6d 6f 72 79 20 62 79  anding memory by
222e0 74 65 73 20 65 76 65 72 20 61 6c 6c 6f 63 61 74  tes ever allocat
222f0 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 2f  ed by..        /
22300 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 20 75 73  // this class us
22310 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
22320 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...  
22330 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
22340 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  ary>..        pr
22350 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
22360 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c   maximumBytesAll
22370 6f 63 61 74 65 64 3b 0d 0a 23 65 6e 64 69 66 0d  ocated;..#endif.
22380 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
22390 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
223a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
223e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
223f0 20 20 23 72 65 67 69 6f 6e 20 4d 65 6d 6f 72 79    #region Memory
22400 20 41 6c 6c 6f 63 61 74 69 6f 6e 20 48 65 6c 70   Allocation Help
22410 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  er Methods..    
22420 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
22430 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 41  >..        /// A
22440 6c 6c 6f 63 61 74 65 73 20 61 74 20 6c 65 61 73  llocates at leas
22450 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
22460 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
22470 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f 72 79  of native memory
22480 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 76 69  ..        /// vi
22490 61 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  a the SQLite cor
224a0 65 20 6c 69 62 72 61 72 79 20 73 71 6c 69 74 65  e library sqlite
224b0 33 5f 6d 61 6c 6c 6f 63 28 29 20 66 75 6e 63 74  3_malloc() funct
224c0 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 73 0d  ion and returns.
224d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  .        /// the
224e0 20 72 65 73 75 6c 74 69 6e 67 20 6e 61 74 69 76   resulting nativ
224f0 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20 20  e pointer...    
22500 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
22510 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
22520 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 69 7a  <param name="siz
22530 65 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  e">..        ///
22540 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   The number of b
22550 79 74 65 73 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ytes to allocate
22560 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
22570 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
22580 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
22590 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
225a0 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
225b0 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
225c0 62 6c 6f 63 6b 20 6f 66 20 6d 65 6d 6f 72 79 20  block of memory 
225d0 6f 66 20 61 74 20 6c 65 61 73 74 20 74 68 65 0d  of at least the.
225e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65  .        /// spe
225f0 63 69 66 69 65 64 20 73 69 7a 65 20 2d 4f 52 2d  cified size -OR-
22600 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
22610 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 69 66 20 74  tr.Zero" /> if t
22620 68 65 20 6d 65 6d 6f 72 79 20 63 6f 75 6c 64 0d  he memory could.
22630 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 6f 74  .        /// not
22640 20 62 65 20 61 6c 6c 6f 63 61 74 65 64 2e 0d 0a   be allocated...
22650 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
22660 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
22670 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 49 6e  public static In
22680 74 50 74 72 20 41 6c 6c 6f 63 61 74 65 28 69 6e  tPtr Allocate(in
22690 74 20 73 69 7a 65 29 0d 0a 20 20 20 20 20 20 20  t size)..       
226a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
226b0 49 6e 74 50 74 72 20 70 4d 65 6d 6f 72 79 20 3d  IntPtr pMemory =
226c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
226d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 61 6c  hods.sqlite3_mal
226e0 6c 6f 63 28 73 69 7a 65 29 3b 0d 0a 0d 0a 23 69  loc(size);....#i
226f0 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  f TRACK_MEMORY_B
22700 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20 20 20  YTES..          
22710 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20 21 3d    if (pMemory !=
22720 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
22730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
22750 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20 53 69  t blockSize = Si
22760 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a 0d 0a  ze(pMemory);....
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20 3e 20  if (blockSize > 
22790 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
227a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
227b0 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
227c0 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20  (syncRoot)..    
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
227f0 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 73             bytes
22800 41 6c 6c 6f 63 61 74 65 64 20 2b 3d 20 62 6c 6f  Allocated += blo
22810 63 6b 53 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20  ckSize;....     
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 20 20 69 66 20 28 62 79 74 65 73 41 6c 6c 6f     if (bytesAllo
22840 63 61 74 65 64 20 3e 20 6d 61 78 69 6d 75 6d 42  cated > maximumB
22850 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 29 0d 0a  ytesAllocated)..
22860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22870 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69              maxi
22880 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65  mumBytesAllocate
22890 64 20 3d 20 62 79 74 65 73 41 6c 6c 6f 63 61 74  d = bytesAllocat
228a0 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
228b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
228c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
228d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 23 65             }..#e
228e0 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
228f0 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 6f      return pMemo
22900 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ry;..        }..
22910 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  /....        ///
22970 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
22980 20 20 20 20 2f 2f 2f 20 47 65 74 73 20 61 6e 64      /// Gets and
22990 20 72 65 74 75 72 6e 73 20 74 68 65 20 61 63 74   returns the act
229a0 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20  ual size of the 
229b0 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
229c0 20 62 6c 6f 63 6b 20 74 68 61 74 0d 0a 20 20 20   block that..   
229d0 20 20 20 20 20 2f 2f 2f 20 77 61 73 20 70 72 65       /// was pre
229e0 76 69 6f 75 73 6c 79 20 6f 62 74 61 69 6e 65 64  viously obtained
229f0 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63   from the <see c
22a00 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65 22 20 2f  ref="Allocate" /
22a10 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
22a20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
22a30 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
22a40 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 4d 65 6d  param name="pMem
22a50 6f 72 79 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ory">..        /
22a60 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  // The native po
22a70 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6d 65 6d  inter to the mem
22a80 6f 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f  ory block previo
22a90 75 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72  usly obtained fr
22aa0 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  om the..        
22ab0 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41  /// <see cref="A
22ac0 6c 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68  llocate" /> meth
22ad0 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  od...        ///
22ae0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
22af0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
22b00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
22b10 65 20 61 63 74 75 61 6c 20 73 69 7a 65 2c 20 69  e actual size, i
22b20 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
22b30 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 73 70 65  memory block spe
22b40 63 69 66 69 65 64 20 76 69 61 20 74 68 65 0d 0a  cified via the..
22b50 20 20 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69          /// nati
22b60 76 65 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20 20  ve pointer...   
22b70 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
22b80 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62  ns>..        pub
22b90 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 53  lic static int S
22ba0 69 7a 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f  ize(IntPtr pMemo
22bb0 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ry)..        {..
22bc0 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
22bd0 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
22be0 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
22bf0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
22c00 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 73 69 7a 65  ite3_malloc_size
22c10 5f 69 6e 74 65 72 6f 70 28 70 4d 65 6d 6f 72 79  _interop(pMemory
22c20 29 3b 0d 0a 23 65 6c 69 66 20 54 52 41 43 4b 5f  );..#elif TRACK_
22c30 4d 45 4d 4f 52 59 5f 42 59 54 45 53 0d 0a 20 20  MEMORY_BYTES..  
22c40 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
22c50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43            // HAC
22c60 4b 3a 20 4f 6b 2c 20 77 65 20 63 61 6e 6e 6f 74  K: Ok, we cannot
22c70 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73   determine the s
22c80 69 7a 65 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ize of the memor
22c90 79 20 62 6c 6f 63 6b 3b 0d 0a 20 20 20 20 20 20  y block;..      
22ca0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
22cb0 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 20 74  herefore, just t
22cc0 72 61 63 6b 20 6e 75 6d 62 65 72 20 6f 66 20 61  rack number of a
22cd0 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 6e 73 74 65  llocations inste
22ce0 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ad...           
22cf0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
22d00 20 72 65 74 75 72 6e 20 28 70 4d 65 6d 6f 72 79   return (pMemory
22d10 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
22d20 20 3f 20 31 20 3a 20 30 3b 0d 0a 23 65 6c 73 65   ? 1 : 0;..#else
22d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
22d40 74 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d  turn 0;..#endif.
22d50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
22d60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22db0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
22dc0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
22dd0 2f 2f 2f 20 46 72 65 65 73 20 61 20 6d 65 6d 6f  /// Frees a memo
22de0 72 79 20 62 6c 6f 63 6b 20 70 72 65 76 69 6f 75  ry block previou
22df0 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  sly obtained fro
22e00 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  m the..        /
22e10 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 41 6c  // <see cref="Al
22e20 6c 6f 63 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  locate" /> metho
22e30 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
22e40 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
22e50 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
22e60 61 6d 65 3d 22 70 4d 65 6d 6f 72 79 22 3e 0d 0a  ame="pMemory">..
22e70 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
22e80 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
22e90 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 62 6c 6f  o the memory blo
22ea0 63 6b 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 62  ck previously ob
22eb0 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d  tained from the.
22ec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
22ed0 65 20 63 72 65 66 3d 22 41 6c 6c 6f 63 61 74 65  e cref="Allocate
22ee0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
22ef0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
22f00 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  m>..        publ
22f10 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 46  ic static void F
22f20 72 65 65 28 49 6e 74 50 74 72 20 70 4d 65 6d 6f  ree(IntPtr pMemo
22f30 72 79 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ry)..        {..
22f40 23 69 66 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59  #if TRACK_MEMORY
22f50 5f 42 59 54 45 53 0d 0a 20 20 20 20 20 20 20 20  _BYTES..        
22f60 20 20 20 20 69 66 20 28 70 4d 65 6d 6f 72 79 20      if (pMemory 
22f70 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
22f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 69 6e 74 20 62 6c 6f 63 6b 53 69 7a 65 20 3d 20  int blockSize = 
22fb0 53 69 7a 65 28 70 4d 65 6d 6f 72 79 29 3b 0d 0a  Size(pMemory);..
22fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22fd0 20 20 69 66 20 28 62 6c 6f 63 6b 53 69 7a 65 20    if (blockSize 
22fe0 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
22ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
23010 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20  k (syncRoot)..  
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74               byt
23050 65 73 41 6c 6c 6f 63 61 74 65 64 20 2d 3d 20 62  esAllocated -= b
23060 6c 6f 63 6b 53 69 7a 65 3b 0d 0a 20 20 20 20 20  lockSize;..     
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23090 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
230a0 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
230b0 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
230c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
230d0 6c 69 74 65 33 5f 66 72 65 65 28 70 4d 65 6d 6f  lite3_free(pMemo
230e0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
230f0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23100 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  ion..    }..    
23110 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
23120 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23170 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c  .    #region SQL
23180 69 74 65 53 74 72 69 6e 67 20 53 74 61 74 69 63  iteString Static
23190 20 43 6c 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20   Class..    /// 
231a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
231b0 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 63 6f  // This class co
231c0 6e 74 61 69 6e 73 20 73 74 61 74 69 63 20 6d 65  ntains static me
231d0 74 68 6f 64 73 20 74 68 61 74 20 61 72 65 20 75  thods that are u
231e0 73 65 64 20 74 6f 20 64 65 61 6c 20 77 69 74 68  sed to deal with
231f0 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f   native..    ///
23200 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 70 6f   UTF-8 string po
23210 69 6e 74 65 72 73 20 74 6f 20 62 65 20 75 73 65  inters to be use
23220 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74  d with the SQLit
23230 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
23240 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
23250 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
23260 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 53  l static class S
23270 51 4c 69 74 65 53 74 72 69 6e 67 0d 0a 20 20 20  QLiteString..   
23280 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
23290 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
232a0 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 2f  tants..        /
232b0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
232c0 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
232d0 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 6f  s the maximum po
232e0 73 73 69 62 6c 65 20 6c 65 6e 67 74 68 20 66 6f  ssible length fo
232f0 72 20 74 68 65 20 6e 61 74 69 76 65 20 55 54 46  r the native UTF
23300 2d 38 20 65 6e 63 6f 64 65 64 0d 0a 20 20 20 20  -8 encoded..    
23310 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e 67 73 20      /// strings 
23320 75 73 65 64 20 77 69 74 68 20 74 68 65 20 53 51  used with the SQ
23330 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
23340 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
23350 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
23360 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
23370 69 63 20 69 6e 74 20 54 68 69 72 74 79 42 69 74  ic int ThirtyBit
23380 73 20 3d 20 30 78 33 66 66 66 66 66 66 66 3b 0d  s = 0x3fffffff;.
23390 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
233a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
233f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
23400 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73       /// This is
23410 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
23420 45 6e 63 6f 64 69 6e 67 22 20 2f 3e 20 6f 62 6a  Encoding" /> obj
23430 65 63 74 20 69 6e 73 74 61 6e 63 65 20 75 73 65  ect instance use
23440 64 20 74 6f 20 68 61 6e 64 6c 65 0d 0a 20 20 20  d to handle..   
23450 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 73       /// convers
23460 69 6f 6e 73 20 66 72 6f 6d 2f 74 6f 20 55 54 46  ions from/to UTF
23470 2d 38 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  -8...        ///
23480 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
23490 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
234a0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 45 6e 63  tic readonly Enc
234b0 6f 64 69 6e 67 20 55 74 66 38 45 6e 63 6f 64 69  oding Utf8Encodi
234c0 6e 67 20 3d 20 45 6e 63 6f 64 69 6e 67 2e 55 54  ng = Encoding.UT
234d0 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  F8;..        #en
234e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
234f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23540 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54        #region UT
23550 46 2d 38 20 45 6e 63 6f 64 69 6e 67 20 48 65 6c  F-8 Encoding Hel
23560 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
23570 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
23580 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
23590 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
235a0 63 69 66 69 65 64 20 6d 61 6e 61 67 65 64 20 73  cified managed s
235b0 74 72 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 55  tring into the U
235c0 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e  TF-8 encoding an
235d0 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 72  d..        /// r
235e0 65 74 75 72 6e 73 20 74 68 65 20 61 72 72 61 79  eturns the array
235f0 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69   of bytes contai
23600 6e 69 6e 67 20 69 74 73 20 72 65 70 72 65 73 65  ning its represe
23610 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68 61 74 0d  ntation in that.
23620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65 6e 63  .        /// enc
23630 6f 64 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  oding...        
23640 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
23650 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
23660 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
23670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
23680 65 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67  e managed string
23690 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
236a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
236b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
236c0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
236d0 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79     /// The array
236e0 20 6f 66 20 62 79 74 65 73 20 63 6f 6e 74 61 69   of bytes contai
236f0 6e 69 6e 67 20 74 68 65 20 72 65 70 72 65 73 65  ning the represe
23700 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ntation of the m
23710 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20  anaged..        
23720 2f 2f 2f 20 73 74 72 69 6e 67 20 69 6e 20 74 68  /// string in th
23730 65 20 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67  e UTF-8 encoding
23740 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61   or null upon fa
23750 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  ilure...        
23760 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
23770 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
23780 74 61 74 69 63 20 62 79 74 65 5b 5d 20 47 65 74  tatic byte[] Get
23790 55 74 66 38 42 79 74 65 73 46 72 6f 6d 53 74 72  Utf8BytesFromStr
237a0 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ing(..          
237b0 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d 0a    string value..
237c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
237d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
237e0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
237f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
23800 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23810 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
23820 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 74 66        return Utf
23830 38 45 6e 63 6f 64 69 6e 67 2e 47 65 74 42 79 74  8Encoding.GetByt
23840 65 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  es(value);..    
23850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23860 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
238b0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
238c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43  >..        /// C
238d0 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65 63  onverts the spec
238e0 69 66 69 65 64 20 61 72 72 61 79 20 6f 66 20 62  ified array of b
238f0 79 74 65 73 20 72 65 70 72 65 73 65 6e 74 69 6e  ytes representin
23900 67 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68  g a string in th
23910 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 55  e..        /// U
23920 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 20 61 6e  TF-8 encoding an
23930 64 20 72 65 74 75 72 6e 73 20 61 20 6d 61 6e 61  d returns a mana
23940 67 65 64 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  ged string...   
23950 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
23960 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
23970 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 79   <param name="by
23980 74 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tes">..        /
23990 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
239a0 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72 74  bytes to convert
239b0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
239c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
239d0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
239e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
239f0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 20 6f  managed string o
23a00 72 20 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c  r null upon fail
23a10 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
23a20 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
23a30 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
23a40 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53 74  tic string GetSt
23a50 72 69 6e 67 46 72 6f 6d 55 74 66 38 42 79 74 65  ringFromUtf8Byte
23a60 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
23a70 62 79 74 65 5b 5d 20 62 79 74 65 73 0d 0a 20 20  byte[] bytes..  
23a80 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23a90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23aa0 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d 3d      if (bytes ==
23ab0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23ac0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
23ad0 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ull;....#if !PLA
23ae0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
23af0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
23b00 20 20 20 20 72 65 74 75 72 6e 20 55 74 66 38 45      return Utf8E
23b10 6e 63 6f 64 69 6e 67 2e 47 65 74 53 74 72 69 6e  ncoding.GetStrin
23b20 67 28 62 79 74 65 73 29 3b 0d 0a 23 65 6c 73 65  g(bytes);..#else
23b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23b40 74 75 72 6e 20 55 74 66 38 45 6e 63 6f 64 69 6e  turn Utf8Encodin
23b50 67 2e 47 65 74 53 74 72 69 6e 67 28 62 79 74 65  g.GetString(byte
23b60 73 2c 20 30 2c 20 62 79 74 65 73 2e 4c 65 6e 67  s, 0, bytes.Leng
23b70 74 68 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  th);..#endif..  
23b80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23b90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
23ba0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23bf0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
23c00 6e 20 55 54 46 2d 38 20 53 74 72 69 6e 67 20 48  n UTF-8 String H
23c10 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
23c20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
23c30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
23c40 2f 20 50 72 6f 62 65 73 20 61 20 6e 61 74 69 76  / Probes a nativ
23c50 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 73  e pointer to a s
23c60 74 72 69 6e 67 20 69 6e 20 74 68 65 20 55 54 46  tring in the UTF
23c70 2d 38 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  -8 encoding for 
23c80 69 74 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  its..        ///
23c90 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 4e 55 4c   terminating NUL
23ca0 20 63 68 61 72 61 63 74 65 72 2c 20 77 69 74 68   character, with
23cb0 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
23cc0 20 6c 65 6e 67 74 68 20 6c 69 6d 69 74 2e 0d 0a   length limit...
23cd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
23ce0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
23cf0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
23d00 22 70 56 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20  "pValue">..     
23d10 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
23d20 65 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64  e NUL-terminated
23d30 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e   string pointer.
23d40 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
23d50 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
23d60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
23d70 22 6c 69 6d 69 74 22 3e 0d 0a 20 20 20 20 20 20  "limit">..      
23d80 20 20 2f 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75    /// The maximu
23d90 6d 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  m length of the 
23da0 6e 61 74 69 76 65 20 73 74 72 69 6e 67 2c 20 69  native string, i
23db0 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 20 20  n bytes...      
23dc0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
23dd0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
23de0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f  urns>..        /
23df0 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  // The length of
23e00 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69   the native stri
23e10 6e 67 2c 20 69 6e 20 62 79 74 65 73 20 2d 4f 52  ng, in bytes -OR
23e20 2d 20 7a 65 72 6f 20 69 66 20 74 68 65 20 6c 65  - zero if the le
23e30 6e 67 74 68 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ngth..        //
23e40 2f 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 64  / could not be d
23e50 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20 20  etermined...    
23e60 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
23e70 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
23e80 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 50 72  ic static int Pr
23e90 6f 62 65 46 6f 72 55 74 66 38 42 79 74 65 4c 65  obeForUtf8ByteLe
23ea0 6e 67 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20  ngth(..         
23eb0 20 20 20 49 6e 74 50 74 72 20 70 56 61 6c 75 65     IntPtr pValue
23ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ,..            i
23ed0 6e 74 20 6c 69 6d 69 74 0d 0a 20 20 20 20 20 20  nt limit..      
23ee0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23f00 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 30 3b 0d  int length = 0;.
23f10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
23f20 66 20 28 28 70 56 61 6c 75 65 20 21 3d 20 49 6e  f ((pValue != In
23f30 74 50 74 72 2e 5a 65 72 6f 29 20 26 26 20 28 6c  tPtr.Zero) && (l
23f40 69 6d 69 74 20 3e 20 30 29 29 0d 0a 20 20 20 20  imit > 0))..    
23f50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23f60 20 20 20 20 20 20 20 20 20 20 20 64 6f 0d 0a 20             do.. 
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23f90 20 20 20 20 20 20 69 66 20 28 4d 61 72 73 68 61        if (Marsha
23fa0 6c 2e 52 65 61 64 42 79 74 65 28 70 56 61 6c 75  l.ReadByte(pValu
23fb0 65 2c 20 6c 65 6e 67 74 68 29 20 3d 3d 20 30 29  e, length) == 0)
23fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23fd0 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
23fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23ff0 20 20 20 20 20 20 20 20 69 66 20 28 6c 65 6e 67          if (leng
24000 74 68 20 3e 3d 20 6c 69 6d 69 74 29 0d 0a 20 20  th >= limit)..  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 0d 0a        break;....
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 20 20 20 20 6c 65 6e 67 74 68 2b 2b 3b 0d 0a 20      length++;.. 
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24060 20 77 68 69 6c 65 20 28 74 72 75 65 29 3b 0d 0a   while (true);..
24070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24080 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24090 75 72 6e 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20  urn length;..   
240a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
240b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
240c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24100 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
24110 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
24120 43 6f 6e 76 65 72 74 73 20 74 68 65 20 73 70 65  Converts the spe
24130 63 69 66 69 65 64 20 6e 61 74 69 76 65 20 4e 55  cified native NU
24140 4c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46  L-terminated UTF
24150 2d 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65  -8 string pointe
24160 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  r..        /// i
24170 6e 74 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74  nto a managed st
24180 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ring...        /
24190 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
241a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
241b0 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e  m name="pValue">
241c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
241d0 65 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72  e native NUL-ter
241e0 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
241f0 72 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20  ring pointer... 
24200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
24210 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
24220 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
24230 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
24240 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ged string or nu
24250 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
24260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24270 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
24280 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
24290 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f  string StringFro
242a0 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
242b0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
242c0 20 70 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20   pValue..       
242d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
242e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
242f0 65 74 75 72 6e 20 53 74 72 69 6e 67 46 72 6f 6d  eturn StringFrom
24300 55 74 66 38 49 6e 74 50 74 72 28 70 56 61 6c 75  Utf8IntPtr(pValu
24310 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24320 20 20 20 20 50 72 6f 62 65 46 6f 72 55 74 66 38      ProbeForUtf8
24330 42 79 74 65 4c 65 6e 67 74 68 28 70 56 61 6c 75  ByteLength(pValu
24340 65 2c 20 54 68 69 72 74 79 42 69 74 73 29 29 3b  e, ThirtyBits));
24350 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24360 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
243b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
243c0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
243d0 20 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 74 68   /// Converts th
243e0 65 20 73 70 65 63 69 66 69 65 64 20 6e 61 74 69  e specified nati
243f0 76 65 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ve UTF-8 string 
24400 70 6f 69 6e 74 65 72 20 6f 66 20 74 68 65 20 73  pointer of the s
24410 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20 20 20  pecified..      
24420 20 20 2f 2f 2f 20 6c 65 6e 67 74 68 20 69 6e 74    /// length int
24430 6f 20 61 20 6d 61 6e 61 67 65 64 20 73 74 72 69  o a managed stri
24440 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ng...        ///
24450 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
24460 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
24470 6e 61 6d 65 3d 22 70 56 61 6c 75 65 22 3e 0d 0a  name="pValue">..
24480 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
24490 6e 61 74 69 76 65 20 55 54 46 2d 38 20 73 74 72  native UTF-8 str
244a0 69 6e 67 20 70 6f 69 6e 74 65 72 2e 0d 0a 20 20  ing pointer...  
244b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
244c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
244d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
244e0 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  gth">..        /
244f0 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66  // The length of
24500 20 74 68 65 20 6e 61 74 69 76 65 20 73 74 72 69   the native stri
24510 6e 67 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ng, in bytes... 
24520 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
24530 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
24540 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
24550 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
24560 67 65 64 20 73 74 72 69 6e 67 20 6f 72 20 6e 75  ged string or nu
24570 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72 65 2e  ll upon failure.
24580 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
24590 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
245a0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
245b0 73 74 72 69 6e 67 20 53 74 72 69 6e 67 46 72 6f  string StringFro
245c0 6d 55 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20  mUtf8IntPtr(..  
245d0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
245e0 20 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20   pValue,..      
245f0 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
24600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
24610 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
24620 20 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c          if (pVal
24630 75 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ue == IntPtr.Zer
24640 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
24650 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
24660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24670 69 66 20 28 6c 65 6e 67 74 68 20 3e 20 30 29 0d  if (length > 0).
24680 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 62 79 74 65 5b 5d 20 62 79 74 65 73 20 3d 20 6e  byte[] bytes = n
246b0 65 77 20 62 79 74 65 5b 6c 65 6e 67 74 68 5d 3b  ew byte[length];
246c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
246d0 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79      Marshal.Copy
246e0 28 70 56 61 6c 75 65 2c 20 62 79 74 65 73 2c 20  (pValue, bytes, 
246f0 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20  0, length);.... 
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24710 65 74 75 72 6e 20 47 65 74 53 74 72 69 6e 67 46  eturn GetStringF
24720 72 6f 6d 55 74 66 38 42 79 74 65 73 28 62 79 74  romUtf8Bytes(byt
24730 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  es);..          
24740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24750 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
24760 2e 45 6d 70 74 79 3b 0d 0a 20 20 20 20 20 20 20  .Empty;..       
24770 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
24780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
247d0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
247e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76          /// Conv
247f0 65 72 74 73 20 74 68 65 20 73 70 65 63 69 66 69  erts the specifi
24800 65 64 20 6d 61 6e 61 67 65 64 20 73 74 72 69 6e  ed managed strin
24810 67 20 69 6e 74 6f 20 61 20 6e 61 74 69 76 65 20  g into a native 
24820 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a  NUL-terminated..
24830 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d          /// UTF-
24840 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
24850 20 75 73 69 6e 67 20 6d 65 6d 6f 72 79 20 6f 62   using memory ob
24860 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65 20  tained from the 
24870 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..   
24880 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72 79       /// library
24890 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
248a0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
248b0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
248c0 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20  me="value">..   
248d0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e       /// The man
248e0 61 67 65 64 20 73 74 72 69 6e 67 20 74 6f 20 63  aged string to c
248f0 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
24900 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
24910 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
24920 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
24930 2f 20 54 68 65 20 6e 61 74 69 76 65 20 4e 55 4c  / The native NUL
24940 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
24950 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
24960 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f   or..        ///
24970 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
24980 74 72 2e 5a 65 72 6f 22 20 2f 3e 20 75 70 6f 6e  tr.Zero" /> upon
24990 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
249a0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
249b0 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
249c0 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
249d0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
249e0 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20  ring(..         
249f0 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 0d     string value.
24a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
24a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24a20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
24a30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24a40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24a50 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  n IntPtr.Zero;..
24a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
24a70 74 50 74 72 20 72 65 73 75 6c 74 20 3d 20 49 6e  tPtr result = In
24a80 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
24a90 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62          byte[] b
24aa0 79 74 65 73 20 3d 20 47 65 74 55 74 66 38 42 79  ytes = GetUtf8By
24ab0 74 65 73 46 72 6f 6d 53 74 72 69 6e 67 28 76 61  tesFromString(va
24ac0 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
24ad0 20 20 20 20 20 69 66 20 28 62 79 74 65 73 20 3d       if (bytes =
24ae0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24af0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24b00 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a  IntPtr.Zero;....
24b10 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
24b20 6c 65 6e 67 74 68 20 3d 20 62 79 74 65 73 2e 4c  length = bytes.L
24b30 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
24b40 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
24b50 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f  QLiteMemory.Allo
24b60 63 61 74 65 28 6c 65 6e 67 74 68 20 2b 20 31 29  cate(length + 1)
24b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24b80 20 69 66 20 28 72 65 73 75 6c 74 20 3d 3d 20 49   if (result == I
24b90 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24bb0 75 72 6e 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  urn IntPtr.Zero;
24bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24bd0 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28 62 79 74  Marshal.Copy(byt
24be0 65 73 2c 20 30 2c 20 72 65 73 75 6c 74 2c 20 6c  es, 0, result, l
24bf0 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 20 20 20  ength);..       
24c00 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57 72 69       Marshal.Wri
24c10 74 65 42 79 74 65 28 72 65 73 75 6c 74 2c 20 6c  teByte(result, l
24c20 65 6e 67 74 68 2c 20 30 29 3b 0d 0a 0d 0a 20 20  ength, 0);....  
24c30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24c40 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
24c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
24c60 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
24c70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24cc0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 54        #region UT
24cd0 46 2d 38 20 53 74 72 69 6e 67 20 41 72 72 61 79  F-8 String Array
24ce0 20 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d   Helper Methods.
24cf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  .        /// <su
24d00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
24d10 2f 2f 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6c  /// Converts a l
24d20 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
24d30 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65 72 6d 69  native NUL-termi
24d40 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
24d50 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ng..        /// 
24d60 70 6f 69 6e 74 65 72 73 20 69 6e 74 6f 20 61 6e  pointers into an
24d70 20 61 72 72 61 79 20 6f 66 20 6d 61 6e 61 67 65   array of manage
24d80 64 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20  d strings...    
24d90 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
24da0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
24db0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67  <param name="arg
24dc0 63 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  c">..        ///
24dd0 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   The number of e
24de0 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 6c  lements in the l
24df0 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66 20  ogical array of 
24e00 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  native..        
24e10 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61 74  /// NUL-terminat
24e20 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
24e30 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20 20  pointers...     
24e40 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
24e50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
24e60 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22 3e  ram name="argv">
24e70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
24e80 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
24e90 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61 6c 20   to the logical 
24ea0 61 72 72 61 79 20 6f 66 20 6e 61 74 69 76 65 20  array of native 
24eb0 4e 55 4c 2d 74 65 72 6d 69 6e 61 74 65 64 0d 0a  NUL-terminated..
24ec0 20 20 20 20 20 20 20 20 2f 2f 2f 20 55 54 46 2d          /// UTF-
24ed0 38 20 73 74 72 69 6e 67 20 70 6f 69 6e 74 65 72  8 string pointer
24ee0 73 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20  s to convert... 
24ef0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
24f00 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
24f10 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
24f20 20 20 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61      /// The arra
24f30 79 20 6f 66 20 6d 61 6e 61 67 65 64 20 73 74 72  y of managed str
24f40 69 6e 67 73 20 6f 72 20 6e 75 6c 6c 20 75 70 6f  ings or null upo
24f50 6e 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20  n failure...    
24f60 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
24f70 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  s>..        publ
24f80 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
24f90 5b 5d 20 53 74 72 69 6e 67 41 72 72 61 79 46 72  [] StringArrayFr
24fa0 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64 49 6e 74  omUtf8SizeAndInt
24fb0 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Ptr(..          
24fc0 20 20 69 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20    int argc,..   
24fd0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
24fe0 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20 20  argv..          
24ff0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
25000 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25010 61 72 67 63 20 3c 20 30 29 0d 0a 20 20 20 20 20  argc < 0)..     
25020 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25030 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
25040 20 20 20 20 20 20 20 69 66 20 28 61 72 67 76 20         if (argv 
25050 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
25060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25070 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
25080 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
25090 69 6e 67 5b 5d 20 72 65 73 75 6c 74 20 3d 20 6e  ing[] result = n
250a0 65 77 20 73 74 72 69 6e 67 5b 61 72 67 63 5d 3b  ew string[argc];
250b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
250c0 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
250d0 20 30 2c 20 6f 66 66 73 65 74 20 3d 20 30 3b 0d   0, offset = 0;.
250e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250f0 20 20 20 20 20 69 6e 64 65 78 20 3c 20 72 65 73       index < res
25100 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 20 20 20  ult.Length;..   
25110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25120 20 69 6e 64 65 78 2b 2b 2c 20 6f 66 66 73 65 74   index++, offset
25130 20 2b 3d 20 49 6e 74 50 74 72 2e 53 69 7a 65 29   += IntPtr.Size)
25140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25160 20 49 6e 74 50 74 72 20 70 41 72 67 20 3d 20 53   IntPtr pArg = S
25170 51 4c 69 74 65 4d 61 72 73 68 61 6c 2e 52 65 61  QLiteMarshal.Rea
25180 64 49 6e 74 50 74 72 28 61 72 67 76 2c 20 6f 66  dIntPtr(argv, of
25190 66 73 65 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  fset);....      
251a0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
251b0 5b 69 6e 64 65 78 5d 20 3d 20 28 70 41 72 67 20  [index] = (pArg 
251c0 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20  != IntPtr.Zero) 
251d0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
251e0 20 20 20 20 20 20 20 53 74 72 69 6e 67 46 72 6f         StringFro
251f0 6d 55 74 66 38 49 6e 74 50 74 72 28 70 41 72 67  mUtf8IntPtr(pArg
25200 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  ) : null;..     
25210 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25220 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
25230 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
25240 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
25250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25290 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
252a0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
252b0 20 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 76 65         /// Conve
252c0 72 74 73 20 61 6e 20 61 72 72 61 79 20 6f 66 20  rts an array of 
252d0 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20  managed strings 
252e0 69 6e 74 6f 20 61 6e 20 61 72 72 61 79 20 6f 66  into an array of
252f0 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20   native..       
25300 20 2f 2f 2f 20 4e 55 4c 2d 74 65 72 6d 69 6e 61   /// NUL-termina
25310 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
25320 20 70 6f 69 6e 74 65 72 73 2e 0d 0a 20 20 20 20   pointers...    
25330 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
25340 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
25350 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
25360 75 65 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ues">..        /
25370 2f 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20  // The array of 
25380 6d 61 6e 61 67 65 64 20 73 74 72 69 6e 67 73 20  managed strings 
25390 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20 20  to convert...   
253a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
253b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
253c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
253d0 20 20 2f 2f 2f 20 54 68 65 20 61 72 72 61 79 20    /// The array 
253e0 6f 66 20 6e 61 74 69 76 65 20 4e 55 4c 2d 74 65  of native NUL-te
253f0 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
25400 74 72 69 6e 67 20 70 6f 69 6e 74 65 72 73 20 6f  tring pointers o
25410 72 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  r null..        
25420 2f 2f 2f 20 75 70 6f 6e 20 66 61 69 6c 75 72 65  /// upon failure
25430 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
25440 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
25450 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
25460 20 49 6e 74 50 74 72 5b 5d 20 55 74 66 38 49 6e   IntPtr[] Utf8In
25470 74 50 74 72 41 72 72 61 79 46 72 6f 6d 53 74 72  tPtrArrayFromStr
25480 69 6e 67 41 72 72 61 79 28 0d 0a 20 20 20 20 20  ingArray(..     
25490 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
254a0 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  values..        
254b0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
254c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
254d0 20 28 76 61 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c   (values == null
254e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
254f0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
25500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ...            I
25510 6e 74 50 74 72 5b 5d 20 72 65 73 75 6c 74 20 3d  ntPtr[] result =
25520 20 6e 65 77 20 49 6e 74 50 74 72 5b 76 61 6c 75   new IntPtr[valu
25530 65 73 2e 4c 65 6e 67 74 68 5d 3b 0d 0a 0d 0a 20  es.Length];.... 
25540 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
25550 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
25560 6e 64 65 78 20 3c 20 72 65 73 75 6c 74 2e 4c 65  ndex < result.Le
25570 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25590 72 65 73 75 6c 74 5b 69 6e 64 65 78 5d 20 3d 20  result[index] = 
255a0 55 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74  Utf8IntPtrFromSt
255b0 72 69 6e 67 28 76 61 6c 75 65 73 5b 69 6e 64 65  ring(values[inde
255c0 78 5d 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x]);....        
255d0 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
255e0 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t;..        }.. 
255f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
25600 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
25610 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25670 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69 74     #region SQLit
25680 65 42 79 74 65 73 20 53 74 61 74 69 63 20 43 6c  eBytes Static Cl
25690 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
256a0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
256b0 54 68 69 73 20 63 6c 61 73 73 20 63 6f 6e 74 61  This class conta
256c0 69 6e 73 20 73 74 61 74 69 63 20 6d 65 74 68 6f  ins static metho
256d0 64 73 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ds that are used
256e0 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 6e 61   to deal with na
256f0 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f 20 70 6f  tive..    /// po
25700 69 6e 74 65 72 73 20 74 6f 20 6d 65 6d 6f 72 79  inters to memory
25710 20 62 6c 6f 63 6b 73 20 74 68 61 74 20 6c 6f 67   blocks that log
25720 69 63 61 6c 6c 79 20 63 6f 6e 74 61 69 6e 20 61  ically contain a
25730 72 72 61 79 73 20 6f 66 20 62 79 74 65 73 20 74  rrays of bytes t
25740 6f 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 75 73  o be..    /// us
25750 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 69  ed with the SQLi
25760 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
25770 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
25780 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
25790 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  al static class 
257a0 53 51 4c 69 74 65 42 79 74 65 73 0d 0a 20 20 20  SQLiteBytes..   
257b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67   {..        #reg
257c0 69 6f 6e 20 42 79 74 65 20 41 72 72 61 79 20 48  ion Byte Array H
257d0 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  elper Methods.. 
257e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
257f0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
25800 2f 20 43 6f 6e 76 65 72 74 73 20 61 20 6e 61 74  / Converts a nat
25810 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  ive pointer to a
25820 20 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f   logical array o
25830 66 20 62 79 74 65 73 20 6f 66 20 74 68 65 0d 0a  f bytes of the..
25840 20 20 20 20 20 20 20 20 2f 2f 2f 20 73 70 65 63          /// spec
25850 69 66 69 65 64 20 6c 65 6e 67 74 68 20 69 6e 74  ified length int
25860 6f 20 61 20 6d 61 6e 61 67 65 64 20 62 79 74 65  o a managed byte
25870 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 20   array...       
25880 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
25890 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
258a0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 61 6c 75 65  ram name="pValue
258b0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
258c0 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74  The native point
258d0 65 72 20 74 6f 20 74 68 65 20 6c 6f 67 69 63 61  er to the logica
258e0 6c 20 61 72 72 61 79 20 6f 66 20 62 79 74 65 73  l array of bytes
258f0 20 74 6f 20 63 6f 6e 76 65 72 74 2e 0d 0a 20 20   to convert...  
25900 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
25910 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
25920 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 65 6e  <param name="len
25930 67 74 68 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  gth">..        /
25940 2f 2f 20 54 68 65 20 6c 65 6e 67 74 68 2c 20 69  // The length, i
25950 6e 20 62 79 74 65 73 2c 20 6f 66 20 74 68 65 20  n bytes, of the 
25960 6c 6f 67 69 63 61 6c 20 61 72 72 61 79 20 6f 66  logical array of
25970 20 62 79 74 65 73 20 74 6f 20 63 6f 6e 76 65 72   bytes to conver
25980 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  t...        /// 
25990 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
259a0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
259b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
259c0 20 6d 61 6e 61 67 65 64 20 62 79 74 65 20 61 72   managed byte ar
259d0 72 61 79 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e  ray or null upon
259e0 20 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20   failure...     
259f0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
25a00 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
25a10 63 20 73 74 61 74 69 63 20 62 79 74 65 5b 5d 20  c static byte[] 
25a20 46 72 6f 6d 49 6e 74 50 74 72 28 0d 0a 20 20 20  FromIntPtr(..   
25a30 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
25a40 70 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  pValue,..       
25a50 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d       int length.
25a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
25a70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25a80 20 20 20 20 20 20 20 69 66 20 28 70 56 61 6c 75         if (pValu
25a90 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  e == IntPtr.Zero
25aa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25ab0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
25ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25ad0 66 20 28 6c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  f (length == 0).
25ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25af0 20 72 65 74 75 72 6e 20 6e 65 77 20 62 79 74 65   return new byte
25b00 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
25b10 20 20 20 20 62 79 74 65 5b 5d 20 72 65 73 75 6c      byte[] resul
25b20 74 20 3d 20 6e 65 77 20 62 79 74 65 5b 6c 65 6e  t = new byte[len
25b30 67 74 68 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  gth];....       
25b40 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
25b50 79 28 70 56 61 6c 75 65 2c 20 72 65 73 75 6c 74  y(pValue, result
25b60 2c 20 30 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a 0d  , 0, length);...
25b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
25b80 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
25b90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25ba0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25bf0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
25c00 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
25c10 43 6f 6e 76 65 72 74 73 20 61 20 6d 61 6e 61 67  Converts a manag
25c20 65 64 20 62 79 74 65 20 61 72 72 61 79 20 69 6e  ed byte array in
25c30 74 6f 20 61 20 6e 61 74 69 76 65 20 70 6f 69 6e  to a native poin
25c40 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61 6c  ter to a logical
25c50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 72  ..        /// ar
25c60 72 61 79 20 6f 66 20 62 79 74 65 73 2e 0d 0a 20  ray of bytes... 
25c70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
25c80 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
25c90 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
25ca0 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 20  value">..       
25cb0 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61 67 65 64   /// The managed
25cc0 20 62 79 74 65 20 61 72 72 61 79 20 74 6f 20 63   byte array to c
25cd0 6f 6e 76 65 72 74 2e 0d 0a 20 20 20 20 20 20 20  onvert...       
25ce0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
25cf0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
25d00 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
25d10 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
25d20 6e 74 65 72 20 74 6f 20 61 20 6c 6f 67 69 63 61  nter to a logica
25d30 6c 20 62 79 74 65 20 61 72 72 61 79 20 6f 72 20  l byte array or 
25d40 6e 75 6c 6c 20 75 70 6f 6e 20 66 61 69 6c 75 72  null upon failur
25d50 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
25d60 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
25d70 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
25d80 63 20 49 6e 74 50 74 72 20 54 6f 49 6e 74 50 74  c IntPtr ToIntPt
25d90 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
25da0 62 79 74 65 5b 5d 20 76 61 6c 75 65 0d 0a 20 20  byte[] value..  
25db0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
25dc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25dd0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
25de0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25df0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
25e00 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20  ntPtr.Zero;.... 
25e10 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
25e20 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65  ength = value.Le
25e30 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
25e40 20 20 20 20 20 69 66 20 28 6c 65 6e 67 74 68 20       if (length 
25e50 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
25e60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
25e70 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20  tPtr.Zero;....  
25e80 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
25e90 20 72 65 73 75 6c 74 20 3d 20 53 51 4c 69 74 65   result = SQLite
25ea0 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74 65 28  Memory.Allocate(
25eb0 6c 65 6e 67 74 68 29 3b 0d 0a 0d 0a 20 20 20 20  length);....    
25ec0 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
25ed0 6c 74 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  lt == IntPtr.Zer
25ee0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
25ef0 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 50 74      return IntPt
25f00 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
25f10 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43         Marshal.C
25f20 6f 70 79 28 76 61 6c 75 65 2c 20 30 2c 20 72 65  opy(value, 0, re
25f30 73 75 6c 74 2c 20 6c 65 6e 67 74 68 29 3b 0d 0a  sult, length);..
25f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
25f50 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
25f60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25f70 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
25f80 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
25f90 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
25fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fe0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
25ff0 67 69 6f 6e 20 53 51 4c 69 74 65 4d 61 72 73 68  gion SQLiteMarsh
26000 61 6c 20 53 74 61 74 69 63 20 43 6c 61 73 73 0d  al Static Class.
26010 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
26020 61 74 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  atic class SQLit
26030 65 4d 61 72 73 68 61 6c 0d 0a 20 20 20 20 7b 0d  eMarshal..    {.
26040 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
26050 20 49 6e 74 50 74 72 20 48 65 6c 70 65 72 20 4d   IntPtr Helper M
26060 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
26070 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
26080 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 74 75 72         /// Retur
26090 6e 73 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72  ns a new <see cr
260a0 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 6f  ef="IntPtr" /> o
260b0 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 62  bject instance b
260c0 61 73 65 64 20 6f 6e 20 74 68 65 0d 0a 20 20 20  ased on the..   
260d0 20 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66 69       /// specifi
260e0 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  ed <see cref="In
260f0 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
26100 69 6e 73 74 61 6e 63 65 20 61 6e 64 20 61 6e 20  instance and an 
26110 69 6e 74 65 67 65 72 0d 0a 20 20 20 20 20 20 20  integer..       
26120 20 2f 2f 2f 20 6f 66 66 73 65 74 2e 0d 0a 20 20   /// offset...  
26130 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
26140 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
26150 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
26160 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
26170 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
26180 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
26190 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
261a0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
261b0 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
261c0 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
261d0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
261e0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
261f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
26200 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
26210 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
26220 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
26230 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
26240 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
26250 74 68 65 20 6e 65 77 0d 0a 20 20 20 20 20 20 20  the new..       
26260 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
26270 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
26280 74 20 69 6e 73 74 61 6e 63 65 20 73 68 6f 75 6c  t instance shoul
26290 64 20 70 6f 69 6e 74 20 74 6f 2e 0d 0a 20 20 20  d point to...   
262a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
262b0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
262c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
262d0 20 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 3c 73    /// The new <s
262e0 65 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22  ee cref="IntPtr"
262f0 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61   /> object insta
26300 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  nce...        //
26310 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
26320 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
26330 74 69 63 20 49 6e 74 50 74 72 20 49 6e 74 50 74  tic IntPtr IntPt
26340 72 46 6f 72 4f 66 66 73 65 74 28 0d 0a 20 20 20  rForOffset(..   
26350 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
26360 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
26370 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
26380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26390 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
263a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
263b0 65 77 20 49 6e 74 50 74 72 28 70 6f 69 6e 74 65  ew IntPtr(pointe
263c0 72 2e 54 6f 49 6e 74 36 34 28 29 20 2b 20 6f 66  r.ToInt64() + of
263d0 66 73 65 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  fset);..        
263e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
263f0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
26400 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26440 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26450 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 61 72 73      #region Mars
26460 68 61 6c 20 52 65 61 64 20 48 65 6c 70 65 72 20  hal Read Helper 
26470 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
26480 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
26490 20 20 20 20 20 20 20 20 2f 2f 2f 20 52 65 61 64          /// Read
264a0 73 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49  s a <see cref="I
264b0 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20 66  nt32" /> value f
264c0 72 6f 6d 20 74 68 65 20 73 70 65 63 69 66 69 65  rom the specifie
264d0 64 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20  d memory..      
264e0 20 20 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d    /// location..
264f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
26500 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
26510 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
26520 3d 22 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20  ="pointer">..   
26530 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
26540 65 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20  e cref="IntPtr" 
26550 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
26560 63 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  ce representing 
26570 74 68 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20  the base..      
26580 20 20 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63    /// memory loc
26590 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
265a0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
265b0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
265c0 20 6e 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d   name="offset">.
265d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
265e0 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20   integer offset 
265f0 66 72 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65  from the base me
26600 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68  mory location wh
26610 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ere the..       
26620 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
26630 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
26640 74 6f 20 62 65 20 72 65 61 64 20 69 73 20 6c 6f  to be read is lo
26650 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  cated...        
26660 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
26670 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
26680 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
26690 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
266a0 49 6e 74 33 32 22 20 2f 3e 20 76 61 6c 75 65 20  Int32" /> value 
266b0 61 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  at the specified
266c0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
266d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
266e0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  /returns>..     
266f0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
26700 20 69 6e 74 20 52 65 61 64 49 6e 74 33 32 28 0d   int ReadInt32(.
26710 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74  .            Int
26720 50 74 72 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20  Ptr pointer,..  
26730 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66            int of
26740 66 73 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  fset..          
26750 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
26760 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
26770 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
26780 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26790 72 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49  rn Marshal.ReadI
267a0 6e 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66  nt32(pointer, of
267b0 66 73 65 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  fset);..#else.. 
267c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
267d0 6e 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49 6e  n Marshal.ReadIn
267e0 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
267f0 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
26800 73 65 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  set));..#endif..
26810 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26820 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26870 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
26880 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
26890 2f 2f 20 52 65 61 64 73 20 61 20 3c 73 65 65 20  // Reads a <see 
268a0 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e  cref="Double" />
268b0 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
268c0 73 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79  specified memory
268d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  ..        /// lo
268e0 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
268f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
26900 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
26910 72 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65  ram name="pointe
26920 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
26930 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
26940 49 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63  IntPtr" /> objec
26950 74 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65  t instance repre
26960 73 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65  senting the base
26970 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65  ..        /// me
26980 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  mory location...
26990 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
269a0 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
269b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f  / <param name="o
269c0 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20  ffset">..       
269d0 20 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72   /// The integer
269e0 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65   offset from the
269f0 20 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63   base memory loc
26a00 61 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d  ation where the.
26a10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
26a20 65 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20  e cref="Double" 
26a30 2f 3e 20 74 6f 20 62 65 20 72 65 61 64 20 69 73  /> to be read is
26a40 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20   located...     
26a50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
26a60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65  .        /// <re
26a70 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
26a80 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
26a90 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 20 76 61  f="Double" /> va
26aa0 6c 75 65 20 61 74 20 74 68 65 20 73 70 65 63 69  lue at the speci
26ab0 66 69 65 64 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  fied memory loca
26ac0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
26ad0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
26ae0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
26af0 61 74 69 63 20 64 6f 75 62 6c 65 20 52 65 61 64  atic double Read
26b00 44 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20  Double(..       
26b10 20 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e       IntPtr poin
26b20 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ter,..          
26b30 20 20 69 6e 74 20 6f 66 66 73 65 74 0d 0a 20 20    int offset..  
26b40 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26b50 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41       {..#if !PLA
26b60 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
26b70 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
26b80 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43 6f      return BitCo
26b90 6e 76 65 72 74 65 72 2e 49 6e 74 36 34 42 69 74  nverter.Int64Bit
26ba0 73 54 6f 44 6f 75 62 6c 65 28 4d 61 72 73 68 61  sToDouble(Marsha
26bb0 6c 2e 52 65 61 64 49 6e 74 36 34 28 0d 0a 20 20  l.ReadInt64(..  
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6f                po
26bd0 69 6e 74 65 72 2c 20 6f 66 66 73 65 74 29 29 3b  inter, offset));
26be0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
26bf0 20 20 20 20 20 72 65 74 75 72 6e 20 42 69 74 43       return BitC
26c00 6f 6e 76 65 72 74 65 72 2e 54 6f 44 6f 75 62 6c  onverter.ToDoubl
26c10 65 28 42 69 74 43 6f 6e 76 65 72 74 65 72 2e 47  e(BitConverter.G
26c20 65 74 42 79 74 65 73 28 0d 0a 20 20 20 20 20 20  etBytes(..      
26c30 20 20 20 20 20 20 20 20 20 20 4d 61 72 73 68 61            Marsha
26c40 6c 2e 52 65 61 64 49 6e 74 36 34 28 49 6e 74 50  l.ReadInt64(IntP
26c50 74 72 46 6f 72 4f 66 66 73 65 74 28 70 6f 69 6e  trForOffset(poin
26c60 74 65 72 2c 20 6f 66 66 73 65 74 29 29 29 2c 20  ter, offset))), 
26c70 30 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  0);..#endif..   
26c80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26c90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26ce0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
26cf0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
26d00 52 65 61 64 73 20 61 6e 20 3c 73 65 65 20 63 72  Reads an <see cr
26d10 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20 76  ef="IntPtr" /> v
26d20 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 73 70  alue from the sp
26d30 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d 0a  ecified memory..
26d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63 61          /// loca
26d50 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
26d60 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
26d70 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
26d80 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72 22  m name="pointer"
26d90 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
26da0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e  he <see cref="In
26db0 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tPtr" /> object 
26dc0 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73 65  instance represe
26dd0 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d 0a  nting the base..
26de0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f          /// memo
26df0 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  ry location...  
26e00 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
26e10 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
26e20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66 66  <param name="off
26e30 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  set">..        /
26e40 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20 6f  // The integer o
26e50 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
26e60 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  ase memory locat
26e70 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a 20  ion where the.. 
26e80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
26e90 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
26ea0 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 61   value to be rea
26eb0 64 20 69 73 20 6c 6f 63 61 74 65 64 2e 0d 0a 20  d is located... 
26ec0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
26ed0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
26ee0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
26ef0 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
26f00 20 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f   cref="IntPtr" /
26f10 3e 20 76 61 6c 75 65 20 61 74 20 74 68 65 20 73  > value at the s
26f20 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 20  pecified memory 
26f30 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  location...     
26f40 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
26f50 3e 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69  >..        publi
26f60 63 20 73 74 61 74 69 63 20 49 6e 74 50 74 72 20  c static IntPtr 
26f70 52 65 61 64 49 6e 74 50 74 72 28 0d 0a 20 20 20  ReadIntPtr(..   
26f80 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
26f90 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20 20  pointer,..      
26fa0 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65 74        int offset
26fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
26fc0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
26fd0 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
26fe0 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
26ff0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
27000 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
27010 72 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  r(pointer, offse
27020 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  t);..#else..    
27030 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
27040 61 72 73 68 61 6c 2e 52 65 61 64 49 6e 74 50 74  arshal.ReadIntPt
27050 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
27060 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
27070 74 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  t));..#endif..  
27080 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27090 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
270a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
270b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
270f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
27100 6e 20 4d 61 72 73 68 61 6c 20 57 72 69 74 65 20  n Marshal Write 
27110 48 65 6c 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a  Helper Methods..
27120 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
27130 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
27140 2f 2f 20 57 72 69 74 65 73 20 61 6e 20 3c 73 65  // Writes an <se
27150 65 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f  e cref="Int32" /
27160 3e 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 73  > value to the s
27170 70 65 63 69 66 69 65 64 20 6d 65 6d 6f 72 79 0d  pecified memory.
27180 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 63  .        /// loc
27190 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
271a0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
271b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
271c0 61 6d 20 6e 61 6d 65 3d 22 70 6f 69 6e 74 65 72  am name="pointer
271d0 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
271e0 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  The <see cref="I
271f0 6e 74 50 74 72 22 20 2f 3e 20 6f 62 6a 65 63 74  ntPtr" /> object
27200 20 69 6e 73 74 61 6e 63 65 20 72 65 70 72 65 73   instance repres
27210 65 6e 74 69 6e 67 20 74 68 65 20 62 61 73 65 0d  enting the base.
27220 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 65 6d  .        /// mem
27230 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  ory location... 
27240 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
27250 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
27260 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 66   <param name="of
27270 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  fset">..        
27280 2f 2f 2f 20 54 68 65 20 69 6e 74 65 67 65 72 20  /// The integer 
27290 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
272a0 62 61 73 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61  base memory loca
272b0 74 69 6f 6e 20 77 68 65 72 65 20 74 68 65 0d 0a  tion where the..
272c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
272d0 20 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e   cref="Int32" />
272e0 20 76 61 6c 75 65 20 74 6f 20 62 65 20 77 72 69   value to be wri
272f0 74 74 65 6e 20 69 73 20 6c 6f 63 61 74 65 64 2e  tten is located.
27300 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
27310 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
27320 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
27330 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20  "value">..      
27340 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
27350 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20 76  ref="Int32" /> v
27360 61 6c 75 65 20 74 6f 20 77 72 69 74 65 2e 0d 0a  alue to write...
27370 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
27380 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 75  ram>..        pu
27390 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
273a0 20 57 72 69 74 65 49 6e 74 33 32 28 0d 0a 20 20   WriteInt32(..  
273b0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
273c0 20 70 6f 69 6e 74 65 72 2c 0d 0a 20 20 20 20 20   pointer,..     
273d0 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66 73 65         int offse
273e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
273f0 69 6e 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  int value..     
27400 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
27410 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
27420 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
27430 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
27440 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
27450 74 33 32 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  t32(pointer, off
27460 73 65 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65  set, value);..#e
27470 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
27480 20 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e   Marshal.WriteIn
27490 74 33 32 28 49 6e 74 50 74 72 46 6f 72 4f 66 66  t32(IntPtrForOff
274a0 73 65 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66  set(pointer, off
274b0 73 65 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23  set), value);..#
274c0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
274d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
274e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
274f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27520 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
27530 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
27540 20 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73        /// Writes
27550 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f   a <see cref="Do
27560 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74  uble" /> value t
27570 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified 
27580 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  memory..        
27590 2f 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20  /// location... 
275a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
275b0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
275c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
275d0 70 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20  pointer">..     
275e0 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
275f0 63 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e  cref="IntPtr" />
27600 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
27610 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
27620 65 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  e base..        
27630 2f 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  /// memory locat
27640 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
27650 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
27660 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
27670 61 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20  ame="offset">.. 
27680 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69         /// The i
27690 6e 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72  nteger offset fr
276a0 6f 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f  om the base memo
276b0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72  ry location wher
276c0 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  e the..        /
276d0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f  // <see cref="Do
276e0 75 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74  uble" /> value t
276f0 6f 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20  o be written is 
27700 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20  located...      
27710 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
27720 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
27730 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e  am name="value">
27740 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68  ..        /// Th
27750 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 6f 75  e <see cref="Dou
27760 62 6c 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  ble" /> value to
27770 20 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   write...       
27780 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27790 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
277a0 61 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 44  atic void WriteD
277b0 6f 75 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20  ouble(..        
277c0 20 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74      IntPtr point
277d0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
277e0 20 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20   int offset,..  
277f0 20 20 20 20 20 20 20 20 20 20 64 6f 75 62 6c 65            double
27800 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
27810 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27820 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
27830 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
27840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
27850 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36 34  rshal.WriteInt64
27860 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
27870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27880 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65 72 2e     BitConverter.
27890 44 6f 75 62 6c 65 54 6f 49 6e 74 36 34 42 69 74  DoubleToInt64Bit
278a0 73 28 76 61 6c 75 65 29 29 3b 0d 0a 23 65 6c 73  s(value));..#els
278b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  e..            M
278c0 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 36  arshal.WriteInt6
278d0 34 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  4(IntPtrForOffse
278e0 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
278f0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
27900 20 20 20 20 20 42 69 74 43 6f 6e 76 65 72 74 65       BitConverte
27910 72 2e 54 6f 49 6e 74 36 34 28 42 69 74 43 6f 6e  r.ToInt64(BitCon
27920 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73 28  verter.GetBytes(
27930 76 61 6c 75 65 29 2c 20 30 29 29 3b 0d 0a 23 65  value), 0));..#e
27940 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
27950 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
27960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
279b0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
279c0 20 20 20 20 20 2f 2f 2f 20 57 72 69 74 65 73 20       /// Writes 
279d0 61 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  a <see cref="Int
279e0 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
279f0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6d   the specified m
27a00 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 2f  emory..        /
27a10 2f 2f 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20  // location...  
27a20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
27a30 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ary>..        //
27a40 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
27a50 6f 69 6e 74 65 72 22 3e 0d 0a 20 20 20 20 20 20  ointer">..      
27a60 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
27a70 72 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 20  ref="IntPtr" /> 
27a80 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
27a90 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
27aa0 20 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 2f   base..        /
27ab0 2f 2f 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  // memory locati
27ac0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  on...        ///
27ad0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
27ae0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
27af0 6d 65 3d 22 6f 66 66 73 65 74 22 3e 0d 0a 20 20  me="offset">..  
27b00 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e        /// The in
27b10 74 65 67 65 72 20 6f 66 66 73 65 74 20 66 72 6f  teger offset fro
27b20 6d 20 74 68 65 20 62 61 73 65 20 6d 65 6d 6f 72  m the base memor
27b30 79 20 6c 6f 63 61 74 69 6f 6e 20 77 68 65 72 65  y location where
27b40 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f   the..        //
27b50 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74  / <see cref="Int
27b60 50 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f  Ptr" /> value to
27b70 20 62 65 20 77 72 69 74 74 65 6e 20 69 73 20 6c   be written is l
27b80 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ocated...       
27b90 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
27ba0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
27bb0 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d  m name="value">.
27bc0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
27bd0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 50   <see cref="IntP
27be0 74 72 22 20 2f 3e 20 76 61 6c 75 65 20 74 6f 20  tr" /> value to 
27bf0 77 72 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  write...        
27c00 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
27c10 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
27c20 74 69 63 20 76 6f 69 64 20 57 72 69 74 65 49 6e  tic void WriteIn
27c30 74 50 74 72 28 0d 0a 20 20 20 20 20 20 20 20 20  tPtr(..         
27c40 20 20 20 49 6e 74 50 74 72 20 70 6f 69 6e 74 65     IntPtr pointe
27c50 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
27c60 69 6e 74 20 6f 66 66 73 65 74 2c 0d 0a 20 20 20  int offset,..   
27c70 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
27c80 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
27c90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27ca0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
27cb0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
27cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
27cd0 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72  shal.WriteIntPtr
27ce0 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65 74  (pointer, offset
27cf0 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73 65  , value);..#else
27d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
27d10 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
27d20 72 28 49 6e 74 50 74 72 46 6f 72 4f 66 66 73 65  r(IntPtrForOffse
27d30 74 28 70 6f 69 6e 74 65 72 2c 20 6f 66 66 73 65  t(pointer, offse
27d40 74 29 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6e  t), value);..#en
27d50 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
27d60 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
27d70 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23  on..    }..    #
27d80 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
27d90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27de0 20 20 20 20 23 72 65 67 69 6f 6e 20 53 51 4c 69      #region SQLi
27df0 74 65 4d 6f 64 75 6c 65 20 42 61 73 65 20 43 6c  teModule Base Cl
27e00 61 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ass..    /// <su
27e10 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
27e20 54 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65  This class repre
27e30 73 65 6e 74 73 20 61 20 6d 61 6e 61 67 65 64 20  sents a managed 
27e40 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
27e50 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
27e60 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 74  ion...    /// It
27e70 20 69 73 20 6e 6f 74 20 73 65 61 6c 65 64 20 61   is not sealed a
27e80 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 64 20  nd must be used 
27e90 61 73 20 74 68 65 20 62 61 73 65 20 63 6c 61 73  as the base clas
27ea0 73 20 66 6f 72 20 61 6e 79 0d 0a 20 20 20 20 2f  s for any..    /
27eb0 2f 2f 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20  // user-defined 
27ec0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f  virtual table mo
27ed0 64 75 6c 65 20 63 6c 61 73 73 65 73 20 69 6d 70  dule classes imp
27ee0 6c 65 6d 65 6e 74 65 64 20 69 6e 20 6d 61 6e 61  lemented in mana
27ef0 67 65 64 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  ged code...    /
27f00 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
27f10 20 20 20 70 75 62 6c 69 63 20 61 62 73 74 72 61     public abstra
27f20 63 74 20 63 6c 61 73 73 20 53 51 4c 69 74 65 4d  ct class SQLiteM
27f30 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20 20 20 20  odule :..       
27f40 20 20 20 20 20 49 53 51 4c 69 74 65 4d 61 6e 61       ISQLiteMana
27f50 67 65 64 4d 6f 64 75 6c 65 2c 20 2f 2a 49 53 51  gedModule, /*ISQ
27f60 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
27f70 2c 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ,*/..           
27f80 20 49 44 69 73 70 6f 73 61 62 6c 65 20 2f 2a 20   IDisposable /* 
27f90 4e 4f 54 20 53 45 41 4c 45 44 20 2a 2f 0d 0a 20  NOT SEALED */.. 
27fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
27fb0 65 67 69 6f 6e 20 53 51 4c 69 74 65 4e 61 74 69  egion SQLiteNati
27fc0 76 65 4d 6f 64 75 6c 65 20 50 72 69 76 61 74 65  veModule Private
27fd0 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
27fe0 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
27ff0 6c 61 73 73 20 53 51 4c 69 74 65 4e 61 74 69 76  lass SQLiteNativ
28000 65 4d 6f 64 75 6c 65 20 3a 0d 0a 20 20 20 20 20  eModule :..     
28010 20 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69             ISQLi
28020 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2c 20  teNativeModule, 
28030 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
28040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28050 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
28060 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
28070 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
28080 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
28090 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69        /// This i
280a0 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
280b0 20 69 73 20 61 6c 77 61 79 73 20 75 73 65 64 20   is always used 
280c0 66 6f 72 20 74 68 65 20 22 6c 6f 67 45 72 72 6f  for the "logErro
280d0 72 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs"..           
280e0 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20 74   /// parameter t
280f0 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 73 74  o the various st
28100 61 74 69 63 20 65 72 72 6f 72 20 68 61 6e 64 6c  atic error handl
28110 69 6e 67 20 6d 65 74 68 6f 64 73 20 70 72 6f 76  ing methods prov
28120 69 64 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ided..          
28130 20 20 2f 2f 2f 20 62 79 20 74 68 65 20 3c 73 65    /// by the <se
28140 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
28150 64 75 6c 65 22 20 2f 3e 20 63 6c 61 73 73 2e 0d  dule" /> class..
28160 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28170 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
28180 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
28190 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61   const bool Defa
281a0 75 6c 74 4c 6f 67 45 72 72 6f 72 73 20 3d 20 74  ultLogErrors = t
281b0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
281c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
281d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28200 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28210 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
28220 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
28230 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
28240 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
28250 74 65 78 74 20 75 73 65 64 20 77 68 65 6e 20 74  text used when t
28260 68 65 20 63 6f 6e 74 61 69 6e 65 64 0d 0a 20 20  he contained..  
28270 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
28280 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d  ee cref="SQLiteM
28290 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
282a0 20 69 6e 73 74 61 6e 63 65 20 69 73 20 6e 6f 74   instance is not
282b0 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..    
282c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 20          /// for 
282d0 61 6e 79 20 72 65 61 73 6f 6e 2e 0d 0a 20 20 20  any reason...   
282e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
282f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
28300 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
28310 73 74 20 73 74 72 69 6e 67 20 4d 6f 64 75 6c 65  st string Module
28320 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72 6f  NotAvailableErro
28330 72 4d 65 73 73 61 67 65 20 3d 0d 0a 20 20 20 20  rMessage =..    
28340 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 61 74              "nat
28350 69 76 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  ive module imple
28360 6d 65 6e 74 61 74 69 6f 6e 20 6e 6f 74 20 61 76  mentation not av
28370 61 69 6c 61 62 6c 65 22 3b 0d 0a 20 20 20 20 20  ailable";..     
28380 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
28390 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
283a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
283b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
283f0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
28400 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ate Data..      
28410 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
28420 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
28430 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
28440 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ef="SQLiteModule
28450 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
28460 61 6e 63 65 20 75 73 65 64 20 74 6f 20 70 72 6f  ance used to pro
28470 76 69 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20  vide..          
28480 20 20 2f 2f 2f 20 61 6e 20 69 6d 70 6c 65 6d 65    /// an impleme
28490 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 3c  ntation of the <
284a0 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
284b0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20 2f  eNativeModule" /
284c0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
284d0 2f 2f 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20  // interface... 
284e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
284f0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
28500 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
28510 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
28520 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
28530 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
28540 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
285a0 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
285b0 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
285c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
285d0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
285e0 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
285f0 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
28600 74 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20  this class...   
28610 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
28620 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
28630 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
28640 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
28650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
28660 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
28670 51 4c 69 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20  QLiteModule" /> 
28680 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
28690 75 73 65 64 20 74 6f 20 70 72 6f 76 69 64 65 0d  used to provide.
286a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
286b0 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   an implementati
286c0 6f 6e 20 6f 66 20 74 68 65 20 3c 73 65 65 20 63  on of the <see c
286d0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
286e0 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20  veModule" />..  
286f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e            /// in
28700 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20 20 20  terface...      
28710 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
28720 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
28730 70 75 62 6c 69 63 20 53 51 4c 69 74 65 4e 61 74  public SQLiteNat
28740 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20 20 20  iveModule(..    
28750 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
28760 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d  teModule module.
28770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28780 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
28790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
287a0 20 20 20 74 68 69 73 2e 6d 6f 64 75 6c 65 20 3d     this.module =
287b0 20 6d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20 20   module;..      
287c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
287d0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
287e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
287f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28830 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
28840 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
28850 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
28860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28870 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
28880 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 74           /// Set
28890 73 20 74 68 65 20 74 61 62 6c 65 20 65 72 72 6f  s the table erro
288a0 72 20 6d 65 73 73 61 67 65 20 74 6f 20 6f 6e 65  r message to one
288b0 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
288c0 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  the native..    
288d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 6d 6f 64 75          /// modu
288e0 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
288f0 6e 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  n is not availab
28900 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...           
28910 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
28920 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28930 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
28940 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  tab">..         
28950 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76     /// The nativ
28960 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  e pointer to the
28970 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65   sqlite3_vtab de
28980 72 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e  rived structure.
28990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
289a0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
289b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74          /// <ret
289c0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
289d0 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
289e0 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22 53   of <see cref="S
289f0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
28a00 72 72 6f 72 22 20 2f 3e 2e 0d 0a 20 20 20 20 20  rror" />...     
28a10 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
28a20 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
28a30 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28a40 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
28a50 65 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  e ModuleNotAvail
28a60 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 0d  ableTableError(.
28a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a80 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20   IntPtr pVtab.. 
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
28aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28ac0 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28 6e   SetTableError(n
28ad0 75 6c 6c 2c 20 70 56 74 61 62 2c 20 44 65 66 61  ull, pVtab, Defa
28ae0 75 6c 74 4c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20  ultLogErrors,.. 
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b00 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69     ModuleNotAvai
28b10 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73 73 61 67  lableErrorMessag
28b20 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
28b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
28b40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
28b50 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ror;..          
28b60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28b70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28bc0 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
28bd0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
28be0 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 74 61   /// Sets the ta
28bf0 62 6c 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ble error messag
28c00 65 20 74 6f 20 6f 6e 65 20 74 68 61 74 20 69 6e  e to one that in
28c10 64 69 63 61 74 65 73 20 74 68 65 20 6e 61 74 69  dicates the nati
28c20 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ve..            
28c30 2f 2f 2f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  /// module imple
28c40 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 6e 6f 74  mentation is not
28c50 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...   
28c60 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
28c70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
28c80 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
28c90 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d  name="pCursor">.
28ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28cb0 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   The native poin
28cc0 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
28cd0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 64  e3_vtab_cursor d
28ce0 65 72 69 76 65 64 0d 0a 20 20 20 20 20 20 20 20  erived..        
28cf0 20 20 20 20 2f 2f 2f 20 73 74 72 75 63 74 75 72      /// structur
28d00 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
28d10 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
28d20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72            /// <r
28d30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
28d40 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c       /// The val
28d50 75 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d  ue of <see cref=
28d60 22 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  "SQLiteErrorCode
28d70 2e 45 72 72 6f 72 22 20 2f 3e 2e 0d 0a 20 20 20  .Error" />...   
28d80 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
28d90 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
28da0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28db0 74 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43  tic SQLiteErrorC
28dc0 6f 64 65 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61  ode ModuleNotAva
28dd0 69 6c 61 62 6c 65 43 75 72 73 6f 72 45 72 72 6f  ilableCursorErro
28de0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
28df0 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72 73      IntPtr pCurs
28e00 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
28e10 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
28e20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28e30 20 20 20 20 20 20 53 65 74 43 75 72 73 6f 72 45        SetCursorE
28e40 72 72 6f 72 28 6e 75 6c 6c 2c 20 70 43 75 72 73  rror(null, pCurs
28e50 6f 72 2c 20 44 65 66 61 75 6c 74 4c 6f 67 45 72  or, DefaultLogEr
28e60 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  rors,..         
28e70 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
28e80 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 45 72 72  eNotAvailableErr
28e90 6f 72 4d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  orMessage);.... 
28ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28eb0 65 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f  eturn SQLiteErro
28ec0 72 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20  rCode.Error;..  
28ed0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
28ee0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
28ef0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
28f00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28f50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 53        #region IS
28f60 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
28f70 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20  e Members..     
28f80 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
28f90 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
28fa0 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
28fb0 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
28fc0 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72  NativeModule.xCr
28fd0 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  eate" /> method.
28fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28ff0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
29000 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
29010 61 72 61 6d 20 6e 61 6d 65 3d 22 70 44 62 22 3e  aram name="pDb">
29020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29030 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
29040 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
29050 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
29060 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
29070 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
29080 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29090 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
290a0 61 6d 65 3d 22 70 41 75 78 22 3e 0d 0a 20 20 20  ame="pAux">..   
290b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
290c0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
290d0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
290e0 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
290f0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
29100 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
29110 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29120 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
29130 61 72 67 63 22 3e 0d 0a 20 20 20 20 20 20 20 20  argc">..        
29140 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
29150 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
29160 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
29170 43 72 65 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Create" /> metho
29180 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
29190 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
291a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
291b0 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 76 22  aram name="argv"
291c0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
291d0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
291e0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
291f0 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74  iveModule.xCreat
29200 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  e" /> method... 
29210 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
29220 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
29230 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29240 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
29250 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
29260 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
29270 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
29280 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f  odule.xCreate" /
29290 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
292a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
292b0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
292c0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
292d0 3d 22 70 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20  ="pError">..    
292e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
292f0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
29300 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
29310 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20 6d  le.xCreate" /> m
29320 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
29330 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
29340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29350 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
29360 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
29370 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29380 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
29390 75 6c 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 20  ule.xCreate" /> 
293a0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
293b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
293c0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
293d0 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
293e0 72 6f 72 43 6f 64 65 20 78 43 72 65 61 74 65 28  rorCode xCreate(
293f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29400 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
29420 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
29440 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
29450 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
29460 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
29470 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
29480 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
29490 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
294a0 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
294b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
294c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
294e0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
294f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29500 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
29510 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29520 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29540 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
29550 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
29560 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20  rFromString(..  
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
29590 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
295a0 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sage);....      
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
295c0 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
295d0 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
295e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
295f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29600 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
29610 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20  xCreate(..      
29620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
29630 62 2c 20 70 41 75 78 2c 20 61 72 67 63 2c 20 61  b, pAux, argc, a
29640 72 67 76 2c 20 72 65 66 20 70 56 74 61 62 2c 20  rgv, ref pVtab, 
29650 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20  ref pError);..  
29660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
29680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
296a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
296b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
296c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
296d0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
296e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
296f0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
29700 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
29710 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e  ule.xConnect" />
29720 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
29730 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
29740 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
29750 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
29760 65 3d 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20  e="pDb">..      
29770 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
29780 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
29790 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
297a0 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65  .xConnect" /> me
297b0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
297c0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
297d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
297e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41   <param name="pA
297f0 75 78 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ux">..          
29800 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
29810 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
29820 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f  NativeModule.xCo
29830 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64  nnect" /> method
29840 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29850 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
29860 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
29870 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e  ram name="argc">
29880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29890 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
298a0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
298b0 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
298c0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
298d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
298e0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
298f0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29900 6e 61 6d 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20  name="argv">..  
29910 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
29920 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29930 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29940 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f  dule.xConnect" /
29950 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
29960 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
29970 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
29980 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
29990 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
299a0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
299b0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
299c0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
299d0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
299e0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
299f0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
29a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29a10 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
29a20 45 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  Error">..       
29a30 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
29a40 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
29a50 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
29a60 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  xConnect" /> met
29a70 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
29a80 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
29a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
29aa0 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20  <returns>..     
29ab0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
29ac0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
29ad0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
29ae0 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  e.xConnect" /> m
29af0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
29b00 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
29b10 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
29b20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
29b30 6f 72 43 6f 64 65 20 78 43 6f 6e 6e 65 63 74 28  orCode xConnect(
29b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b50 20 20 49 6e 74 50 74 72 20 70 44 62 2c 0d 0a 20    IntPtr pDb,.. 
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
29b70 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
29b90 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20 20 20   argc,..        
29ba0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 61          IntPtr a
29bb0 72 67 76 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgv,..          
29bc0 20 20 20 20 20 20 72 65 66 20 49 6e 74 50 74 72        ref IntPtr
29bd0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
29be0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
29bf0 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
29c00 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
29c10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29c30 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
29c40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29c50 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
29c60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29c70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c90 20 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65   pError = SQLite
29ca0 53 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74  String.Utf8IntPt
29cb0 72 46 72 6f 6d 53 74 72 69 6e 67 28 0d 0a 20 20  rFromString(..  
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cd0 20 20 20 20 20 20 4d 6f 64 75 6c 65 4e 6f 74 41        ModuleNotA
29ce0 76 61 69 6c 61 62 6c 65 45 72 72 6f 72 4d 65 73  vailableErrorMes
29cf0 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sage);....      
29d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29d10 74 75 72 6e 20 53 51 4c 69 74 65 45 72 72 6f 72  turn SQLiteError
29d20 43 6f 64 65 2e 45 72 72 6f 72 3b 0d 0a 20 20 20  Code.Error;..   
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d50 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
29d60 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20  xConnect(..     
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
29d80 44 62 2c 20 70 41 75 78 2c 20 61 72 67 63 2c 20  Db, pAux, argc, 
29d90 61 72 67 76 2c 20 72 65 66 20 70 56 74 61 62 2c  argv, ref pVtab,
29da0 20 72 65 66 20 70 45 72 72 6f 72 29 3b 0d 0a 20   ref pError);.. 
29db0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29e10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29e20 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
29e30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
29e40 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
29e50 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
29e60 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 22  dule.xBestIndex"
29e70 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
29e80 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73           /// </s
29e90 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
29ea0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
29eb0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
29ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
29ed0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
29ee0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
29ef0 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
29f00 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
29f10 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
29f20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29f30 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
29f40 61 6d 65 3d 22 70 49 6e 64 65 78 22 3e 0d 0a 20  ame="pIndex">.. 
29f50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
29f60 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
29f70 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
29f80 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78  odule.xBestIndex
29f90 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
29fa0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
29fb0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
29fc0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
29fd0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
29fe0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
29ff0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2a000 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49  iveModule.xBestI
2a010 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  ndex" /> method.
2a020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a030 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2a040 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a050 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2a060 20 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20   xBestIndex(..  
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2a080 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
2a090 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74               Int
2a0a0 50 74 72 20 70 49 6e 64 65 78 0d 0a 20 20 20 20  Ptr pIndex..    
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2a0c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a0e0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2a0f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a100 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2a110 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a130 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2a140 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2a150 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2a160 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a170 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 42 65 73 74  urn module.xBest
2a180 49 6e 64 65 78 28 70 56 74 61 62 2c 20 70 49 6e  Index(pVtab, pIn
2a190 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
2a1a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a1b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2a200 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2a210 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2a220 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2a230 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2a240 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 69  NativeModule.xDi
2a250 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d 65 74  sconnect" /> met
2a260 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2a270 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2a280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a290 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
2a2a0 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  Vtab">..        
2a2b0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2a2c0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2a2d0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2a2e0 44 69 73 63 6f 6e 6e 65 63 74 22 20 2f 3e 20 6d  Disconnect" /> m
2a2f0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a300 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a320 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2a330 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a340 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a350 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a360 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65 63 74 22  ule.xDisconnect"
2a370 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2a380 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2a390 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2a3a0 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2a3b0 74 65 45 72 72 6f 72 43 6f 64 65 20 78 44 69 73  teErrorCode xDis
2a3c0 63 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20 20 20  connect(..      
2a3d0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2a3e0 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20   pVtab..        
2a3f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2a400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a410 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2a420 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2a430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a440 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2a450 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2a460 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a470 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2a480 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56  bleTableError(pV
2a490 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
2a4a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a4b0 6d 6f 64 75 6c 65 2e 78 44 69 73 63 6f 6e 6e 65  module.xDisconne
2a4c0 63 74 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  ct(pVtab);..    
2a4d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a4e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2a540 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2a550 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2a560 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2a570 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2a580 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d  e.xDestroy" /> m
2a590 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2a5a0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2a5b0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2a5c0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2a5d0 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20  "pVtab">..      
2a5e0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2a5f0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2a600 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2a610 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20 6d 65  .xDestroy" /> me
2a620 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2a630 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2a640 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a650 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2a660 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2a670 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2a680 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2a690 6c 65 2e 78 44 65 73 74 72 6f 79 22 20 2f 3e 20  le.xDestroy" /> 
2a6a0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2a6b0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2a6c0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2a6d0 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2a6e0 72 6f 72 43 6f 64 65 20 78 44 65 73 74 72 6f 79  rorCode xDestroy
2a6f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a700 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
2a710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a720 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2a730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a740 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f     // CheckDispo
2a750 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2a760 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f            if (mo
2a770 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  dule == null).. 
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65     return Module
2a7a0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62 6c  NotAvailableTabl
2a7b0 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a  eError(pVtab);..
2a7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7d0 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e    return module.
2a7e0 78 44 65 73 74 72 6f 79 28 70 56 74 61 62 29 3b  xDestroy(pVtab);
2a7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a850 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a860 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2a870 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a880 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2a890 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2a8a0 65 4d 6f 64 75 6c 65 2e 78 4f 70 65 6e 22 20 2f  eModule.xOpen" /
2a8b0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2a8c0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2a8d0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2a8e0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2a8f0 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20  me="pVtab">..   
2a900 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2a910 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2a920 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2a930 75 6c 65 2e 78 4f 70 65 6e 22 20 2f 3e 20 6d 65  ule.xOpen" /> me
2a940 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2a950 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2a960 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2a970 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43   <param name="pC
2a980 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  ursor">..       
2a990 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2a9a0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2a9b0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2a9c0 78 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  xOpen" /> method
2a9d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a9e0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2a9f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65           /// <re
2aa00 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2aa10 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2aa20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2aa30 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2aa40 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  Open" /> method.
2aa50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2aa60 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
2aa70 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2aa80 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2aa90 20 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20   xOpen(..       
2aaa0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2aab0 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20  pVtab,..        
2aac0 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74 50          ref IntP
2aad0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2aaf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2ab10 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2ab20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ab30 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
2ab40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ab60 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76  turn ModuleNotAv
2ab70 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72 6f  ailableTableErro
2ab80 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20  r(pVtab);....   
2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2aba0 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e  urn module.xOpen
2abb0 28 70 56 74 61 62 2c 20 72 65 66 20 70 43 75 72  (pVtab, ref pCur
2abc0 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  sor);..         
2abd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2abe0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ac30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d         /// <summ
2ac40 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2ac50 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73    /// See the <s
2ac60 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65  ee cref="ISQLite
2ac70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c  NativeModule.xCl
2ac80 6f 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ose" /> method..
2ac90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2aca0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2acb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2acc0 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
2acd0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2ace0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2acf0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2ad00 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f  ativeModule.xClo
2ad10 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
2ad20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ad30 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2ad40 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2ad50 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2ad60 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2ad70 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2ad80 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f  ativeModule.xClo
2ad90 73 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  se" /> method...
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2adb0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2adc0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2add0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2ade0 43 6c 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20  Close(..        
2adf0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2ae00 43 75 72 73 6f 72 0d 0a 20 20 20 20 20 20 20 20  Cursor..        
2ae10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2ae20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ae30 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65            // Che
2ae40 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
2ae50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae60 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
2ae70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2ae80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ae90 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61   ModuleNotAvaila
2aea0 62 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70  bleCursorError(p
2aeb0 43 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  Cursor);....    
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2aed0 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  rn module.xClose
2aee0 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20 20 20 20  (pCursor);..    
2aef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2af00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2af50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2af60 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2af70 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2af80 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2af90 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2afa0 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2afb0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2afc0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2afd0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2afe0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2aff0 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20 20 20  pCursor">..     
2b000 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b010 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b020 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b030 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2b040 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b050 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b060 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b070 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64   <param name="id
2b080 78 4e 75 6d 22 3e 0d 0a 20 20 20 20 20 20 20 20  xNum">..        
2b090 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2b0a0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2b0b0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2b0c0 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f  Filter" /> metho
2b0d0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2b0e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2b0f0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2b100 61 72 61 6d 20 6e 61 6d 65 3d 22 69 64 78 53 74  aram name="idxSt
2b110 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2b120 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2b130 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b140 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6c  ativeModule.xFil
2b150 74 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ter" /> method..
2b160 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b170 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20   </param>..     
2b180 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
2b190 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a  m name="argc">..
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b1b0 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2b1c0 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2b1d0 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 22 20  Module.xFilter" 
2b1e0 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2b1f0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
2b200 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ram>..          
2b210 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2b220 65 3d 22 61 72 67 76 22 3e 0d 0a 20 20 20 20 20  e="argv">..     
2b230 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2b240 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2b250 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2b260 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d 65  e.xFilter" /> me
2b270 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2b280 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2b290 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b2a0 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
2b2b0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2b2c0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2b2d0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2b2e0 6c 65 2e 78 46 69 6c 74 65 72 22 20 2f 3e 20 6d  le.xFilter" /> m
2b2f0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2b300 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
2b310 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2b320 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72  public SQLiteErr
2b330 6f 72 43 6f 64 65 20 78 46 69 6c 74 65 72 28 0d  orCode xFilter(.
2b340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b350 20 49 6e 74 50 74 72 20 70 43 75 72 73 6f 72 2c   IntPtr pCursor,
2b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b370 20 20 69 6e 74 20 69 64 78 4e 75 6d 2c 0d 0a 20    int idxNum,.. 
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2b390 6e 74 50 74 72 20 69 64 78 53 74 72 2c 0d 0a 20  ntPtr idxStr,.. 
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b3b0 6e 74 20 61 72 67 63 2c 0d 0a 20 20 20 20 20 20  nt argc,..      
2b3c0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2b3d0 20 61 72 67 76 0d 0a 20 20 20 20 20 20 20 20 20   argv..         
2b3e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2b3f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b400 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63           // Chec
2b410 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b430 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75  if (module == nu
2b440 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2b450 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b460 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62  ModuleNotAvailab
2b470 6c 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43  leCursorError(pC
2b480 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ursor);....     
2b490 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b4a0 6e 20 6d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72  n module.xFilter
2b4b0 28 70 43 75 72 73 6f 72 2c 20 69 64 78 4e 75 6d  (pCursor, idxNum
2b4c0 2c 20 69 64 78 53 74 72 2c 20 61 72 67 63 2c 20  , idxStr, argc, 
2b4d0 61 72 67 76 29 3b 0d 0a 20 20 20 20 20 20 20 20  argv);..        
2b4e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b4f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b530 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b540 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2b550 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2b560 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b570 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b580 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e  eNativeModule.xN
2b590 65 78 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ext" /> method..
2b5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b5b0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2b5c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2b5d0 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f  ram name="pCurso
2b5e0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r">..           
2b5f0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2b600 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2b610 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78  ativeModule.xNex
2b620 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2b630 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2b640 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2b650 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2b660 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2b670 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2b680 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2b690 74 69 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74  tiveModule.xNext
2b6a0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2b6b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2b6c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2b6d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c        public SQL
2b6e0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78 4e 65  iteErrorCode xNe
2b6f0 78 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt(..           
2b700 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2b710 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
2b720 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2b730 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b740 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2b750 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b770 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2b780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b790 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2b7a0 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2b7b0 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72  CursorError(pCur
2b7c0 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sor);....       
2b7d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b7e0 6d 6f 64 75 6c 65 2e 78 4e 65 78 74 28 70 43 75  module.xNext(pCu
2b7f0 72 73 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rsor);..        
2b800 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b810 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b850 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b860 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2b870 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2b880 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2b890 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2b8a0 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45  eNativeModule.xE
2b8b0 6f 66 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  of" /> method...
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2b8d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2b8e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2b8f0 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
2b900 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2b910 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2b920 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2b930 74 69 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22  tiveModule.xEof"
2b940 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2b950 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2b960 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2b970 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2b980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b990 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2b9a0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2b9b0 76 65 4d 6f 64 75 6c 65 2e 78 45 6f 66 22 20 2f  veModule.xEof" /
2b9c0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2b9d0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74         /// </ret
2b9e0 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20  urns>..         
2b9f0 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 78 45     public int xE
2ba00 6f 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  of(..           
2ba10 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2ba20 73 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sor..           
2ba30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2ba40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ba50 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2ba60 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2ba80 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2ba90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2baa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2bab0 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c 65            Module
2bac0 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75 72 73  NotAvailableCurs
2bad0 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f 72 29  orError(pCursor)
2bae0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2baf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2bb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bb20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2bb30 64 75 6c 65 2e 78 45 6f 66 28 70 43 75 72 73 6f  dule.xEof(pCurso
2bb40 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2bb50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2bb60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bba0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2bbb0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2bbc0 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2bbd0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2bbe0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2bbf0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2bc00 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bc20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2bc30 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2bc40 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72 73 6f 72  am name="pCursor
2bc50 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2bc60 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2bc70 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2bc80 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75  tiveModule.xColu
2bc90 6d 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  mn" /> method...
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2bcb0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2bcc0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2bcd0 20 6e 61 6d 65 3d 22 70 43 6f 6e 74 65 78 74 22   name="pContext"
2bce0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2bcf0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2bd00 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2bd10 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d  iveModule.xColum
2bd20 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
2bd30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2bd40 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2bd50 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2bd60 6e 61 6d 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20  name="index">.. 
2bd70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2bd80 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2bd90 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2bda0 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20 2f  odule.xColumn" /
2bdb0 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2bdc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2bdd0 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2bde0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2bdf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2be00 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2be10 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2be20 4d 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 22 20  Module.xColumn" 
2be30 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2be40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2be50 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2be60 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2be70 65 45 72 72 6f 72 43 6f 64 65 20 78 43 6f 6c 75  eErrorCode xColu
2be80 6d 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mn(..           
2be90 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2bea0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
2beb0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 6f        IntPtr pCo
2bec0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20  ntext,..        
2bed0 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
2bee0 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  x..             
2bef0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2bf00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bf10 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73       // CheckDis
2bf20 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bf40 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  module == null).
2bf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf60 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75       return Modu
2bf70 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 43 75  leNotAvailableCu
2bf80 72 73 6f 72 45 72 72 6f 72 28 70 43 75 72 73 6f  rsorError(pCurso
2bf90 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2bfa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2bfb0 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 28 70 43 75  dule.xColumn(pCu
2bfc0 72 73 6f 72 2c 20 70 43 6f 6e 74 65 78 74 2c 20  rsor, pContext, 
2bfd0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
2bfe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bff0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c040 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2c050 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2c060 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2c070 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2c080 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2c090 52 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64  RowId" /> method
2c0a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c0b0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2c0c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c0d0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 75 72  param name="pCur
2c0e0 73 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 20  sor">..         
2c0f0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2c100 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2c110 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52  eNativeModule.xR
2c120 6f 77 49 64 22 20 2f 3e 20 6d 65 74 68 6f 64 2e  owId" /> method.
2c130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c140 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2c150 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2c160 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64 22 3e  am name="rowId">
2c170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c180 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c190 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c1a0 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
2c1b0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2c1c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2c1d0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2c1e0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2c1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c200 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c210 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c220 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 22  veModule.xRowId"
2c230 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2c240 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2c250 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2c260 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2c270 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 77  teErrorCode xRow
2c280 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
2c290 20 20 20 20 20 49 6e 74 50 74 72 20 70 43 75 72       IntPtr pCur
2c2a0 73 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sor,..          
2c2b0 20 20 20 20 20 20 72 65 66 20 6c 6f 6e 67 20 72        ref long r
2c2c0 6f 77 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  owId..          
2c2d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2c2e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c2f0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2c300 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c320 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2c330 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2c350 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2c360 65 43 75 72 73 6f 72 45 72 72 6f 72 28 70 43 75  eCursorError(pCu
2c370 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsor);....      
2c380 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c390 20 6d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 28 70   module.xRowId(p
2c3a0 43 75 72 73 6f 72 2c 20 72 65 66 20 72 6f 77 49  Cursor, ref rowI
2c3b0 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
2c3c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c3d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c410 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2c420 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2c430 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2c440 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2c450 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2c460 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2c470 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2c480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c490 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2c4a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
2c4b0 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e  am name="pVtab">
2c4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2c4d0 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2c4e0 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2c4f0 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74 65  veModule.xUpdate
2c500 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2c510 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2c520 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2c530 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2c540 61 6d 65 3d 22 61 72 67 63 22 3e 0d 0a 20 20 20  ame="argc">..   
2c550 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2c560 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2c570 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2c580 75 6c 65 2e 78 55 70 64 61 74 65 22 20 2f 3e 20  ule.xUpdate" /> 
2c590 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2c5a0 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
2c5b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2c5c0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2c5d0 61 72 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20  argv">..        
2c5e0 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2c5f0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2c600 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2c610 55 70 64 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f  Update" /> metho
2c620 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2c630 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2c640 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70            /// <p
2c650 61 72 61 6d 20 6e 61 6d 65 3d 22 72 6f 77 49 64  aram name="rowId
2c660 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2c670 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2c680 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2c690 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61  tiveModule.xUpda
2c6a0 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  te" /> method...
2c6b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2c6c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2c6d0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2c6e0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2c6f0 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2c700 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2c710 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64  ativeModule.xUpd
2c720 61 74 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ate" /> method..
2c730 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2c740 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2c750 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2c760 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2c770 78 55 70 64 61 74 65 28 0d 0a 20 20 20 20 20 20  xUpdate(..      
2c780 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2c790 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2c7a0 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
2c7b0 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
2c7c0 20 20 20 20 49 6e 74 50 74 72 20 61 72 67 76 2c      IntPtr argv,
2c7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7e0 20 20 72 65 66 20 6c 6f 6e 67 20 72 6f 77 49 64    ref long rowId
2c7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c800 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2c810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c820 20 20 20 20 2f 2f 20 43 68 65 63 6b 44 69 73 70      // CheckDisp
2c830 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
2c840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6d             if (m
2c850 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c870 20 20 20 20 72 65 74 75 72 6e 20 4d 6f 64 75 6c      return Modul
2c880 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2c890 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2c8a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c8b0 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75 6c 65     return module
2c8c0 2e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  .xUpdate(pVtab, 
2c8d0 61 72 67 63 2c 20 61 72 67 76 2c 20 72 65 66 20  argc, argv, ref 
2c8e0 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
2c8f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c900 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c940 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c950 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75           /// <su
2c960 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2c970 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2c980 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2c990 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2c9a0 42 65 67 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  Begin" /> method
2c9b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2c9c0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2c9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2c9e0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61  param name="pVta
2c9f0 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b">..           
2ca00 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2ca10 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2ca20 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
2ca30 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  in" /> method...
2ca40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ca50 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2ca60 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2ca70 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2ca80 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2ca90 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2caa0 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 67  ativeModule.xBeg
2cab0 69 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  in" /> method...
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cad0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
2cae0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
2caf0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 78  QLiteErrorCode x
2cb00 42 65 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20  Begin(..        
2cb10 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2cb20 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2cb30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2cb40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cb50 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2cb60 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2cb80 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2cb90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2cba0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2cbb0 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2cbc0 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2cbd0 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2cbe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2cbf0 64 75 6c 65 2e 78 42 65 67 69 6e 28 70 56 74 61  dule.xBegin(pVta
2cc00 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  b);..           
2cc10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2cc20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2cc70 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2cc80 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2cc90 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2cca0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2ccb0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 79 6e 63  tiveModule.xSync
2ccc0 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2ccd0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2cce0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
2ccf0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2cd00 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cd20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2cd30 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2cd40 4d 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e  Module.xSync" />
2cd50 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2cd60 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2cd70 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2cd80 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2cd90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2cda0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2cdb0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2cdc0 6f 64 75 6c 65 2e 78 53 79 6e 63 22 20 2f 3e 20  odule.xSync" /> 
2cdd0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2cde0 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72       /// </retur
2cdf0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2ce00 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2ce10 72 6f 72 43 6f 64 65 20 78 53 79 6e 63 28 0d 0a  rorCode xSync(..
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce30 49 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20  IntPtr pVtab..  
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2ce50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce70 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2ce80 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2ce90 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2cea0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cec0 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2ced0 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2cee0 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2cf00 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 53 79  eturn module.xSy
2cf10 6e 63 28 70 56 74 61 62 29 3b 0d 0a 20 20 20 20  nc(pVtab);..    
2cf20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2cf30 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cf80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2cf90 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2cfa0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2cfb0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2cfc0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2cfd0 65 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65  e.xCommit" /> me
2cfe0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2cff0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2d000 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2d010 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2d020 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2d030 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2d040 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2d050 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2d060 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65 74 68  xCommit" /> meth
2d070 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d080 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d090 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d0a0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
2d0b0 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68        /// See th
2d0c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
2d0d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
2d0e0 2e 78 43 6f 6d 6d 69 74 22 20 2f 3e 20 6d 65 74  .xCommit" /> met
2d0f0 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
2d100 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2d110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2d120 62 6c 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72  blic SQLiteError
2d130 43 6f 64 65 20 78 43 6f 6d 6d 69 74 28 0d 0a 20  Code xCommit(.. 
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2d150 6e 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20  ntPtr pVtab..   
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2d170 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d190 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  / CheckDisposed(
2d1a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d1b0 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
2d1c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d1e0 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41  eturn ModuleNotA
2d1f0 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72 72  vailableTableErr
2d200 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20  or(pVtab);....  
2d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d220 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 43 6f 6d  turn module.xCom
2d230 6d 69 74 28 70 56 74 61 62 29 3b 0d 0a 20 20 20  mit(pVtab);..   
2d240 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d250 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d2b0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2d2c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d2d0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d2e0 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d2f0 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
2d300 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2d310 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2d320 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2d330 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d340 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2d350 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d360 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d370 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d380 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22 20 2f 3e  le.xRollback" />
2d390 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2d3a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2d3b0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2d3c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2d3d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2d3e0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2d3f0 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2d400 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 22  odule.xRollback"
2d410 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2d420 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2d430 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2d440 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2d450 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c  teErrorCode xRol
2d460 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
2d470 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
2d480 56 74 61 62 0d 0a 20 20 20 20 20 20 20 20 20 20  Vtab..          
2d490 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2d4a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d4b0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2d4c0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d4e0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2d4f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2d500 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2d510 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2d520 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2d530 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2d540 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2d550 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 28 70  dule.xRollback(p
2d560 56 74 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20  Vtab);..        
2d570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d580 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2d590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d5c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d5d0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2d5e0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20  mary>..         
2d5f0 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c     /// See the <
2d600 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
2d610 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46  eNativeModule.xF
2d620 69 6e 64 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20  indFunction" /> 
2d630 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2d640 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2d650 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2d660 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2d670 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2d680 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d690 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d6a0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d6b0 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
2d6c0 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2d6d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2d6e0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2d6f0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2d700 6d 65 3d 22 6e 41 72 67 22 3e 0d 0a 20 20 20 20  me="nArg">..    
2d710 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2d720 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2d730 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2d740 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2d750 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
2d760 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f            /// </
2d770 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
2d780 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2d790 61 6d 65 3d 22 7a 4e 61 6d 65 22 3e 0d 0a 20 20  ame="zName">..  
2d7a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65            /// Se
2d7b0 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  e the <see cref=
2d7c0 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
2d7d0 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69  dule.xFindFuncti
2d7e0 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  on" /> method...
2d7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2d800 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2d810 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2d820 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 22   name="callback"
2d830 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2d840 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2d850 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2d860 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46  iveModule.xFindF
2d870 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68  unction" /> meth
2d880 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2d890 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d8a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2d8b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 43 6c 69  param name="pCli
2d8c0 65 6e 74 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  entData">..     
2d8d0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2d8e0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2d8f0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2d900 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e 22  e.xFindFunction"
2d910 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2d920 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70           /// </p
2d930 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20  aram>..         
2d940 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
2d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2d960 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63  / See the <see c
2d970 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
2d980 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75  veModule.xFindFu
2d990 6e 63 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f  nction" /> metho
2d9a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d9b0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
2d9c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2d9d0 69 63 20 69 6e 74 20 78 46 69 6e 64 46 75 6e 63  ic int xFindFunc
2d9e0 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
2d9f0 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
2da00 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
2da10 20 20 20 20 20 20 69 6e 74 20 6e 41 72 67 2c 0d        int nArg,.
2da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da30 20 49 6e 74 50 74 72 20 7a 4e 61 6d 65 2c 0d 0a   IntPtr zName,..
2da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da50 72 65 66 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  ref SQLiteCallba
2da60 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
2da70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2da80 66 20 49 6e 74 50 74 72 20 70 43 6c 69 65 6e 74  f IntPtr pClient
2da90 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
2daa0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2dab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dac0 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2dad0 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2daf0 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2db00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2db10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2db20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 64 75 6c             Modul
2db30 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65 54 61 62  eNotAvailableTab
2db40 6c 65 45 72 72 6f 72 28 70 56 74 61 62 29 3b 0d  leError(pVtab);.
2db50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2db60 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
2db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2db90 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64 75       return modu
2dba0 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
2dbb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2dbc0 20 20 20 20 20 20 20 70 56 74 61 62 2c 20 6e 41         pVtab, nA
2dbd0 72 67 2c 20 7a 4e 61 6d 65 2c 20 72 65 66 20 63  rg, zName, ref c
2dbe0 61 6c 6c 62 61 63 6b 2c 20 72 65 66 20 70 43 6c  allback, ref pCl
2dbf0 69 65 6e 74 44 61 74 61 29 3b 0d 0a 20 20 20 20  ientData);..    
2dc00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dc10 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2dc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2dc60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2dc70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2dc80 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2dc90 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2dca0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2dcb0 65 2e 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65  e.xRename" /> me
2dcc0 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2dcd0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2dce0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2dcf0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2dd00 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20  pVtab">..       
2dd10 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65       /// See the
2dd20 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
2dd30 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
2dd40 78 52 65 6e 61 6d 65 22 20 2f 3e 20 6d 65 74 68  xRename" /> meth
2dd50 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
2dd60 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2dd70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2dd80 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4e 65 77  param name="zNew
2dd90 22 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ">..            
2dda0 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2ddb0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2ddc0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61  tiveModule.xRena
2ddd0 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a  me" /> method...
2dde0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2ddf0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2de00 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
2de10 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns>..           
2de20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65   /// See the <se
2de30 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e  e cref="ISQLiteN
2de40 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e  ativeModule.xRen
2de50 61 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  ame" /> method..
2de60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2de70 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
2de80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2de90 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2dea0 78 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20  xRename(..      
2deb0 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2dec0 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2ded0 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
2dee0 7a 4e 65 77 0d 0a 20 20 20 20 20 20 20 20 20 20  zNew..          
2def0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2df00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2df10 20 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b          // Check
2df20 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2df40 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c  f (module == nul
2df50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2df60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
2df70 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c  oduleNotAvailabl
2df80 65 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61  eTableError(pVta
2df90 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  b);....         
2dfa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f         return mo
2dfb0 64 75 6c 65 2e 78 52 65 6e 61 6d 65 28 70 56 74  dule.xRename(pVt
2dfc0 61 62 2c 20 7a 4e 65 77 29 3b 0d 0a 20 20 20 20  ab, zNew);..    
2dfd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dfe0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2e030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e040 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
2e050 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2e060 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2e070 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2e080 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f 3e  e.xSavepoint" />
2e090 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2e0a0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
2e0b0 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20  ary>..          
2e0c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2e0d0 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20  e="pVtab">..    
2e0e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2e0f0 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2e100 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2e110 6c 65 2e 78 53 61 76 65 70 6f 69 6e 74 22 20 2f  le.xSavepoint" /
2e120 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  > method...     
2e130 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
2e140 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  am>..           
2e150 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2e160 3d 22 69 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a  ="iSavepoint">..
2e170 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2e180 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65  See the <see cre
2e190 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
2e1a0 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69 6e  Module.xSavepoin
2e1b0 74 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  t" /> method... 
2e1c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c             /// <
2e1d0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
2e1e0 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
2e1f0 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s>..            
2e200 2f 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65  /// See the <see
2e210 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
2e220 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
2e230 70 6f 69 6e 74 22 20 2f 3e 20 6d 65 74 68 6f 64  point" /> method
2e240 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e250 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2e260 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2e270 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
2e280 65 20 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20  e xSavepoint(.. 
2e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
2e2a0 6e 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20  ntPtr pVtab,..  
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2e2c0 74 20 69 53 61 76 65 70 6f 69 6e 74 0d 0a 20 20  t iSavepoint..  
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2e2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e300 2f 2f 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64  // CheckDisposed
2e310 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2e320 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c         if (modul
2e330 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e350 72 65 74 75 72 6e 20 4d 6f 64 75 6c 65 4e 6f 74  return ModuleNot
2e360 41 76 61 69 6c 61 62 6c 65 54 61 62 6c 65 45 72  AvailableTableEr
2e370 72 6f 72 28 70 56 74 61 62 29 3b 0d 0a 0d 0a 20  ror(pVtab);.... 
2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e390 65 74 75 72 6e 20 6d 6f 64 75 6c 65 2e 78 53 61  eturn module.xSa
2e3a0 76 65 70 6f 69 6e 74 28 70 56 74 61 62 2c 20 69  vepoint(pVtab, i
2e3b0 53 61 76 65 70 6f 69 6e 74 29 3b 0d 0a 20 20 20  Savepoint);..   
2e3c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e3d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2e420 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e430 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2e440 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20          /// See 
2e450 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49  the <see cref="I
2e460 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75  SQLiteNativeModu
2e470 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e 20  le.xRelease" /> 
2e480 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2e490 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
2e4a0 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry>..           
2e4b0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2e4c0 3d 22 70 56 74 61 62 22 3e 0d 0a 20 20 20 20 20  ="pVtab">..     
2e4d0 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65 20 74         /// See t
2e4e0 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
2e4f0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
2e500 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e 20 6d  e.xRelease" /> m
2e510 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e520 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2e530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e540 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
2e550 53 61 76 65 70 6f 69 6e 74 22 3e 0d 0a 20 20 20  Savepoint">..   
2e560 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2e570 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2e580 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2e590 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20 2f 3e  ule.xRelease" />
2e5a0 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2e5b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
2e5c0 6d 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m>..            
2e5d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
2e5e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53             /// S
2e5f0 65 65 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  ee the <see cref
2e600 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
2e610 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 22 20  odule.xRelease" 
2e620 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
2e630 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65          /// </re
2e640 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20  turns>..        
2e650 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
2e660 65 45 72 72 6f 72 43 6f 64 65 20 78 52 65 6c 65  eErrorCode xRele
2e670 61 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ase(..          
2e680 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56 74        IntPtr pVt
2e690 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ab,..           
2e6a0 20 20 20 20 20 69 6e 74 20 69 53 61 76 65 70 6f       int iSavepo
2e6b0 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  int..           
2e6c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2e6d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e6e0 20 20 20 20 20 20 20 2f 2f 20 43 68 65 63 6b 44         // CheckD
2e6f0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e710 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c   (module == null
2e720 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e730 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 6f         return Mo
2e740 64 75 6c 65 4e 6f 74 41 76 61 69 6c 61 62 6c 65  duleNotAvailable
2e750 54 61 62 6c 65 45 72 72 6f 72 28 70 56 74 61 62  TableError(pVtab
2e760 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e770 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 6f 64        return mod
2e780 75 6c 65 2e 78 52 65 6c 65 61 73 65 28 70 56 74  ule.xRelease(pVt
2e790 61 62 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  ab, iSavepoint);
2e7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e7b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e800 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2e810 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2e820 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e830 20 53 65 65 20 74 68 65 20 3c 73 65 65 20 63 72   See the <see cr
2e840 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
2e850 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63  eModule.xRollbac
2e860 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d  kTo" /> method..
2e870 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e880 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2e890 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2e8a0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
2e8b0 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  >..            /
2e8c0 2f 2f 20 53 65 65 20 74 68 65 20 3c 73 65 65 20  // See the <see 
2e8d0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
2e8e0 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62  iveModule.xRollb
2e8f0 61 63 6b 54 6f 22 20 2f 3e 20 6d 65 74 68 6f 64  ackTo" /> method
2e900 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e910 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2e920 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61           /// <pa
2e930 72 61 6d 20 6e 61 6d 65 3d 22 69 53 61 76 65 70  ram name="iSavep
2e940 6f 69 6e 74 22 3e 0d 0a 20 20 20 20 20 20 20 20  oint">..        
2e950 20 20 20 20 2f 2f 2f 20 53 65 65 20 74 68 65 20      /// See the 
2e960 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
2e970 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
2e980 52 6f 6c 6c 62 61 63 6b 54 6f 22 20 2f 3e 20 6d  RollbackTo" /> m
2e990 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
2e9a0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2e9c0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
2e9d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 53 65 65           /// See
2e9e0 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
2e9f0 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  ISQLiteNativeMod
2ea00 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 22  ule.xRollbackTo"
2ea10 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
2ea20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72           /// </r
2ea30 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
2ea40 20 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69       public SQLi
2ea50 74 65 45 72 72 6f 72 43 6f 64 65 20 78 52 6f 6c  teErrorCode xRol
2ea60 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20 20 20 20  lbackTo(..      
2ea70 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72            IntPtr
2ea80 20 70 56 74 61 62 2c 0d 0a 20 20 20 20 20 20 20   pVtab,..       
2ea90 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 53 61           int iSa
2eaa0 76 65 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  vepoint..       
2eab0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2eac0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ead0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 43 68             // Ch
2eae0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
2eaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eb00 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
2eb10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2eb20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2eb30 6e 20 4d 6f 64 75 6c 65 4e 6f 74 41 76 61 69 6c  n ModuleNotAvail
2eb40 61 62 6c 65 54 61 62 6c 65 45 72 72 6f 72 28 70  ableTableError(p
2eb50 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Vtab);....      
2eb60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2eb70 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63   module.xRollbac
2eb80 6b 54 6f 28 70 56 74 61 62 2c 20 69 53 61 76 65  kTo(pVtab, iSave
2eb90 70 6f 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  point);..       
2eba0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ebb0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2ebc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ebf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ec20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
2ec30 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
2ec40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2ec50 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2ec60 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65       /// Dispose
2ec70 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  s of this object
2ec80 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
2ec90 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2eca0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2ecb0 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
2ecc0 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
2ecd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ece0 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
2ecf0 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
2ed00 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
2ed10 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
2ed20 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
2ed30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2ed40 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2ed50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2ed60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2eda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2edb0 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c  egion IDisposabl
2edc0 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62  e "Pattern" Memb
2edd0 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
2ede0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
2edf0 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20  sposed;..       
2ee00 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2ee10 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y>..            
2ee20 2f 2f 2f 20 54 68 72 6f 77 73 20 61 6e 20 3c 73  /// Throws an <s
2ee30 65 65 20 63 72 65 66 3d 22 4f 62 6a 65 63 74 44  ee cref="ObjectD
2ee40 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
2ee50 22 20 2f 3e 20 69 66 20 74 68 69 73 20 6f 62 6a  " /> if this obj
2ee60 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
2ee70 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 68 61   /// instance ha
2ee80 73 20 62 65 65 6e 20 64 69 73 70 6f 73 65 64 2e  s been disposed.
2ee90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2eea0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2eeb0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2eec0 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70  e void CheckDisp
2eed0 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20  osed() /* throw 
2eee0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2eef0 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
2ef00 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
2ef10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
2ef20 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
2ef30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef50 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74  throw new Object
2ef60 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f  DisposedExceptio
2ef70 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2ef90 6f 66 28 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  of(SQLiteNativeM
2efa0 6f 64 75 6c 65 29 2e 4e 61 6d 65 29 3b 0d 0a 20  odule).Name);.. 
2efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2efc0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2efd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2efe0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f030 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73            /// <s
2f040 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2f050 20 20 20 20 20 2f 2f 2f 20 44 69 73 70 6f 73 65       /// Dispose
2f060 73 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74  s of this object
2f070 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
2f080 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
2f090 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
2f0a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2f0b0 61 6d 65 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e  ame="disposing">
2f0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f0d0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
2f0e0 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69  is method is bei
2f0f0 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 74  ng called from t
2f100 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
2f110 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 44  /// <see cref="D
2f120 69 73 70 6f 73 65 28 29 22 20 2f 3e 20 6d 65 74  ispose()" /> met
2f130 68 6f 64 2e 20 20 5a 65 72 6f 20 69 66 20 74 68  hod.  Zero if th
2f140 69 73 20 6d 65 74 68 6f 64 20 69 73 20 62 65 69  is method is bei
2f150 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
2f160 2f 2f 2f 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  /// called from 
2f170 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 2e 0d 0a  the finalizer...
2f180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20              /// 
2f190 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2f1a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a        private /*
2f1b0 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74 75   protected virtu
2f1c0 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f  al */ void Dispo
2f1d0 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
2f1e0 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g)..            
2f1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f200 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
2f210 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f220 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f230 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
2f240 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f260 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
2f270 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
2f280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2a0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
2f2b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
2f2c0 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
2f2d0 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
2f2e0 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
2f2f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
2f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f320 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
2f330 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f350 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2f360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
2f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f390 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e  // release unman
2f3a0 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
2f3b0 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2f400 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 6d    // NOTE: The m
2f430 6f 64 75 6c 65 20 69 73 20 6e 6f 74 20 6f 77 6e  odule is not own
2f440 65 64 20 62 79 20 75 73 3b 20 74 68 65 72 65 66  ed by us; theref
2f450 6f 72 65 2c 20 64 6f 20 6e 6f 74 0d 0a 20 20 20  ore, do not..   
2f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f470 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6f 73   //       dispos
2f480 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  e it...         
2f490 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4b0 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 21 3d     if (module !=
2f4c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 6d 6f 64 75 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  module = null;..
2f4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f500 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
2f510 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2f520 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2f530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2f540 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2f550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2f5b0 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72     #region Destr
2f5c0 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  uctor..         
2f5d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2f5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2f5f0 2f 20 46 69 6e 61 6c 69 7a 65 73 20 74 68 69 73  / Finalizes this
2f600 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2f610 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f620 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2f630 20 20 20 20 20 20 20 20 20 20 20 7e 53 51 4c 69             ~SQLi
2f640 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29  teNativeModule()
2f650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f670 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
2f680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f690 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2f6a0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
2f6b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2f6c0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2f6d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f710 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2f720 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2f730 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
2f740 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2f750 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2f760 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 65  // The default e
2f770 73 74 69 6d 61 74 65 64 20 63 6f 73 74 20 66 6f  stimated cost fo
2f780 72 20 75 73 65 20 77 69 74 68 20 74 68 65 0d 0a  r use with the..
2f790 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
2f7a0 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61   cref="ISQLiteMa
2f7b0 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 42 65 73 74  nagedModule.Best
2f7c0 49 6e 64 65 78 22 20 2f 3e 20 6d 65 74 68 6f 64  Index" /> method
2f7d0 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
2f7e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2f7f0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2f800 63 20 72 65 61 64 6f 6e 6c 79 20 64 6f 75 62 6c  c readonly doubl
2f810 65 20 44 65 66 61 75 6c 74 45 73 74 69 6d 61 74  e DefaultEstimat
2f820 65 64 43 6f 73 74 20 3d 20 64 6f 75 62 6c 65 2e  edCost = double.
2f830 4d 61 78 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  MaxValue;....   
2f840 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f890 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
2f8a0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
2f8b0 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  // The default v
2f8c0 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6e 61  ersion of the na
2f8d0 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64  tive sqlite3_mod
2f8e0 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 69 6e  ule structure in
2f8f0 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f   use...        /
2f900 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2f910 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2f920 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 69  tatic readonly i
2f930 6e 74 20 44 65 66 61 75 6c 74 4d 6f 64 75 6c 65  nt DefaultModule
2f940 56 65 72 73 69 6f 6e 20 3d 20 32 3b 0d 0a 20 20  Version = 2;..  
2f950 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2f960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2f970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2f9c0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
2f9d0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ata..        ///
2f9e0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f9f0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 69 65      /// This fie
2fa00 6c 64 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  ld is used to st
2fa10 6f 72 65 20 74 68 65 20 6e 61 74 69 76 65 20 73  ore the native s
2fa20 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 73 74  qlite3_module st
2fa30 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  ructure..       
2fa40 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20   /// associated 
2fa50 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74  with this object
2fa60 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20   instance...    
2fa70 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2fa80 79 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  y>..        priv
2fa90 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69 76 65  ate UnsafeNative
2faa0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
2fab0 6d 6f 64 75 6c 65 20 6e 61 74 69 76 65 4d 6f 64  module nativeMod
2fac0 75 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ule;....        
2fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 50  ///////....#if P
2fb20 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
2fb30 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
2fb40 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2fb50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  .        /// Thi
2fb60 73 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  s field is used 
2fb70 74 6f 20 68 6f 6c 64 20 74 68 65 20 62 6c 6f 63  to hold the bloc
2fb80 6b 20 6f 66 20 6e 61 74 69 76 65 20 6d 65 6d 6f  k of native memo
2fb90 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ry that contains
2fba0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 74 68  ..        /// th
2fbb0 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33  e native sqlite3
2fbc0 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75 72  _module structur
2fbd0 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
2fbe0 68 20 74 68 69 73 20 6f 62 6a 65 63 74 0d 0a 20  h this object.. 
2fbf0 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 73 74 61         /// insta
2fc00 6e 63 65 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67  nce when running
2fc10 20 6f 6e 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d   on the .NET Com
2fc20 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  pact Framework..
2fc30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
2fc40 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
2fc50 20 70 72 69 76 61 74 65 20 49 6e 74 50 74 72 20   private IntPtr 
2fc60 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65 3b 0d 0a  pNativeModule;..
2fc70 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
2fc80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2fc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2fcd0 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2fce0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
2fcf0 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73  This field is us
2fd00 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
2fd10 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2fd20 73 74 61 6e 63 65 73 20 61 73 73 6f 63 69 61 74  stances associat
2fd30 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
2fd40 77 69 74 68 20 74 68 69 73 20 6d 6f 64 75 6c 65  with this module
2fd50 2e 20 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f  .  The native po
2fd60 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
2fd70 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
2fd80 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  d..        /// s
2fd90 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
2fda0 20 74 6f 20 6b 65 79 20 69 6e 74 6f 20 74 68 69   to key into thi
2fdb0 73 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 0d 0a 20  s collection... 
2fdc0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
2fdd0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 70  mary>..        p
2fde0 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61 72  rivate Dictionar
2fdf0 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69 74 65  y<IntPtr, SQLite
2fe00 56 69 72 74 75 61 6c 54 61 62 6c 65 3e 20 74 61  VirtualTable> ta
2fe10 62 6c 65 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  bles;....       
2fe20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2fe30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2fe70 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2fe80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
2fe90 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73 65  his field is use
2fea0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 76  d to store the v
2feb0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
2fec0 73 6f 72 20 69 6e 73 74 61 6e 63 65 73 0d 0a 20  sor instances.. 
2fed0 20 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63         /// assoc
2fee0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
2fef0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 6e 61 74  module.  The nat
2ff00 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  ive pointer to t
2ff10 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
2ff20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
2ff30 73 6f 72 20 64 65 72 69 76 65 64 20 73 74 72 75  sor derived stru
2ff40 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
2ff50 20 6b 65 79 20 69 6e 74 6f 20 74 68 69 73 0d 0a   key into this..
2ff60 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 6f 6c 6c          /// coll
2ff70 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
2ff80 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2ff90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2ffa0 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e 74 50   Dictionary<IntP
2ffb0 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74 75 61  tr, SQLiteVirtua
2ffc0 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e 20 63 75  lTableCursor> cu
2ffd0 72 73 6f 72 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsors;....      
2ffe0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2fff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30020 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
30030 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
30040 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
30050 54 68 69 73 20 66 69 65 6c 64 20 69 73 20 75 73  This field is us
30060 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
30070 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 66 75  virtual table fu
30080 6e 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 73  nction instances
30090 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 73  ..        /// as
300a0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
300b0 69 73 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20  is module.  The 
300c0 63 61 73 65 2d 69 6e 73 65 6e 73 69 74 69 76 65  case-insensitive
300d0 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 0d 0a   function name..
300e0 20 20 20 20 20 20 20 20 2f 2f 2f 20 61 6e 64 20          /// and 
300f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
30100 67 75 6d 65 6e 74 73 20 28 77 69 74 68 20 2d 31  guments (with -1
30110 20 6d 65 61 6e 69 6e 67 20 22 61 6e 79 22 29 20   meaning "any") 
30120 61 72 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20  are used to..   
30130 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 73 74 72 75       /// constru
30140 63 74 20 74 68 65 20 73 74 72 69 6e 67 20 74 68  ct the string th
30150 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65  at is used to ke
30160 79 20 69 6e 74 6f 20 74 68 69 73 20 63 6f 6c 6c  y into this coll
30170 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  ection...       
30180 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30190 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
301a0 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
301b0 6e 67 2c 20 53 51 4c 69 74 65 46 75 6e 63 74 69  ng, SQLiteFuncti
301c0 6f 6e 3e 20 66 75 6e 63 74 69 6f 6e 73 3b 0d 0a  on> functions;..
301d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
301e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
301f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30230 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
30240 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
30250 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
30260 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
30270 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
30280 20 43 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69   Constructs an i
30290 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
302a0 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  class...        
302b0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
302c0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
302d0 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d  am name="name">.
302e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
302f0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 6f 64   name of the mod
30300 75 6c 65 2e 20 20 54 68 69 73 20 70 61 72 61 6d  ule.  This param
30310 65 74 65 72 20 63 61 6e 6e 6f 74 20 62 65 20 6e  eter cannot be n
30320 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ull...        //
30330 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
30340 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
30350 65 4d 6f 64 75 6c 65 28 73 74 72 69 6e 67 20 6e  eModule(string n
30360 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ame)..        {.
30370 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
30380 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (name == null)..
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
303b0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
303c0 22 6e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  "name");....    
303d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 61 6d          this.nam
303e0 65 20 3d 20 6e 61 6d 65 3b 0d 0a 20 20 20 20 20  e = name;..     
303f0 20 20 20 20 20 20 20 74 68 69 73 2e 74 61 62 6c         this.tabl
30400 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e  es = new Diction
30410 61 72 79 3c 49 6e 74 50 74 72 2c 20 53 51 4c 69  ary<IntPtr, SQLi
30420 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 3e 28  teVirtualTable>(
30430 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30440 74 68 69 73 2e 63 75 72 73 6f 72 73 20 3d 20 6e  this.cursors = n
30450 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 49 6e  ew Dictionary<In
30460 74 50 74 72 2c 20 53 51 4c 69 74 65 56 69 72 74  tPtr, SQLiteVirt
30470 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72 3e 28  ualTableCursor>(
30480 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30490 74 68 69 73 2e 66 75 6e 63 74 69 6f 6e 73 20 3d  this.functions =
304a0 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
304b0 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65 46 75  string, SQLiteFu
304c0 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 20 20 20 20  nction>();..    
304d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
304e0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
304f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
30540 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
30550 49 6e 74 65 72 6e 61 6c 20 4d 65 74 68 6f 64 73  Internal Methods
30560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ..        /// <s
30570 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
30580 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64   /// Creates and
30590 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 61 74   returns the nat
305a0 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c  ive sqlite_modul
305b0 65 20 73 74 72 75 63 74 75 72 65 20 75 73 69 6e  e structure usin
305c0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
305d0 2f 2f 20 63 6f 6e 66 69 67 75 72 65 64 20 28 6f  // configured (o
305e0 72 20 64 65 66 61 75 6c 74 29 20 3c 73 65 65 20  r default) <see 
305f0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
30600 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20  iveModule" />.. 
30610 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72         /// inter
30620 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  face implementat
30630 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
30640 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
30650 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
30660 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
30670 20 54 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69   The native sqli
30680 74 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  te_module struct
30690 75 72 65 20 75 73 69 6e 67 20 74 68 65 20 63 6f  ure using the co
306a0 6e 66 69 67 75 72 65 64 20 28 6f 72 0d 0a 20 20  nfigured (or..  
306b0 20 20 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c        /// defaul
306c0 74 29 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  t) <see cref="IS
306d0 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
306e0 65 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d  e" /> interface.
306f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70  .        /// imp
30700 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
30710 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
30720 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  rns>..        in
30730 74 65 72 6e 61 6c 20 55 6e 73 61 66 65 4e 61 74  ternal UnsafeNat
30740 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
30750 65 33 5f 6d 6f 64 75 6c 65 20 43 72 65 61 74 65  e3_module Create
30760 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 29 0d 0a  NativeModule()..
30770 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30780 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 72         return Cr
30790 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  eateNativeModule
307a0 28 47 65 74 4e 61 74 69 76 65 4d 6f 64 75 6c 65  (GetNativeModule
307b0 49 6d 70 6c 28 29 29 3b 0d 0a 20 20 20 20 20 20  Impl());..      
307c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
307d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30810 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 50 4c  //////....#if PL
30820 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
30830 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
30840 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
30850 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72 65 61          /// Crea
30860 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  tes and returns 
30870 61 20 6d 65 6d 6f 72 79 20 62 6c 6f 63 6b 20 6f  a memory block o
30880 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 74 68 65  btained from the
30890 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..  
308a0 20 20 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61 72        /// librar
308b0 79 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  y used to store 
308c0 74 68 65 20 6e 61 74 69 76 65 20 73 71 6c 69 74  the native sqlit
308d0 65 33 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74  e3_module struct
308e0 75 72 65 20 66 6f 72 20 74 68 69 73 0d 0a 20 20  ure for this..  
308f0 20 20 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74        /// object
30900 20 69 6e 73 74 61 6e 63 65 20 77 68 65 6e 20 72   instance when r
30910 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20 2e 4e  unning on the .N
30920 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65  ET Compact Frame
30930 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 2f  work...        /
30940 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
30950 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
30960 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
30970 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
30980 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69  nter to the nati
30990 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ve sqlite3_modul
309a0 65 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  e structure...  
309b0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
309c0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 69 6e  rns>..        in
309d0 74 65 72 6e 61 6c 20 49 6e 74 50 74 72 20 43 72  ternal IntPtr Cr
309e0 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  eateNativeModule
309f0 49 6e 74 65 72 6f 70 28 29 0d 0a 20 20 20 20 20  Interop()..     
30a00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30a10 20 20 69 66 20 28 70 4e 61 74 69 76 65 4d 6f 64    if (pNativeMod
30a20 75 6c 65 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  ule == IntPtr.Ze
30a30 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
30a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30a50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
30a60 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
30a70 20 4e 6f 20 65 61 73 79 20 77 61 79 20 74 6f 20   No easy way to 
30a80 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73 69  determine the si
30a90 7a 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  ze of the native
30aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30ab0 20 20 2f 2f 20 20 20 20 20 20 20 73 71 6c 69 74    //       sqlit
30ac0 65 5f 6d 6f 64 75 6c 65 20 73 74 72 75 63 74 75  e_module structu
30ad0 72 65 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 20  re when running 
30ae0 6f 6e 20 74 68 65 20 2e 4e 45 54 0d 0a 20 20 20  on the .NET..   
30af0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
30b00 20 20 20 20 20 20 43 6f 6d 70 61 63 74 20 46 72        Compact Fr
30b10 61 6d 65 77 6f 72 6b 3b 20 74 68 65 72 65 66 6f  amework; therefo
30b20 72 65 2c 20 6a 75 73 74 20 62 61 73 65 20 74 68  re, just base th
30b30 65 20 73 69 7a 65 0d 0a 20 20 20 20 20 20 20 20  e size..        
30b40 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
30b50 20 6f 6e 20 77 68 61 74 20 77 65 20 6b 6e 6f 77   on what we know
30b60 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
30b70 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
30b80 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
30b90 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 74  There is one int
30ba0 65 67 65 72 20 6d 65 6d 62 65 72 2e 0d 0a 20 20  eger member...  
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30bc0 20 20 20 20 20 20 20 54 68 65 72 65 20 61 72 65         There are
30bd0 20 32 32 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69   22 function poi
30be0 6e 74 65 72 20 6d 65 6d 62 65 72 73 2e 0d 0a 20  nter members... 
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30c00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
30c10 20 20 20 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65     pNativeModule
30c20 20 3d 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e   = SQLiteMemory.
30c30 41 6c 6c 6f 63 61 74 65 28 0d 0a 20 20 20 20 20  Allocate(..     
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
30c50 69 7a 65 6f 66 28 69 6e 74 29 20 2b 20 28 32 32  izeof(int) + (22
30c60 20 2a 20 49 6e 74 50 74 72 2e 53 69 7a 65 29 29   * IntPtr.Size))
30c70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30c80 20 20 20 20 20 69 66 20 28 70 4e 61 74 69 76 65       if (pNative
30c90 4d 6f 64 75 6c 65 20 3d 3d 20 49 6e 74 50 74 72  Module == IntPtr
30ca0 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20  .Zero)..        
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
30cc0 77 20 6e 65 77 20 4f 75 74 4f 66 4d 65 6d 6f 72  w new OutOfMemor
30cd0 79 45 78 63 65 70 74 69 6f 6e 28 22 73 71 6c 69  yException("sqli
30ce0 74 65 33 5f 6d 6f 64 75 6c 65 22 29 3b 0d 0a 20  te3_module");.. 
30cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30d00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30d10 72 6e 20 70 4e 61 74 69 76 65 4d 6f 64 75 6c 65  rn pNativeModule
30d20 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23 65  ;..        }..#e
30d30 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 23 65  ndif..        #e
30d40 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
30d50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30da0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
30db0 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
30dc0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
30dd0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
30de0 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 64 20 72  // Creates and r
30df0 65 74 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76  eturns the nativ
30e00 65 20 73 71 6c 69 74 65 5f 6d 6f 64 75 6c 65 20  e sqlite_module 
30e10 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20  structure using 
30e20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
30e30 20 73 70 65 63 69 66 69 65 64 20 3c 73 65 65 20   specified <see 
30e40 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
30e50 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e  iveModule" /> in
30e60 74 65 72 66 61 63 65 0d 0a 20 20 20 20 20 20 20  terface..       
30e70 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
30e80 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
30e90 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
30ea0 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
30eb0 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
30ec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
30ed0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
30ee0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22  iteNativeModule"
30ef0 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 20 69 6d   /> interface im
30f00 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0d  plementation to.
30f10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 65  .        /// use
30f20 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
30f30 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20  /param>..       
30f40 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
30f50 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
30f60 6e 61 74 69 76 65 20 73 71 6c 69 74 65 5f 6d 6f  native sqlite_mo
30f70 64 75 6c 65 20 73 74 72 75 63 74 75 72 65 20 75  dule structure u
30f80 73 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69  sing the specifi
30f90 65 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ed..        /// 
30fa0 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
30fb0 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
30fc0 2f 3e 20 69 6e 74 65 72 66 61 63 65 20 69 6d 70  /> interface imp
30fd0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0d 0a 20 20  lementation...  
30fe0 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75        /// </retu
30ff0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72  rns>..        pr
31000 69 76 61 74 65 20 55 6e 73 61 66 65 4e 61 74 69  ivate UnsafeNati
31010 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
31020 33 5f 6d 6f 64 75 6c 65 20 43 72 65 61 74 65 4e  3_module CreateN
31030 61 74 69 76 65 4d 6f 64 75 6c 65 28 0d 0a 20 20  ativeModule(..  
31040 20 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74            ISQLit
31050 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20 6d 6f  eNativeModule mo
31060 64 75 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  dule..          
31070 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
31080 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31090 76 65 4d 6f 64 75 6c 65 20 3d 20 6e 65 77 20 55  veModule = new U
310a0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
310b0 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  ds.sqlite3_modul
310c0 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
310d0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 69    nativeModule.i
310e0 56 65 72 73 69 6f 6e 20 3d 20 44 65 66 61 75 6c  Version = Defaul
310f0 74 4d 6f 64 75 6c 65 56 65 72 73 69 6f 6e 3b 0d  tModuleVersion;.
31100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
31110 66 20 28 6d 6f 64 75 6c 65 20 21 3d 20 6e 75 6c  f (module != nul
31120 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31140 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31150 78 43 72 65 61 74 65 20 3d 20 6e 65 77 20 55 6e  xCreate = new Un
31160 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
31170 73 2e 78 43 72 65 61 74 65 28 0d 0a 20 20 20 20  s.xCreate(..    
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
31190 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 29 3b 0d  odule.xCreate);.
311a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
311b0 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
311c0 78 43 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55  xConnect = new U
311d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
311e0 64 73 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20  ds.xConnect(..  
311f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31200 20 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63    module.xConnec
31210 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
31220 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31230 75 6c 65 2e 78 42 65 73 74 49 6e 64 65 78 20 3d  ule.xBestIndex =
31240 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31250 65 4d 65 74 68 6f 64 73 2e 78 42 65 73 74 49 6e  eMethods.xBestIn
31260 64 65 78 28 0d 0a 20 20 20 20 20 20 20 20 20 20  dex(..          
31270 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31280 2e 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d  .xBestIndex);...
31290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
312a0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
312b0 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20  isconnect = new 
312c0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
312d0 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28  ods.xDisconnect(
312e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312f0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 44 69        module.xDi
31300 73 63 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20  sconnect);....  
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
31320 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44 65 73 74  tiveModule.xDest
31330 72 6f 79 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  roy = new Unsafe
31340 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 44  NativeMethods.xD
31350 65 73 74 72 6f 79 28 0d 0a 20 20 20 20 20 20 20  estroy(..       
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64               mod
31370 75 6c 65 2e 78 44 65 73 74 72 6f 79 29 3b 0d 0a  ule.xDestroy);..
31380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31390 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
313a0 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  Open = new Unsaf
313b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
313c0 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Open(..         
313d0 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c             modul
313e0 65 2e 78 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20  e.xOpen);....   
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
31400 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c 6f 73 65  iveModule.xClose
31410 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
31420 69 76 65 4d 65 74 68 6f 64 73 2e 78 43 6c 6f 73  iveMethods.xClos
31430 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
31440 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
31450 43 6c 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  Close);....     
31460 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
31470 65 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20  eModule.xFilter 
31480 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
31490 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74 65  veMethods.xFilte
314a0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
314b0 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78          module.x
314c0 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20  Filter);....    
314d0 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
314e0 76 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d  veModule.xNext =
314f0 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
31500 65 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 0d  eMethods.xNext(.
31510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31520 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 4e 65 78       module.xNex
31530 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
31540 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31550 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55  ule.xEof = new U
31560 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
31570 64 73 2e 78 45 6f 66 28 6d 6f 64 75 6c 65 2e 78  ds.xEof(module.x
31580 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Eof);....       
31590 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
315a0 6f 64 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 3d 20  odule.xColumn = 
315b0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
315c0 4d 65 74 68 6f 64 73 2e 78 43 6f 6c 75 6d 6e 28  Methods.xColumn(
315d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
315e0 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 43 6f        module.xCo
315f0 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  lumn);....      
31600 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
31610 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3d 20  Module.xRowId = 
31620 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31630 4d 65 74 68 6f 64 73 2e 78 52 6f 77 49 64 28 0d  Methods.xRowId(.
31640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31650 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 77       module.xRow
31660 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Id);....        
31670 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
31680 64 75 6c 65 2e 78 55 70 64 61 74 65 20 3d 20 6e  dule.xUpdate = n
31690 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
316a0 65 74 68 6f 64 73 2e 78 55 70 64 61 74 65 28 0d  ethods.xUpdate(.
316b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
316c0 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 55 70 64       module.xUpd
316d0 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ate);....       
316e0 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d           nativeM
316f0 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e  odule.xBegin = n
31700 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
31710 65 74 68 6f 64 73 2e 78 42 65 67 69 6e 28 0d 0a  ethods.xBegin(..
31720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31730 20 20 20 20 6d 6f 64 75 6c 65 2e 78 42 65 67 69      module.xBegi
31740 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
31750 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31760 75 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20  ule.xSync = new 
31770 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31780 6f 64 73 2e 78 53 79 6e 63 28 0d 0a 20 20 20 20  ods.xSync(..    
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 29 3b 0d 0a  module.xSync);..
317b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
317c0 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
317d0 43 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55 6e 73  Commit = new Uns
317e0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
317f0 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20 20 20  .xCommit(..     
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
31810 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 29 3b 0d  odule.xCommit);.
31820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31830 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e     nativeModule.
31840 78 52 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20  xRollback = new 
31850 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31860 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a  ods.xRollback(..
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c      module.xRoll
31890 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  back);....      
318a0 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
318b0 4d 6f 64 75 6c 65 2e 78 46 69 6e 64 46 75 6e 63  Module.xFindFunc
318c0 74 69 6f 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66  tion = new Unsaf
318d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
318e0 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a 20  FindFunction(.. 
318f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31900 20 20 20 6d 6f 64 75 6c 65 2e 78 46 69 6e 64 46     module.xFindF
31910 75 6e 63 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  unction);....   
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
31930 69 76 65 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d  iveModule.xRenam
31940 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
31950 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e  tiveMethods.xRen
31960 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
31970 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
31980 2e 78 52 65 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  .xRename);....  
31990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
319a0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 53 61 76 65  tiveModule.xSave
319b0 70 6f 69 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61  point = new Unsa
319c0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
319d0 78 53 61 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20  xSavepoint(..   
319e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319f0 20 6d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69   module.xSavepoi
31a00 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
31a10 20 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f          nativeMo
31a20 64 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d 20  dule.xRelease = 
31a30 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31a40 4d 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73 65  Methods.xRelease
31a50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31a60 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 78 52         module.xR
31a70 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  elease);....    
31a80 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31a90 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61  veModule.xRollba
31aa0 63 6b 54 6f 20 3d 20 6e 65 77 20 55 6e 73 61 66  ckTo = new Unsaf
31ab0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
31ac0 52 6f 6c 6c 62 61 63 6b 54 6f 28 0d 0a 20 20 20  RollbackTo(..   
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ae0 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63   module.xRollbac
31af0 6b 54 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  kTo);..         
31b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
31b10 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
31b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
31b30 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31b40 75 6c 65 2e 78 43 72 65 61 74 65 20 3d 20 6e 65  ule.xCreate = ne
31b50 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
31b60 74 68 6f 64 73 2e 78 43 72 65 61 74 65 28 0d 0a  thods.xCreate(..
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b80 20 20 20 20 78 43 72 65 61 74 65 29 3b 0d 0a 0d      xCreate);...
31b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31ba0 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43   nativeModule.xC
31bb0 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20 55 6e 73  onnect = new Uns
31bc0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31bd0 2e 78 43 6f 6e 6e 65 63 74 28 0d 0a 20 20 20 20  .xConnect(..    
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20  xConnect);....  
31c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
31c10 74 69 76 65 4d 6f 64 75 6c 65 2e 78 42 65 73 74  tiveModule.xBest
31c20 49 6e 64 65 78 20 3d 20 6e 65 77 20 55 6e 73 61  Index = new Unsa
31c30 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
31c40 78 42 65 73 74 49 6e 64 65 78 28 0d 0a 20 20 20  xBestIndex(..   
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c60 20 78 42 65 73 74 49 6e 64 65 78 29 3b 0d 0a 0d   xBestIndex);...
31c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c80 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 44   nativeModule.xD
31c90 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e 65 77 20  isconnect = new 
31ca0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
31cb0 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65 63 74 28  ods.xDisconnect(
31cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31cd0 20 20 20 20 20 20 78 44 69 73 63 6f 6e 6e 65 63        xDisconnec
31ce0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
31cf0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31d00 75 6c 65 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e  ule.xDestroy = n
31d10 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
31d20 65 74 68 6f 64 73 2e 78 44 65 73 74 72 6f 79 28  ethods.xDestroy(
31d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31d40 20 20 20 20 20 20 78 44 65 73 74 72 6f 79 29 3b        xDestroy);
31d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31d60 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
31d70 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73  .xOpen = new Uns
31d80 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31d90 2e 78 4f 70 65 6e 28 78 4f 70 65 6e 29 3b 0d 0a  .xOpen(xOpen);..
31da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31db0 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 6c  nativeModule.xCl
31dc0 6f 73 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ose = new Unsafe
31dd0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
31de0 6c 6f 73 65 28 78 43 6c 6f 73 65 29 3b 0d 0a 0d  lose(xClose);...
31df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31e00 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46   nativeModule.xF
31e10 69 6c 74 65 72 20 3d 20 6e 65 77 20 55 6e 73 61  ilter = new Unsa
31e20 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
31e30 78 46 69 6c 74 65 72 28 0d 0a 20 20 20 20 20 20  xFilter(..      
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 46                xF
31e50 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  ilter);....     
31e60 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76             nativ
31e70 65 4d 6f 64 75 6c 65 2e 78 4e 65 78 74 20 3d 20  eModule.xNext = 
31e80 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
31e90 4d 65 74 68 6f 64 73 2e 78 4e 65 78 74 28 78 4e  Methods.xNext(xN
31ea0 65 78 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ext);..         
31eb0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
31ec0 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55  ule.xEof = new U
31ed0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
31ee0 64 73 2e 78 45 6f 66 28 78 45 6f 66 29 3b 0d 0a  ds.xEof(xEof);..
31ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31f00 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78    nativeModule.x
31f10 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e 73  Column = new Uns
31f20 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
31f30 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20 20  .xColumn(..     
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
31f50 43 6f 6c 75 6d 6e 29 3b 0d 0a 0d 0a 20 20 20 20  Column);....    
31f60 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74 69              nati
31f70 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20  veModule.xRowId 
31f80 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
31f90 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77 49 64  veMethods.xRowId
31fa0 28 78 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20  (xRowId);....   
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 74               nat
31fc0 69 76 65 4d 6f 64 75 6c 65 2e 78 55 70 64 61 74  iveModule.xUpdat
31fd0 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  e = new UnsafeNa
31fe0 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 55 70 64  tiveMethods.xUpd
31ff0 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ate(..          
32000 20 20 20 20 20 20 20 20 20 20 78 55 70 64 61 74            xUpdat
32010 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
32020 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
32030 75 6c 65 2e 78 42 65 67 69 6e 20 3d 20 6e 65 77  ule.xBegin = new
32040 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
32050 68 6f 64 73 2e 78 42 65 67 69 6e 28 78 42 65 67  hods.xBegin(xBeg
32060 69 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  in);..          
32070 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75        nativeModu
32080 6c 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20 55  le.xSync = new U
32090 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
320a0 64 73 2e 78 53 79 6e 63 28 78 53 79 6e 63 29 3b  ds.xSync(xSync);
320b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
320c0 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
320d0 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77 20 55  .xCommit = new U
320e0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
320f0 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20 20 20  ds.xCommit(..   
32100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32110 20 78 43 6f 6d 6d 69 74 29 3b 0d 0a 0d 0a 20 20   xCommit);....  
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
32130 74 69 76 65 4d 6f 64 75 6c 65 2e 78 52 6f 6c 6c  tiveModule.xRoll
32140 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e 73 61 66  back = new Unsaf
32150 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
32160 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  Rollback(..     
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78                 x
32180 52 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Rollback);....  
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
321a0 74 69 76 65 4d 6f 64 75 6c 65 2e 78 46 69 6e 64  tiveModule.xFind
321b0 46 75 6e 63 74 69 6f 6e 20 3d 20 6e 65 77 20 55  Function = new U
321c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
321d0 64 73 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ds.xFindFunction
321e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
321f0 20 20 20 20 20 20 20 78 46 69 6e 64 46 75 6e 63         xFindFunc
32200 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tion);....      
32210 20 20 20 20 20 20 20 20 20 20 6e 61 74 69 76 65            native
32220 4d 6f 64 75 6c 65 2e 78 52 65 6e 61 6d 65 20 3d  Module.xRename =
32230 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76   new UnsafeNativ
32240 65 4d 65 74 68 6f 64 73 2e 78 52 65 6e 61 6d 65  eMethods.xRename
32250 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32260 20 20 20 20 20 20 20 78 52 65 6e 61 6d 65 29 3b         xRename);
32270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32280 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
32290 2e 78 53 61 76 65 70 6f 69 6e 74 20 3d 20 6e 65  .xSavepoint = ne
322a0 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  w UnsafeNativeMe
322b0 74 68 6f 64 73 2e 78 53 61 76 65 70 6f 69 6e 74  thods.xSavepoint
322c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
322d0 20 20 20 20 20 20 20 78 53 61 76 65 70 6f 69 6e         xSavepoin
322e0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
322f0 20 20 20 20 20 20 20 6e 61 74 69 76 65 4d 6f 64         nativeMod
32300 75 6c 65 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e  ule.xRelease = n
32310 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32320 65 74 68 6f 64 73 2e 78 52 65 6c 65 61 73 65 28  ethods.xRelease(
32330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32340 20 20 20 20 20 20 78 52 65 6c 65 61 73 65 29 3b        xRelease);
32350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32360 20 20 20 20 6e 61 74 69 76 65 4d 6f 64 75 6c 65      nativeModule
32370 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20 6e  .xRollbackTo = n
32380 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
32390 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63 6b  ethods.xRollback
323a0 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  To(..           
323b0 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c 62 61           xRollba
323c0 63 6b 54 6f 29 3b 0d 0a 20 20 20 20 20 20 20 20  ckTo);..        
323d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
323e0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 61 74 69       return nati
323f0 76 65 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20  veModule;..     
32400 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32450 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
32460 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
32470 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 72  ..        /// Cr
32480 65 61 74 65 73 20 61 20 63 6f 70 79 20 6f 66 20  eates a copy of 
32490 74 68 65 20 73 70 65 63 69 66 69 65 64 0d 0a 20  the specified.. 
324a0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
324b0 63 72 65 66 3d 22 55 6e 73 61 66 65 4e 61 74 69  cref="UnsafeNati
324c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
324d0 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a  3_module" /> obj
324e0 65 63 74 20 69 6e 73 74 61 6e 63 65 2c 0d 0a 20  ect instance,.. 
324f0 20 20 20 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67         /// using
32500 20 64 65 66 61 75 6c 74 20 69 6d 70 6c 65 6d 65   default impleme
32510 6e 74 61 74 69 6f 6e 73 20 66 6f 72 20 74 68 65  ntations for the
32520 20 63 6f 6e 74 61 69 6e 65 64 20 64 65 6c 65 67   contained deleg
32530 61 74 65 73 20 77 68 65 6e 0d 0a 20 20 20 20 20  ates when..     
32540 20 20 20 2f 2f 2f 20 6e 65 63 65 73 73 61 72 79     /// necessary
32550 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  ...        /// <
32560 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
32570 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
32580 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
32590 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73        /// The <s
325a0 65 65 20 63 72 65 66 3d 22 55 6e 73 61 66 65 4e  ee cref="UnsafeN
325b0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
325c0 69 74 65 33 5f 6d 6f 64 75 6c 65 22 20 2f 3e 20  ite3_module" /> 
325d0 6f 62 6a 65 63 74 0d 0a 20 20 20 20 20 20 20 20  object..        
325e0 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20 74 6f 20  /// instance to 
325f0 63 6f 70 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f  copy...        /
32600 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
32610 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e       /// <return
32620 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  s>..        /// 
32630 54 68 65 20 6e 65 77 20 3c 73 65 65 20 63 72 65  The new <see cre
32640 66 3d 22 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  f="UnsafeNativeM
32650 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
32660 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74  odule" /> object
32670 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e  ..        /// in
32680 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20  stance...       
32690 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
326a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
326b0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
326c0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 6f 64  hods.sqlite3_mod
326d0 75 6c 65 20 43 6f 70 79 4e 61 74 69 76 65 4d 6f  ule CopyNativeMo
326e0 64 75 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  dule(..         
326f0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
32700 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d  ethods.sqlite3_m
32710 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  odule module..  
32720 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
32730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32740 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
32750 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
32760 6d 6f 64 75 6c 65 20 6e 65 77 4d 6f 64 75 6c 65  module newModule
32770 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
32780 20 20 20 20 6e 65 77 20 55 6e 73 61 66 65 4e 61      new UnsafeNa
32790 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
327a0 74 65 33 5f 6d 6f 64 75 6c 65 28 29 3b 0d 0a 0d  te3_module();...
327b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
327c0 4d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f 6e 20  Module.iVersion 
327d0 3d 20 6d 6f 64 75 6c 65 2e 69 56 65 72 73 69 6f  = module.iVersio
327e0 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
327f0 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 43 72 65    newModule.xCre
32800 61 74 65 20 3d 20 6e 65 77 20 55 6e 73 61 66 65  ate = new Unsafe
32810 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 43  NativeMethods.xC
32820 72 65 61 74 65 28 0d 0a 20 20 20 20 20 20 20 20  reate(..        
32830 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e          (module.
32840 78 43 72 65 61 74 65 20 21 3d 20 6e 75 6c 6c 29  xCreate != null)
32850 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 72 65 61 74   ? module.xCreat
32860 65 20 3a 20 78 43 72 65 61 74 65 29 3b 0d 0a 0d  e : xCreate);...
32870 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
32880 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 20  Module.xConnect 
32890 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
328a0 76 65 4d 65 74 68 6f 64 73 2e 78 43 6f 6e 6e 65  veMethods.xConne
328b0 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
328c0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 43 6f       (module.xCo
328d0 6e 6e 65 63 74 20 21 3d 20 6e 75 6c 6c 29 20 3f  nnect != null) ?
328e0 20 6d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74   module.xConnect
328f0 20 3a 20 78 43 6f 6e 6e 65 63 74 29 3b 0d 0a 0d   : xConnect);...
32900 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77  .            new
32910 4d 6f 64 75 6c 65 2e 78 42 65 73 74 49 6e 64 65  Module.xBestInde
32920 78 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  x = new UnsafeNa
32930 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65 73  tiveMethods.xBes
32940 74 49 6e 64 65 78 28 0d 0a 20 20 20 20 20 20 20  tIndex(..       
32950 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
32960 2e 78 42 65 73 74 49 6e 64 65 78 20 21 3d 20 6e  .xBestIndex != n
32970 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 42  ull) ? module.xB
32980 65 73 74 49 6e 64 65 78 20 3a 20 78 42 65 73 74  estIndex : xBest
32990 49 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  Index);....     
329a0 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
329b0 2e 78 44 69 73 63 6f 6e 6e 65 63 74 20 3d 20 6e  .xDisconnect = n
329c0 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ew UnsafeNativeM
329d0 65 74 68 6f 64 73 2e 78 44 69 73 63 6f 6e 6e 65  ethods.xDisconne
329e0 63 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct(..           
329f0 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 44 69       (module.xDi
32a00 73 63 6f 6e 6e 65 63 74 20 21 3d 20 6e 75 6c 6c  sconnect != null
32a10 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 44 69 73 63  ) ? module.xDisc
32a20 6f 6e 6e 65 63 74 20 3a 0d 0a 20 20 20 20 20 20  onnect :..      
32a30 20 20 20 20 20 20 20 20 20 20 78 44 69 73 63 6f            xDisco
32a40 6e 6e 65 63 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  nnect);....     
32a50 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32a60 2e 78 44 65 73 74 72 6f 79 20 3d 20 6e 65 77 20  .xDestroy = new 
32a70 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
32a80 6f 64 73 2e 78 44 65 73 74 72 6f 79 28 0d 0a 20  ods.xDestroy(.. 
32a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
32aa0 6d 6f 64 75 6c 65 2e 78 44 65 73 74 72 6f 79 20  module.xDestroy 
32ab0 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
32ac0 65 2e 78 44 65 73 74 72 6f 79 20 3a 20 78 44 65  e.xDestroy : xDe
32ad0 73 74 72 6f 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  stroy);....     
32ae0 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32af0 2e 78 4f 70 65 6e 20 3d 20 6e 65 77 20 55 6e 73  .xOpen = new Uns
32b00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
32b10 2e 78 4f 70 65 6e 28 0d 0a 20 20 20 20 20 20 20  .xOpen(..       
32b20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
32b30 2e 78 4f 70 65 6e 20 21 3d 20 6e 75 6c 6c 29 20  .xOpen != null) 
32b40 3f 20 6d 6f 64 75 6c 65 2e 78 4f 70 65 6e 20 3a  ? module.xOpen :
32b50 20 78 4f 70 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20   xOpen);....    
32b60 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
32b70 65 2e 78 43 6c 6f 73 65 20 3d 20 6e 65 77 20 55  e.xClose = new U
32b80 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32b90 64 73 2e 78 43 6c 6f 73 65 28 0d 0a 20 20 20 20  ds.xClose(..    
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
32bb0 75 6c 65 2e 78 43 6c 6f 73 65 20 21 3d 20 6e 75  ule.xClose != nu
32bc0 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43 6c  ll) ? module.xCl
32bd0 6f 73 65 20 3a 20 78 43 6c 6f 73 65 29 3b 0d 0a  ose : xClose);..
32be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
32bf0 77 4d 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20  wModule.xFilter 
32c00 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69  = new UnsafeNati
32c10 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6c 74 65  veMethods.xFilte
32c20 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
32c30 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 46 69 6c      (module.xFil
32c40 74 65 72 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  ter != null) ? m
32c50 6f 64 75 6c 65 2e 78 46 69 6c 74 65 72 20 3a 20  odule.xFilter : 
32c60 78 46 69 6c 74 65 72 29 3b 0d 0a 0d 0a 20 20 20  xFilter);....   
32c70 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
32c80 6c 65 2e 78 4e 65 78 74 20 3d 20 6e 65 77 20 55  le.xNext = new U
32c90 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32ca0 64 73 2e 78 4e 65 78 74 28 0d 0a 20 20 20 20 20  ds.xNext(..     
32cb0 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
32cc0 6c 65 2e 78 4e 65 78 74 20 21 3d 20 6e 75 6c 6c  le.xNext != null
32cd0 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 4e 65 78 74  ) ? module.xNext
32ce0 20 3a 20 78 4e 65 78 74 29 3b 0d 0a 0d 0a 20 20   : xNext);....  
32cf0 20 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64            newMod
32d00 75 6c 65 2e 78 45 6f 66 20 3d 20 6e 65 77 20 55  ule.xEof = new U
32d10 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32d20 64 73 2e 78 45 6f 66 28 0d 0a 20 20 20 20 20 20  ds.xEof(..      
32d30 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32d40 65 2e 78 45 6f 66 20 21 3d 20 6e 75 6c 6c 29 20  e.xEof != null) 
32d50 3f 20 6d 6f 64 75 6c 65 2e 78 45 6f 66 20 3a 20  ? module.xEof : 
32d60 78 45 6f 66 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  xEof);....      
32d70 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e        newModule.
32d80 78 43 6f 6c 75 6d 6e 20 3d 20 6e 65 77 20 55 6e  xColumn = new Un
32d90 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32da0 73 2e 78 43 6f 6c 75 6d 6e 28 0d 0a 20 20 20 20  s.xColumn(..    
32db0 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64              (mod
32dc0 75 6c 65 2e 78 43 6f 6c 75 6d 6e 20 21 3d 20 6e  ule.xColumn != n
32dd0 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 43  ull) ? module.xC
32de0 6f 6c 75 6d 6e 20 3a 20 78 43 6f 6c 75 6d 6e 29  olumn : xColumn)
32df0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32e00 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 6f 77 49   newModule.xRowI
32e10 64 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61  d = new UnsafeNa
32e20 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 52 6f 77  tiveMethods.xRow
32e30 49 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id(..           
32e40 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52 6f       (module.xRo
32e50 77 49 64 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d  wId != null) ? m
32e60 6f 64 75 6c 65 2e 78 52 6f 77 49 64 20 3a 20 78  odule.xRowId : x
32e70 52 6f 77 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20  RowId);....     
32e80 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65         newModule
32e90 2e 78 55 70 64 61 74 65 20 3d 20 6e 65 77 20 55  .xUpdate = new U
32ea0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
32eb0 64 73 2e 78 55 70 64 61 74 65 28 0d 0a 20 20 20  ds.xUpdate(..   
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f               (mo
32ed0 64 75 6c 65 2e 78 55 70 64 61 74 65 20 21 3d 20  dule.xUpdate != 
32ee0 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
32ef0 55 70 64 61 74 65 20 3a 20 78 55 70 64 61 74 65  Update : xUpdate
32f00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32f10 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 42 65 67    newModule.xBeg
32f20 69 6e 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  in = new UnsafeN
32f30 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 42 65  ativeMethods.xBe
32f40 67 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  gin(..          
32f50 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 42        (module.xB
32f60 65 67 69 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  egin != null) ? 
32f70 6d 6f 64 75 6c 65 2e 78 42 65 67 69 6e 20 3a 20  module.xBegin : 
32f80 78 42 65 67 69 6e 29 3b 0d 0a 0d 0a 20 20 20 20  xBegin);....    
32f90 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
32fa0 65 2e 78 53 79 6e 63 20 3d 20 6e 65 77 20 55 6e  e.xSync = new Un
32fb0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
32fc0 73 2e 78 53 79 6e 63 28 0d 0a 20 20 20 20 20 20  s.xSync(..      
32fd0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
32fe0 65 2e 78 53 79 6e 63 20 21 3d 20 6e 75 6c 6c 29  e.xSync != null)
32ff0 20 3f 20 6d 6f 64 75 6c 65 2e 78 53 79 6e 63 20   ? module.xSync 
33000 3a 20 78 53 79 6e 63 29 3b 0d 0a 0d 0a 20 20 20  : xSync);....   
33010 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
33020 6c 65 2e 78 43 6f 6d 6d 69 74 20 3d 20 6e 65 77  le.xCommit = new
33030 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33040 68 6f 64 73 2e 78 43 6f 6d 6d 69 74 28 0d 0a 20  hods.xCommit(.. 
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
33060 6d 6f 64 75 6c 65 2e 78 43 6f 6d 6d 69 74 20 21  module.xCommit !
33070 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65  = null) ? module
33080 2e 78 43 6f 6d 6d 69 74 20 3a 20 78 43 6f 6d 6d  .xCommit : xComm
33090 69 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  it);....        
330a0 20 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52      newModule.xR
330b0 6f 6c 6c 62 61 63 6b 20 3d 20 6e 65 77 20 55 6e  ollback = new Un
330c0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
330d0 73 2e 78 52 6f 6c 6c 62 61 63 6b 28 0d 0a 20 20  s.xRollback(..  
330e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d                (m
330f0 6f 64 75 6c 65 2e 78 52 6f 6c 6c 62 61 63 6b 20  odule.xRollback 
33100 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c  != null) ? modul
33110 65 2e 78 52 6f 6c 6c 62 61 63 6b 20 3a 20 78 52  e.xRollback : xR
33120 6f 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20  ollback);....   
33130 20 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75           newModu
33140 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
33150 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e 61 74   = new UnsafeNat
33160 69 76 65 4d 65 74 68 6f 64 73 2e 78 46 69 6e 64  iveMethods.xFind
33170 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  Function(..     
33180 20 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75             (modu
33190 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
331a0 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
331b0 6c 65 2e 78 46 69 6e 64 46 75 6e 63 74 69 6f 6e  le.xFindFunction
331c0 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
331d0 20 20 20 20 78 46 69 6e 64 46 75 6e 63 74 69 6f      xFindFunctio
331e0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
331f0 20 20 20 6e 65 77 4d 6f 64 75 6c 65 2e 78 52 65     newModule.xRe
33200 6e 61 6d 65 20 3d 20 6e 65 77 20 55 6e 73 61 66  name = new Unsaf
33210 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78  eNativeMethods.x
33220 52 65 6e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  Rename(..       
33230 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c 65           (module
33240 2e 78 52 65 6e 61 6d 65 20 21 3d 20 6e 75 6c 6c  .xRename != null
33250 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 65 6e 61  ) ? module.xRena
33260 6d 65 20 3a 20 78 52 65 6e 61 6d 65 29 3b 0d 0a  me : xRename);..
33270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
33280 77 4d 6f 64 75 6c 65 2e 78 53 61 76 65 70 6f 69  wModule.xSavepoi
33290 6e 74 20 3d 20 6e 65 77 20 55 6e 73 61 66 65 4e  nt = new UnsafeN
332a0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 78 53 61  ativeMethods.xSa
332b0 76 65 70 6f 69 6e 74 28 0d 0a 20 20 20 20 20 20  vepoint(..      
332c0 20 20 20 20 20 20 20 20 20 20 28 6d 6f 64 75 6c            (modul
332d0 65 2e 78 53 61 76 65 70 6f 69 6e 74 20 21 3d 20  e.xSavepoint != 
332e0 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78  null) ? module.x
332f0 53 61 76 65 70 6f 69 6e 74 20 3a 20 78 53 61 76  Savepoint : xSav
33300 65 70 6f 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  epoint);....    
33310 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
33320 65 2e 78 52 65 6c 65 61 73 65 20 3d 20 6e 65 77  e.xRelease = new
33330 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
33340 68 6f 64 73 2e 78 52 65 6c 65 61 73 65 28 0d 0a  hods.xRelease(..
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33360 28 6d 6f 64 75 6c 65 2e 78 52 65 6c 65 61 73 65  (module.xRelease
33370 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6d 6f 64 75   != null) ? modu
33380 6c 65 2e 78 52 65 6c 65 61 73 65 20 3a 20 78 52  le.xRelease : xR
33390 65 6c 65 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  elease);....    
333a0 20 20 20 20 20 20 20 20 6e 65 77 4d 6f 64 75 6c          newModul
333b0 65 2e 78 52 6f 6c 6c 62 61 63 6b 54 6f 20 3d 20  e.xRollbackTo = 
333c0 6e 65 77 20 55 6e 73 61 66 65 4e 61 74 69 76 65  new UnsafeNative
333d0 4d 65 74 68 6f 64 73 2e 78 52 6f 6c 6c 62 61 63  Methods.xRollbac
333e0 6b 54 6f 28 0d 0a 20 20 20 20 20 20 20 20 20 20  kTo(..          
333f0 20 20 20 20 20 20 28 6d 6f 64 75 6c 65 2e 78 52        (module.xR
33400 6f 6c 6c 62 61 63 6b 54 6f 20 21 3d 20 6e 75 6c  ollbackTo != nul
33410 6c 29 20 3f 20 6d 6f 64 75 6c 65 2e 78 52 6f 6c  l) ? module.xRol
33420 6c 62 61 63 6b 54 6f 20 3a 0d 0a 20 20 20 20 20  lbackTo :..     
33430 20 20 20 20 20 20 20 20 20 20 20 78 52 6f 6c 6c             xRoll
33440 62 61 63 6b 54 6f 29 3b 0d 0a 0d 0a 20 20 20 20  backTo);....    
33450 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
33460 65 77 4d 6f 64 75 6c 65 3b 0d 0a 20 20 20 20 20  ewModule;..     
33470 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
33480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
334d0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
334e0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 43 61  ..        /// Ca
334f0 6c 6c 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 76  lls one of the v
33500 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 69  irtual table ini
33510 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6d 65 74 68  tialization meth
33520 6f 64 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ods...        //
33530 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
33540 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
33550 20 6e 61 6d 65 3d 22 63 72 65 61 74 65 22 3e 0d   name="create">.
33560 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
33570 2d 7a 65 72 6f 20 74 6f 20 63 61 6c 6c 20 74 68  -zero to call th
33580 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
33590 4c 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c  LiteManagedModul
335a0 65 2e 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  e.Create" />..  
335b0 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
335c0 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 65  ; otherwise, the
335d0 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
335e0 69 74 65 4d 61 6e 61 67 65 64 4d 6f 64 75 6c 65  iteManagedModule
335f0 2e 43 6f 6e 6e 65 63 74 22 20 2f 3e 0d 0a 20 20  .Connect" />..  
33600 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
33610 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 2e   will be called.
33620 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  ..        /// </
33630 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20  param>..        
33640 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
33650 22 70 44 62 22 3e 0d 0a 20 20 20 20 20 20 20 20  "pDb">..        
33660 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 64  /// The native d
33670 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
33680 6f 6e 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  on handle...    
33690 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
336a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
336b0 61 72 61 6d 20 6e 61 6d 65 3d 22 70 41 75 78 22  aram name="pAux"
336c0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
336d0 68 65 20 6f 72 69 67 69 6e 61 6c 20 6e 61 74 69  he original nati
336e0 76 65 20 70 6f 69 6e 74 65 72 20 76 61 6c 75 65  ve pointer value
336f0 20 74 68 61 74 20 77 61 73 20 70 72 6f 76 69 64   that was provid
33700 65 64 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ed to the..     
33710 20 20 20 2f 2f 2f 20 73 71 6c 69 74 65 33 5f 63     /// sqlite3_c
33720 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 2c 20  reate_module(), 
33730 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
33740 6f 64 75 6c 65 5f 76 32 28 29 20 6f 72 0d 0a 20  odule_v2() or.. 
33750 20 20 20 20 20 20 20 2f 2f 2f 20 73 71 6c 69 74         /// sqlit
33760 65 33 5f 63 72 65 61 74 65 5f 64 69 73 70 6f 73  e3_create_dispos
33770 61 62 6c 65 5f 6d 6f 64 75 6c 65 28 29 20 66 75  able_module() fu
33780 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  nctions...      
33790 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
337a0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72          /// <par
337b0 61 6d 20 6e 61 6d 65 3d 22 61 72 67 63 22 3e 0d  am name="argc">.
337c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  .        /// The
337d0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
337e0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 43 52  ents from the CR
337f0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
33800 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  LE statement... 
33810 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72         /// </par
33820 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  am>..        ///
33830 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72   <param name="ar
33840 67 76 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  gv">..        //
33850 2f 20 54 68 65 20 61 72 72 61 79 20 6f 66 20 73  / The array of s
33860 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  tring arguments 
33870 66 72 6f 6d 20 74 68 65 20 43 52 45 41 54 45 20  from the CREATE 
33880 56 49 52 54 55 41 4c 20 54 41 42 4c 45 0d 0a 20  VIRTUAL TABLE.. 
33890 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 61 74 65         /// state
338a0 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ment...        /
338b0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
338c0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
338d0 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a 20  name="pVtab">.. 
338e0 20 20 20 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20         /// Upon 
338f0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
33900 72 61 6d 65 74 65 72 20 6d 75 73 74 20 62 65 20  rameter must be 
33910 6d 6f 64 69 66 69 65 64 20 74 6f 20 70 6f 69 6e  modified to poin
33920 74 20 74 6f 20 74 68 65 20 6e 65 77 6c 79 0d 0a  t to the newly..
33930 20 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61          /// crea
33940 74 65 64 20 6e 61 74 69 76 65 20 73 71 6c 69 74  ted native sqlit
33950 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
33960 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
33970 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
33980 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
33990 61 72 61 6d 20 6e 61 6d 65 3d 22 70 45 72 72 6f  aram name="pErro
339a0 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  r">..        ///
339b0 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20 74   Upon failure, t
339c0 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 75  his parameter mu
339d0 73 74 20 62 65 20 6d 6f 64 69 66 69 65 64 20 74  st be modified t
339e0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 65  o point to the e
339f0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rror..        //
33a00 2f 20 6d 65 73 73 61 67 65 2c 20 77 69 74 68 20  / message, with 
33a10 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d  the underlying m
33a20 65 6d 6f 72 79 20 68 61 76 69 6e 67 20 62 65 65  emory having bee
33a30 6e 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  n obtained from 
33a40 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  the..        ///
33a50 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
33a60 29 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20  ) function...   
33a70 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
33a80 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
33a90 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
33aa0 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
33ab0 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
33ac0 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
33ad0 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
33ae0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
33af0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
33b00 65 61 74 65 4f 72 43 6f 6e 6e 65 63 74 28 0d 0a  eateOrConnect(..
33b10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33b20 20 63 72 65 61 74 65 2c 0d 0a 20 20 20 20 20 20   create,..      
33b30 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44 62        IntPtr pDb
33b40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ,..            I
33b50 6e 74 50 74 72 20 70 41 75 78 2c 0d 0a 20 20 20  ntPtr pAux,..   
33b60 20 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67           int arg
33b70 63 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c,..            
33b80 49 6e 74 50 74 72 20 61 72 67 76 2c 0d 0a 20 20  IntPtr argv,..  
33b90 20 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e            ref In
33ba0 74 50 74 72 20 70 56 74 61 62 2c 0d 0a 20 20 20  tPtr pVtab,..   
33bb0 20 20 20 20 20 20 20 20 20 72 65 66 20 49 6e 74           ref Int
33bc0 50 74 72 20 70 45 72 72 6f 72 0d 0a 20 20 20 20  Ptr pError..    
33bd0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
33be0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33bf0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
33c00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33c10 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
33c20 65 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  eName = SQLiteSt
33c30 72 69 6e 67 2e 53 74 72 69 6e 67 46 72 6f 6d 55  ring.StringFromU
33c40 74 66 38 49 6e 74 50 74 72 28 0d 0a 20 20 20 20  tf8IntPtr(..    
33c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c60 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
33c70 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66  ods.sqlite3_db_f
33c80 69 6c 65 6e 61 6d 65 28 70 44 62 2c 20 49 6e 74  ilename(pDb, Int
33c90 50 74 72 2e 5a 65 72 6f 29 29 3b 0d 0a 0d 0a 20  Ptr.Zero));.... 
33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
33cb0 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6e 6e  sing (SQLiteConn
33cc0 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f  ection connectio
33cd0 6e 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f  n = new SQLiteCo
33ce0 6e 6e 65 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20  nnection(..     
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d00 20 20 20 70 44 62 2c 20 66 69 6c 65 4e 61 6d 65     pDb, fileName
33d10 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
33d20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c 54    SQLiteVirtualT
33d50 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 6e 75 6c  able table = nul
33d60 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
33d70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
33d80 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rror = null;....
33d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33da0 20 20 20 20 69 66 20 28 28 63 72 65 61 74 65 20      if ((create 
33db0 26 26 20 43 72 65 61 74 65 28 63 6f 6e 6e 65 63  && Create(connec
33dc0 74 69 6f 6e 2c 20 70 41 75 78 2c 0d 0a 20 20 20  tion, pAux,..   
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33de0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53           SQLiteS
33df0 74 72 69 6e 67 2e 53 74 72 69 6e 67 41 72 72 61  tring.StringArra
33e00 79 46 72 6f 6d 55 74 66 38 53 69 7a 65 41 6e 64  yFromUtf8SizeAnd
33e10 49 6e 74 50 74 72 28 61 72 67 63 2c 0d 0a 20 20  IntPtr(argc,..  
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e30 20 20 20 20 20 20 20 20 20 20 61 72 67 76 29 2c            argv),
33e40 20 72 65 66 20 74 61 62 6c 65 2c 20 72 65 66 20   ref table, ref 
33e50 65 72 72 6f 72 29 20 3d 3d 20 53 51 4c 69 74 65  error) == SQLite
33e60 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
33e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33e80 20 20 20 20 20 20 20 20 20 20 28 21 63 72 65 61            (!crea
33e90 74 65 20 26 26 20 43 6f 6e 6e 65 63 74 28 63 6f  te && Connect(co
33ea0 6e 6e 65 63 74 69 6f 6e 2c 20 70 41 75 78 2c 0d  nnection, pAux,.
33eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
33ed0 69 74 65 53 74 72 69 6e 67 2e 53 74 72 69 6e 67  iteString.String
33ee0 41 72 72 61 79 46 72 6f 6d 55 74 66 38 53 69 7a  ArrayFromUtf8Siz
33ef0 65 41 6e 64 49 6e 74 50 74 72 28 61 72 67 63 2c  eAndIntPtr(argc,
33f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
33f20 67 76 29 2c 20 72 65 66 20 74 61 62 6c 65 2c 20  gv), ref table, 
33f30 72 65 66 20 65 72 72 6f 72 29 20 3d 3d 20 53 51  ref error) == SQ
33f40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
33f50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
33f60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 20 20 20 69 66 20 28 74 61 62 6c 65 20 21 3d 20     if (table != 
33f90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
33fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 56                pV
33fd0 74 61 62 20 3d 20 54 61 62 6c 65 54 6f 49 6e 74  tab = TableToInt
33fe0 50 74 72 28 74 61 62 6c 65 29 3b 0d 0a 20 20 20  Ptr(table);..   
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34010 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
34020 4f 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Ok;..           
34030 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34050 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
34060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34090 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51       pError = SQ
340a0 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49  LiteString.Utf8I
340b0 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28  ntPtrFromString(
340c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340e0 20 20 22 6e 6f 20 74 61 62 6c 65 20 77 61 73 20    "no table was 
340f0 63 72 65 61 74 65 64 22 29 3b 0d 0a 20 20 20 20  created");..    
34100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34110 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
34120 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34140 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
34150 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34170 20 20 20 20 20 20 20 70 45 72 72 6f 72 20 3d 20         pError = 
34180 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74 66  SQLiteString.Utf
34190 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69 6e  8IntPtrFromStrin
341a0 67 28 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  g(error);..     
341b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
341c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
341d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
341e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
341f0 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
34200 20 65 29 20 2f 2a 20 4e 4f 54 45 3a 20 4d 75 73   e) /* NOTE: Mus
34210 74 20 63 61 74 63 68 20 41 4c 4c 2e 20 2a 2f 0d  t catch ALL. */.
34220 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
34230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34240 70 45 72 72 6f 72 20 3d 20 53 51 4c 69 74 65 53  pError = SQLiteS
34250 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
34260 46 72 6f 6d 53 74 72 69 6e 67 28 65 2e 54 6f 53  FromString(e.ToS
34270 74 72 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20  tring());..     
34280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34290 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
342a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
342b0 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20 7d  rror;..        }
342c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
342d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34310 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
34320 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
34330 20 20 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20        /// Calls 
34340 6f 6e 65 20 6f 66 20 74 68 65 20 76 69 72 74 75  one of the virtu
34350 61 6c 20 74 61 62 6c 65 20 66 69 6e 61 6c 69 7a  al table finaliz
34360 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2e 0d 0a  ation methods...
34370 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
34380 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
34390 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
343a0 22 64 65 73 74 72 6f 79 22 3e 0d 0a 20 20 20 20  "destroy">..    
343b0 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
343c0 20 74 6f 20 63 61 6c 6c 20 74 68 65 20 3c 73 65   to call the <se
343d0 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4d  e cref="ISQLiteM
343e0 61 6e 61 67 65 64 4d 6f 64 75 6c 65 2e 44 65 73  anagedModule.Des
343f0 74 72 6f 79 22 20 2f 3e 0d 0a 20 20 20 20 20 20  troy" />..      
34400 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 3b 20 6f 74    /// method; ot
34410 68 65 72 77 69 73 65 2c 20 74 68 65 0d 0a 20 20  herwise, the..  
34420 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
34430 72 65 66 3d 22 49 53 51 4c 69 74 65 4d 61 6e 61  ref="ISQLiteMana
34440 67 65 64 4d 6f 64 75 6c 65 2e 44 69 73 63 6f 6e  gedModule.Discon
34450 6e 65 63 74 22 20 2f 3e 20 6d 65 74 68 6f 64 20  nect" /> method 
34460 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
34470 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20   /// called...  
34480 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
34490 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
344a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74  <param name="pVt
344b0 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ab">..        //
344c0 2f 20 54 68 65 20 6e 61 74 69 76 65 20 70 6f 69  / The native poi
344d0 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69  nter to the sqli
344e0 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64  te3_vtab derived
344f0 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20   structure...   
34500 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
34510 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  >..        /// <
34520 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20  returns>..      
34530 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
34540 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
34550 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ode...        //
34560 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
34570 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 51        private SQ
34580 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65  LiteErrorCode De
34590 73 74 72 6f 79 4f 72 44 69 73 63 6f 6e 6e 65 63  stroyOrDisconnec
345a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
345b0 62 6f 6f 6c 20 64 65 73 74 72 6f 79 2c 0d 0a 20  bool destroy,.. 
345c0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
345d0 72 20 70 56 74 61 62 0d 0a 20 20 20 20 20 20 20  r pVtab..       
345e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
345f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
34600 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
34610 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34620 20 20 20 53 51 4c 69 74 65 56 69 72 74 75 61 6c     SQLiteVirtual
34630 54 61 62 6c 65 20 74 61 62 6c 65 20 3d 20 54 61  Table table = Ta
34640 62 6c 65 46 72 6f 6d 49 6e 74 50 74 72 28 70 56  bleFromIntPtr(pV
34650 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tab);....       
34660 20 20 20 20 20 20 20 20 20 69 66 20 28 74 61 62           if (tab
34670 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le != null)..   
34680 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346a0 20 20 20 20 69 66 20 28 28 64 65 73 74 72 6f 79      if ((destroy
346b0 20 26 26 20 28 44 65 73 74 72 6f 79 28 74 61 62   && (Destroy(tab
346c0 6c 65 29 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  le) == SQLiteErr
346d0 6f 72 43 6f 64 65 2e 4f 6b 29 29 20 7c 7c 0d 0a  orCode.Ok)) ||..
346e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346f0 20 20 20 20 20 20 20 20 28 21 64 65 73 74 72 6f          (!destro
34700 79 20 26 26 20 28 44 69 73 63 6f 6e 6e 65 63 74  y && (Disconnect
34710 28 74 61 62 6c 65 29 20 3d 3d 20 53 51 4c 69 74  (table) == SQLit
34720 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 29  eErrorCode.Ok)))
34730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34740 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34760 20 69 66 20 28 74 61 62 6c 65 73 20 21 3d 20 6e   if (tables != n
34770 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 20 20 74 61 62 6c 65 73 2e 52 65 6d 6f 76 65 28    tables.Remove(
347a0 70 56 74 61 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  pVtab);....     
347b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347c0 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
347d0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 20  ErrorCode.Ok;.. 
347e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
34800 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34810 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
34820 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
34830 74 69 6f 6e 20 65 29 20 2f 2a 20 4e 4f 54 45 3a  tion e) /* NOTE:
34840 20 4d 75 73 74 20 63 61 74 63 68 20 41 4c 4c 2e   Must catch ALL.
34850 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
34860 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34870 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
34880 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
34890 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
348a0 74 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20  there is no way 
348b0 74 6f 20 72 65 70 6f 72 74 20 74 68 65 20 65 72  to report the er
348c0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
348d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
348e0 6e 64 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20  ndition back to 
348f0 74 68 65 20 63 61 6c 6c 65 72 3b 20 74 68 65 72  the caller; ther
34900 65 66 6f 72 65 2c 20 75 73 65 20 74 68 65 0d 0a  efore, use the..
34910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34920 2f 2f 20 20 20 20 20 20 20 6c 6f 67 67 69 6e 67  //       logging
34930 20 66 61 63 69 6c 69 74 79 20 69 6e 73 74 65 61   facility instea
34940 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
34950 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
34960 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
34970 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34990 20 20 20 20 69 66 20 28 4c 6f 67 45 78 63 65 70      if (LogExcep
349a0 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20  tions)..        
349b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
349c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349d0 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
349e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
349f0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
34a00 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65  teLog.LogMessage
34a10 28 53 51 4c 69 74 65 42 61 73 65 2e 43 4f 52 5f  (SQLiteBase.COR_
34a20 45 5f 45 58 43 45 50 54 49 4f 4e 2c 0d 0a 20 20  E_EXCEPTION,..  
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a40 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
34a50 2e 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  .Format(CultureI
34a60 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
34a70 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  re,..           
34a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a90 20 22 43 61 75 67 68 74 20 65 78 63 65 70 74 69   "Caught excepti
34aa0 6f 6e 20 69 6e 20 5c 22 7b 30 7d 5c 22 20 6d 65  on in \"{0}\" me
34ab0 74 68 6f 64 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  thod: {1}",..   
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ad0 20 20 20 20 20 20 20 20 20 64 65 73 74 72 6f 79           destroy
34ae0 20 3f 20 22 78 44 65 73 74 72 6f 79 22 20 3a 20   ? "xDestroy" : 
34af0 22 78 44 69 73 63 6f 6e 6e 65 63 74 22 2c 20 65  "xDisconnect", e
34b00 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
34b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
34b20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
34b40 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
34b50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
34b70 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
34b80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
34b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34ba0 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
34bb0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
34bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34bd0 20 20 20 46 72 65 65 54 61 62 6c 65 28 70 56 74     FreeTable(pVt
34be0 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ab);..          
34bf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34c00 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
34c10 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
34c20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
34c30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
34c80 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
34c90 6e 20 53 74 61 74 69 63 20 45 72 72 6f 72 20 48  n Static Error H
34ca0 61 6e 64 6c 69 6e 67 20 48 65 6c 70 65 72 20 4d  andling Helper M
34cb0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
34cc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
34cd0 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
34ce0 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
34cf0 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
34d00 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
34d10 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
34d20 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
34d30 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
34d40 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
34d50 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
34d60 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
34d70 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
34d80 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
34d90 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
34da0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
34db0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
34dc0 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
34dd0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
34de0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
34df0 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
34e00 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
34e10 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
34e20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
34e30 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
34e40 20 6e 61 6d 65 3d 22 70 56 74 61 62 22 3e 0d 0a   name="pVtab">..
34e50 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
34e60 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74  native pointer t
34e70 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  o the sqlite3_vt
34e80 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
34e90 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ture...        /
34ea0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
34eb0 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
34ec0 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72 73 22  name="logErrors"
34ed0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
34ee0 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20  on-zero if this 
34ef0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 68  error message sh
34f00 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c 6f 67  ould also be log
34f10 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d 0a 20  ged using the.. 
34f20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20         /// <see 
34f30 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f 67 22  cref="SQLiteLog"
34f40 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20   /> class...    
34f50 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
34f60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
34f70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72  aram name="error
34f80 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ">..        /// 
34f90 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
34fa0 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  e...        /// 
34fb0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
34fc0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
34fd0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e 6f 6e  .        /// Non
34fe0 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63 65  -zero upon succe
34ff0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ss...        ///
35000 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
35010 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
35020 74 69 63 20 62 6f 6f 6c 20 53 65 74 54 61 62 6c  tic bool SetTabl
35030 65 45 72 72 6f 72 28 0d 0a 20 20 20 20 20 20 20  eError(..       
35040 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
35050 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
35060 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 56         IntPtr pV
35070 74 61 62 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tab,..          
35080 20 20 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73    bool logErrors
35090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
350a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
350b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
350c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
350d0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
350e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
350f0 20 20 20 20 20 20 20 69 66 20 28 6c 6f 67 45 72         if (logEr
35100 72 6f 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20  rors)..         
35110 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
35130 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
35140 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ge(SQLiteErrorCo
35150 64 65 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20  de.Error,..     
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
35180 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72  (CultureInfo.Cur
35190 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 20 20 20 20 22 56 69 72 74 75 61 6c 20 74        "Virtual t
351c0 61 62 6c 65 20 65 72 72 6f 72 3a 20 7b 30 7d 22  able error: {0}"
351d0 2c 20 65 72 72 6f 72 29 29 3b 20 2f 2a 20 74 68  , error)); /* th
351e0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
351f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35200 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35210 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
35220 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
35240 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
35250 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35260 20 20 20 20 20 20 20 20 20 69 66 20 28 70 56 74           if (pVt
35270 61 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ab == IntPtr.Zer
35280 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
35290 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
352a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
352b0 20 69 6e 74 20 6f 66 66 73 65 74 20 3d 20 49 6e   int offset = In
352c0 74 50 74 72 2e 53 69 7a 65 20 2b 20 73 69 7a 65  tPtr.Size + size
352d0 6f 66 28 69 6e 74 29 3b 0d 0a 20 20 20 20 20 20  of(int);..      
352e0 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 45 72        IntPtr pEr
352f0 72 6f 72 20 3d 20 53 51 4c 69 74 65 4d 61 72 73  ror = SQLiteMars
35300 68 61 6c 2e 52 65 61 64 49 6e 74 50 74 72 28 70  hal.ReadIntPtr(p
35310 56 74 61 62 2c 20 6f 66 66 73 65 74 29 3b 0d 0a  Vtab, offset);..
35320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
35330 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50   (pError != IntP
35340 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
35350 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35360 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d           SQLiteM
35370 65 6d 6f 72 79 2e 46 72 65 65 28 70 45 72 72 6f  emory.Free(pErro
35380 72 29 3b 20 70 45 72 72 6f 72 20 3d 20 49 6e 74  r); pError = Int
35390 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
353a0 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
353b0 65 4d 61 72 73 68 61 6c 2e 57 72 69 74 65 49 6e  eMarshal.WriteIn
353c0 74 50 74 72 28 70 56 74 61 62 2c 20 6f 66 66 73  tPtr(pVtab, offs
353d0 65 74 2c 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20  et, pError);..  
353e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
353f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
35400 72 72 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  rror == null).. 
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35420 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
35430 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
35440 73 75 63 63 65 73 73 20 3d 20 66 61 6c 73 65 3b  success = false;
35450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35460 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
35470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35480 20 20 20 20 70 45 72 72 6f 72 20 3d 20 53 51 4c      pError = SQL
35490 69 74 65 53 74 72 69 6e 67 2e 55 74 66 38 49 6e  iteString.Utf8In
354a0 74 50 74 72 46 72 6f 6d 53 74 72 69 6e 67 28 65  tPtrFromString(e
354b0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
354c0 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61          SQLiteMa
354d0 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
354e0 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c  r(pVtab, offset,
354f0 20 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20   pError);..     
35500 20 20 20 20 20 20 20 20 20 20 20 73 75 63 63 65             succe
35510 73 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ss = true;..    
35520 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35530 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
35540 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
35560 66 20 28 21 73 75 63 63 65 73 73 20 26 26 20 28  f (!success && (
35570 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74 72  pError != IntPtr
35580 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20  .Zero))..       
35590 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
355a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355b0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46 72 65  SQLiteMemory.Fre
355c0 65 28 70 45 72 72 6f 72 29 3b 0d 0a 20 20 20 20  e(pError);..    
355d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355e0 70 45 72 72 6f 72 20 3d 20 49 6e 74 50 74 72 2e  pError = IntPtr.
355f0 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
35600 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35610 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35620 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 75         return su
35630 63 63 65 73 73 3b 0d 0a 20 20 20 20 20 20 20 20  ccess;..        
35640 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
35650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35690 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
356a0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
356b0 20 20 20 20 20 20 20 2f 2f 2f 20 41 72 72 61 6e         /// Arran
356c0 67 65 73 20 66 6f 72 20 74 68 65 20 73 70 65 63  ges for the spec
356d0 69 66 69 65 64 20 65 72 72 6f 72 20 6d 65 73 73  ified error mess
356e0 61 67 65 20 74 6f 20 62 65 20 70 6c 61 63 65 64  age to be placed
356f0 20 69 6e 74 6f 20 74 68 65 0d 0a 20 20 20 20 20   into the..     
35700 20 20 20 2f 2f 2f 20 7a 45 72 72 4d 73 67 20 66     /// zErrMsg f
35710 69 65 6c 64 20 6f 66 20 61 20 73 71 6c 69 74 65  ield of a sqlite
35720 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20 73  3_vtab derived s
35730 74 72 75 63 74 75 72 65 2c 20 66 72 65 65 69 6e  tructure, freein
35740 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  g the..        /
35750 2f 2f 20 65 78 69 73 74 69 6e 67 20 65 72 72 6f  // existing erro
35760 72 20 6d 65 73 73 61 67 65 2c 20 69 66 20 61 6e  r message, if an
35770 79 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y...        /// 
35780 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
35790 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
357a0 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20  ame="module">.. 
357b0 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c         /// The <
357c0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
357d0 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
357e0 74 20 69 6e 73 74 61 6e 63 65 20 74 6f 20 62 65  t instance to be
357f0 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20   used...        
35800 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
35810 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
35820 20 6e 61 6d 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   name="table">..
35830 20 20 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20          /// The 
35840 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
35850 65 56 69 72 74 75 61 6c 54 61 62 6c 65 22 20 2f  eVirtualTable" /
35860 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
35870 65 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20  e used to..     
35880 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70 20 74 68     /// lookup th
35890 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65 72  e native pointer
358a0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f   to the sqlite3_
358b0 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
358c0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
358d0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
358e0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61         /// <para
358f0 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72 6f 72  m name="logError
35900 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  s">..        ///
35910 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
35920 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  s error message 
35930 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65 20 6c  should also be l
35940 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68 65 0d  ogged using the.
35950 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
35960 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4c 6f  e cref="SQLiteLo
35970 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20  g" /> class...  
35980 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
35990 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  m>..        /// 
359a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
359b0 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  or">..        //
359c0 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73  / The error mess
359d0 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  age...        //
359e0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
359f0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
35a00 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 4e  >..        /// N
35a10 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63  on-zero upon suc
35a20 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  cess...        /
35a30 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
35a40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
35a50 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74 54 61  tatic bool SetTa
35a60 62 6c 65 45 72 72 6f 72 28 0d 0a 20 20 20 20 20  bleError(..     
35a70 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64         SQLiteMod
35a80 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20  ule module,..   
35a90 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56           SQLiteV
35aa0 69 72 74 75 61 6c 54 61 62 6c 65 20 74 61 62 6c  irtualTable tabl
35ab0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
35ac0 62 6f 6f 6c 20 6c 6f 67 45 72 72 6f 72 73 2c 0d  bool logErrors,.
35ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
35ae0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
35af0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
35b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35b10 20 69 66 20 28 74 61 62 6c 65 20 3d 3d 20 6e 75   if (table == nu
35b20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
35b30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
35b40 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
35b50 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 20 3d    IntPtr pVtab =
35b60 20 74 61 62 6c 65 2e 4e 61 74 69 76 65 48 61 6e   table.NativeHan
35b70 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
35b80 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d      if (pVtab ==
35b90 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
35ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35bb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
35bc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35bd0 72 6e 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72  rn SetTableError
35be0 28 6d 6f 64 75 6c 65 2c 20 70 56 74 61 62 2c 20  (module, pVtab, 
35bf0 6c 6f 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72  logErrors, error
35c00 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
35c10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
35c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
35c70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
35c80 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20     /// Arranges 
35c90 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65  for the specifie
35ca0 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  d error message 
35cb0 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74  to be placed int
35cc0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
35cd0 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64  // zErrMsg field
35ce0 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74   of a sqlite3_vt
35cf0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
35d00 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68  ture, freeing th
35d10 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  e..        /// e
35d20 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65  xisting error me
35d30 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
35d40 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
35d50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
35d60 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
35d70 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20  "module">..     
35d80 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
35d90 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
35da0 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
35db0 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65  stance to be use
35dc0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
35dd0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
35de0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
35df0 65 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20  e="pCursor">..  
35e00 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61        /// The na
35e10 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20  tive pointer to 
35e20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
35e30 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65 64 20  _cursor derived 
35e40 73 74 72 75 63 74 75 72 65 0d 0a 20 20 20 20 20  structure..     
35e50 20 20 20 2f 2f 2f 20 75 73 65 64 20 74 6f 20 67     /// used to g
35e60 65 74 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f  et the native po
35e70 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c  inter to the sql
35e80 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76 65  ite3_vtab derive
35e90 64 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 73  d..        /// s
35ea0 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20  tructure...     
35eb0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
35ec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
35ed0 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72 72  ram name="logErr
35ee0 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  ors">..        /
35ef0 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  // Non-zero if t
35f00 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61 67  his error messag
35f10 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62 65  e should also be
35f20 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74 68   logged using th
35f30 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c  e..        /// <
35f40 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
35f50 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d 0a  Log" /> class...
35f60 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61          /// </pa
35f70 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ram>..        //
35f80 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65  / <param name="e
35f90 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20 20  rror">..        
35fa0 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 6d 65  /// The error me
35fb0 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20 20  ssage...        
35fc0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
35fd0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
35fe0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
35ff0 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73   Non-zero upon s
36000 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  uccess...       
36010 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
36020 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
36030 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 65 74   static bool Set
36040 43 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20 20  CursorError(..  
36050 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
36060 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
36070 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
36080 74 72 20 70 43 75 72 73 6f 72 2c 0d 0a 20 20 20  tr pCursor,..   
36090 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
360a0 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20 20 20  gErrors,..      
360b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
360c0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
360d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
360e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 43            if (pC
360f0 75 72 73 6f 72 20 3d 3d 20 49 6e 74 50 74 72 2e  ursor == IntPtr.
36100 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
36110 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
36120 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
36130 20 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62      IntPtr pVtab
36140 20 3d 20 54 61 62 6c 65 46 72 6f 6d 43 75 72 73   = TableFromCurs
36150 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 43 75 72 73  or(module, pCurs
36160 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
36170 20 20 20 20 69 66 20 28 70 56 74 61 62 20 3d 3d      if (pVtab ==
36180 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
36190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
361a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
361b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
361c0 72 6e 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72  rn SetTableError
361d0 28 6d 6f 64 75 6c 65 2c 20 70 56 74 61 62 2c 20  (module, pVtab, 
361e0 6c 6f 67 45 72 72 6f 72 73 2c 20 65 72 72 6f 72  logErrors, error
361f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
36200 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
36260 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
36270 20 20 20 2f 2f 2f 20 41 72 72 61 6e 67 65 73 20     /// Arranges 
36280 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65  for the specifie
36290 64 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  d error message 
362a0 74 6f 20 62 65 20 70 6c 61 63 65 64 20 69 6e 74  to be placed int
362b0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 2f  o the..        /
362c0 2f 2f 20 7a 45 72 72 4d 73 67 20 66 69 65 6c 64  // zErrMsg field
362d0 20 6f 66 20 61 20 73 71 6c 69 74 65 33 5f 76 74   of a sqlite3_vt
362e0 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75 63  ab derived struc
362f0 74 75 72 65 2c 20 66 72 65 65 69 6e 67 20 74 68  ture, freeing th
36300 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 65  e..        /// e
36310 78 69 73 74 69 6e 67 20 65 72 72 6f 72 20 6d 65  xisting error me
36320 73 73 61 67 65 2c 20 69 66 20 61 6e 79 2e 0d 0a  ssage, if any...
36330 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75          /// </su
36340 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20  mmary>..        
36350 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
36360 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 20  "module">..     
36370 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
36380 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
36390 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  le" /> object in
363a0 73 74 61 6e 63 65 20 74 6f 20 62 65 20 75 73 65  stance to be use
363b0 64 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  d...        /// 
363c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
363d0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
363e0 65 3d 22 63 75 72 73 6f 72 22 3e 0d 0a 20 20 20  e="cursor">..   
363f0 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65       /// The <se
36400 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 56 69  e cref="SQLiteVi
36410 72 74 75 61 6c 54 61 62 6c 65 43 75 72 73 6f 72  rtualTableCursor
36420 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
36430 61 6e 63 65 20 75 73 65 64 20 74 6f 0d 0a 20 20  ance used to..  
36440 20 20 20 20 20 20 2f 2f 2f 20 6c 6f 6f 6b 75 70        /// lookup
36450 20 74 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e   the native poin
36460 74 65 72 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ter to the sqlit
36470 65 33 5f 76 74 61 62 20 64 65 72 69 76 65 64 20  e3_vtab derived 
36480 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20 20 20  structure...    
36490 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
364a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70  ..        /// <p
364b0 61 72 61 6d 20 6e 61 6d 65 3d 22 6c 6f 67 45 72  aram name="logEr
364c0 72 6f 72 73 22 3e 0d 0a 20 20 20 20 20 20 20 20  rors">..        
364d0 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20  /// Non-zero if 
364e0 74 68 69 73 20 65 72 72 6f 72 20 6d 65 73 73 61  this error messa
364f0 67 65 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 62  ge should also b
36500 65 20 6c 6f 67 67 65 64 20 75 73 69 6e 67 20 74  e logged using t
36510 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
36520 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
36530 65 4c 6f 67 22 20 2f 3e 20 63 6c 61 73 73 2e 0d  eLog" /> class..
36540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
36550 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 2f  aram>..        /
36560 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
36570 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 20 20 20  error">..       
36580 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 6d   /// The error m
36590 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 20 20 20  essage...       
365a0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
365b0 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
365c0 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
365d0 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20  / Non-zero upon 
365e0 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...      
365f0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
36600 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
36610 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53 65  e static bool Se
36620 74 43 75 72 73 6f 72 45 72 72 6f 72 28 0d 0a 20  tCursorError(.. 
36630 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
36640 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d  eModule module,.
36650 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
36660 69 74 65 56 69 72 74 75 61 6c 54 61 62 6c 65 43  iteVirtualTableC
36670 75 72 73 6f 72 20 63 75 72 73 6f 72 2c 0d 0a 20  ursor cursor,.. 
36680 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36690 6c 6f 67 45 72 72 6f 72 73 2c 0d 0a 20 20 20 20  logErrors,..    
366a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
366b0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
366c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
366d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
366e0 63 75 72 73 6f 72 20 3d 3d 20 6e 75 6c 6c 29 0d  cursor == null).
366f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36700 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
36710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
36720 74 50 74 72 20 70 43 75 72 73 6f 72 20 3d 20 63  tPtr pCursor = c
36730 75 72 73 6f 72 2e 4e 61 74 69 76 65 48 61 6e 64  ursor.NativeHand
36740 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  le;....         
36750 20 20 20 69 66 20 28 70 43 75 72 73 6f 72 20 3d     if (pCursor =
36760 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
36770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36780 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
36790 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
367a0 75 72 6e 20 53 65 74 43 75 72 73 6f 72 45 72 72  urn SetCursorErr
367b0 6f 72 28 6d 6f 64 75 6c 65 2c 20 70 43 75 72 73  or(module, pCurs
367c0 6f 72 2c 20 6c 6f 67 45 72 72 6f 72 73 2c 20 65  or, logErrors, e
367d0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
367e0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
367f0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
36800 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
36810 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
36820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36860 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
36870 50 72 6f 74 65 63 74 65 64 20 4d 65 6d 62 65 72  Protected Member
36880 73 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  s..        #regi
36890 6f 6e 20 4d 6f 64 75 6c 65 20 48 65 6c 70 65 72  on Module Helper
368a0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
368b0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
368c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 47 65 74  .        /// Get
368d0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
368e0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
368f0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
36900 22 20 2f 3e 20 69 6e 74 65 72 66 61 63 65 0d 0a  " /> interface..
36910 20 20 20 20 20 20 20 20 2f 2f 2f 20 69 6d 70 6c          /// impl
36920 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 62 65  ementation to be
36930 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74   used when creat
36940 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73  ing the native s
36950 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 0d 0a 20  qlite3_module.. 
36960 20 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 75 63         /// struc
36970 74 75 72 65 2e 20 20 44 65 72 69 76 65 64 20 63  ture.  Derived c
36980 6c 61 73 73 65 73 20 6d 61 79 20 6f 76 65 72 72  lasses may overr
36990 69 64 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20  ide this method 
369a0 74 6f 20 73 75 70 70 6c 79 20 61 6e 0d 0a 20 20  to supply an..  
369b0 20 20 20 20 20 20 2f 2f 2f 20 61 6c 74 65 72 6e        /// altern
369c0 61 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ate implementati
369d0 6f 6e 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20  on for the <see 
369e0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74  cref="ISQLiteNat
369f0 69 76 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20  iveModule" />.. 
36a00 20 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72         /// inter
36a10 66 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f  face...        /
36a20 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
36a30 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75         /// <retu
36a40 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  rns>..        //
36a50 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
36a60 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f  "ISQLiteNativeMo
36a70 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65 72 66 61  dule" /> interfa
36a80 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ce implementatio
36a90 6e 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f  n to..        //
36aa0 2f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  / be used when p
36ab0 6f 70 75 6c 61 74 69 6e 67 20 74 68 65 20 6e 61  opulating the na
36ac0 74 69 76 65 20 73 71 6c 69 74 65 33 5f 6d 6f 64  tive sqlite3_mod
36ad0 75 6c 65 20 73 74 72 75 63 74 75 72 65 2e 20 20  ule structure.  
36ae0 49 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  If..        /// 
36af0 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c  the returned val
36b00 75 65 20 69 73 20 6e 75 6c 6c 2c 20 74 68 65 20  ue is null, the 
36b10 70 72 69 76 61 74 65 20 6d 65 74 68 6f 64 73 20  private methods 
36b20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 0d  provided by the.
36b30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  .        /// <se
36b40 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f  e cref="SQLiteMo
36b50 64 75 6c 65 22 20 2f 3e 20 63 6c 61 73 73 20 61  dule" /> class a
36b60 6e 64 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 74  nd relating to t
36b70 68 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  he..        /// 
36b80 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
36b90 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 22 20  teNativeModule" 
36ba0 2f 3e 20 69 6e 74 65 72 66 61 63 65 20 20 77 69  /> interface  wi
36bb0 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 0d 0a 20  ll be used to.. 
36bc0 20 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74         /// creat
36bd0 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  e the necessary 
36be0 64 65 6c 65 67 61 74 65 73 2e 0d 0a 20 20 20 20  delegates...    
36bf0 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
36c00 73 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  s>..        prot
36c10 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 49 53  ected virtual IS
36c20 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
36c30 65 20 47 65 74 4e 61 74 69 76 65 4d 6f 64 75 6c  e GetNativeModul
36c40 65 49 6d 70 6c 28 29 0d 0a 20 20 20 20 20 20 20  eImpl()..       
36c50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36c60 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 20 2f 2a 20  return null; /* 
36c70 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 62 75  NOTE: Use the bu
36c80 69 6c 74 2d 69 6e 20 64 65 66 61 75 6c 74 20 64  ilt-in default d
36c90 65 6c 65 67 61 74 65 73 2e 20 2a 2f 0d 0a 20 20  elegates. */..  
36ca0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36cb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36d00 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
36d10 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
36d20 20 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74   Creates and ret
36d30 75 72 6e 73 20 74 68 65 20 3c 73 65 65 20 63 72  urns the <see cr
36d40 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
36d50 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
36d60 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61       /// interfa
36d70 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ce implementatio
36d80 6e 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  n corresponding 
36d90 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a  to the current..
36da0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65          /// <see
36db0 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64   cref="SQLiteMod
36dc0 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69  ule" /> object i
36dd0 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
36de0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
36df0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 72  ..        /// <r
36e00 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 20 20 20  eturns>..       
36e10 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72   /// The <see cr
36e20 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
36e30 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 69 6e 74 65  eModule" /> inte
36e40 72 66 61 63 65 20 69 6d 70 6c 65 6d 65 6e 74 61  rface implementa
36e50 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  tion..        //
36e60 2f 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  / corresponding 
36e70 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 3c  to the current <
36e80 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
36e90 4d 6f 64 75 6c 65 22 20 2f 3e 20 6f 62 6a 65 63  Module" /> objec
36ea0 74 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 69  t..        /// i
36eb0 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 20 20  nstance...      
36ec0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
36ed0 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74 65 63  ..        protec
36ee0 74 65 64 20 76 69 72 74 75 61 6c 20 49 53 51 4c  ted virtual ISQL
36ef0 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 20  iteNativeModule 
36f00 43 72 65 61 74 65 4e 61 74 69 76 65 4d 6f 64 75  CreateNativeModu
36f10 6c 65 49 6d 70 6c 28 29 0d 0a 20 20 20 20 20 20  leImpl()..      
36f20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36f30 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
36f40 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 28 74  teNativeModule(t
36f50 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  his);..        }
36f60 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
36f70 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
36f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36fd0 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
36fe0 65 20 54 61 62 6c 65 20 48 65 6c 70 65 72 20 4d  e Table Helper M
36ff0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
37000 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
37010 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63         /// Alloc
37020 61 74 65 73 20 61 20 6e 61 74 69 76 65 20 73 71  ates a native sq
37030 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69 76  lite3_vtab deriv
37040 65 64 20 73 74 72 75 63 74 75 72 65 20 61 6e 64  ed structure and
37050 20 72 65 74 75 72 6e 73 20 61 0d 0a 20 20 20 20   returns a..    
37060 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65 20 70      /// native p
37070 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0d 0a 20  ointer to it... 
37080 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d         /// </sum
37090 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
370a0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
370b0 20 20 20 20 20 20 2f 2f 2f 20 41 20 6e 61 74 69        /// A nati
370c0 76 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20  ve pointer to a 
370d0 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76  native sqlite3_v
370e0 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72 75  tab derived stru
370f0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  cture...        
37100 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
37110 20 20 20 20 20 20 20 20 70 72 6f 74 65 63 74 65          protecte
37120 64 20 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72  d virtual IntPtr
37130 20 41 6c 6c 6f 63 61 74 65 54 61 62 6c 65 28 29   AllocateTable()
37140 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
37150 20 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a           int siz
37160 65 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65  e = Marshal.Size
37170 4f 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20  Of(typeof(..    
37180 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
37190 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
371a0 73 71 6c 69 74 65 33 5f 76 74 61 62 29 29 3b 0d  sqlite3_vtab));.
371b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
371c0 65 74 75 72 6e 20 53 51 4c 69 74 65 4d 65 6d 6f  eturn SQLiteMemo
371d0 72 79 2e 41 6c 6c 6f 63 61 74 65 28 73 69 7a 65  ry.Allocate(size
371e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
371f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
37200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  ....        /// 
37250 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
37260 20 20 20 2f 2f 2f 20 5a 65 72 6f 73 20 6f 75 74     /// Zeros out
37270 20 74 68 65 20 66 69 65 6c 64 73 20 6f 66 20 61   the fields of a
37280 20 6e 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f   native sqlite3_
37290 76 74 61 62 20 64 65 72 69 76 65 64 20 73 74 72  vtab derived str
372a0 75 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20  ucture...       
372b0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
372c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61  .        /// <pa
372d0 72 61 6d 20 6e 61 6d 65 3d 22 70 56 74 61 62 22  ram name="pVtab"
372e0 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 54  >..        /// T
372f0 68 65 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65  he native pointe
37300 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20  r to the native 
37310 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
37320 69 76 65 64 20 73 74 72 75 63 74 75 72 65 20 74  ived structure t
37330 6f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 7a  o..        /// z
37340 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ero...        //
37350 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
37360 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 76 69      protected vi
37370 72 74 75 61 6c 20 76 6f 69 64 20 5a 65 72 6f 54  rtual void ZeroT
37380 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  able(..         
37390 20 20 20 49 6e 74 50 74 72 20 70 56 74 61 62 0d     IntPtr pVtab.
373a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
373b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
373c0 20 20 20 20 20 20 20 69 66 20 28 70 56 74 61 62         if (pVtab
373d0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
373e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
373f0 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
37400 20 20 20 20 20 20 20 20 20 69 6e 74 20 6f 66 66           int off
37410 73 65 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  set = 0;....    
37420 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d 61          SQLiteMa
37430 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 50 74  rshal.WriteIntPt
37440 72 28 70 56 74 61 62 2c 20 6f 66 66 73 65 74 2c  r(pVtab, offset,
37450 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
37460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 66  ..            of
37470 66 73 65 74 20 2b 3d 20 49 6e 74 50 74 72 2e 53  fset += IntPtr.S
37480 69 7a 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ize;....        
37490 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68 61      SQLiteMarsha
374a0 6c 2e 57 72 69 74 65 49 6e 74 33 32 28 70 56 74  l.WriteInt32(pVt
374b0 61 62 2c 20 6f 66 66 73 65 74 2c 20 30 29 3b 0d  ab, offset, 0);.
374c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ...            o
374d0 66 66 73 65 74 20 2b 3d 20 73 69 7a 65 6f 66 28  ffset += sizeof(
374e0 69 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  int);....       
374f0 20 20 20 20 20 53 51 4c 69 74 65 4d 61 72 73 68       SQLiteMarsh
37500 61 6c 2e 57 72 69 74 65 49 6e 74 50 74 72 28 70  al.WriteIntPtr(p
37510 56 74 61 62 2c 20 6f 66 66 73 65 74 2c 20 49 6e  Vtab, offset, In
37520 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20  tPtr.Zero);..   
37530 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37540 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
37550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37580 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37590 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
375a0 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20  y>..        /// 
375b0 46 72 65 65 73 20 61 20 6e 61 74 69 76 65 20 73  Frees a native s
375c0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
375d0 63 74 75 72 65 20 75 73 69 6e 67 20 74 68 65 20  cture using the 
375e0 70 72 6f 76 69 64 65 64 20 6e 61 74 69 76 65 0d  provided native.
375f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 70 6f 69  .        /// poi
37600 6e 74 65 72 20 74 6f 20 69 74 2e 0d 0a 20 20 20  nter to it...   
37610 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
37620 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ry>..        ///
37630 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 56   <param name="pV
37640 74 61 62 22 3e 0d 0a 20 20 20 20 20 20 20 20 2f  tab">..        /
37650 2f 2f 20 41 20 6e 61 74 69 76 65 20 70 6f 69 6e  // A native poin
37660 74 65 72 20 74 6f 20 61 20 6e 61 74 69 76 65 20  ter to a native 
37670 73 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72  sqlite3_vtab der
37680 69 76 65 64 20 73 74 72 75 63 74 75 72 65 2e 0d  ived structure..
37690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  .        /// </p
376a0 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70  aram>..        p
376b0 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
376c0 20 76 6f 69 64 20 46 72 65 65 54 61 62 6c 65 28   void FreeTable(
376d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
376e0 74 50 74 72 20 70 56 74 61 62 0d 0a 20 20 20 20  tPtr pVtab..    
376f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
37700 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37710 20 20 53 65 74 54 61 62 6c 65 45 72 72 6f 72 28    SetTableError(
37720 70 56 74 61 62 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  pVtab, null);.. 
37730 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
37740 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 56 74  eMemory.Free(pVt
37750 61 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ab);..        }.
37760 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
37770 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
37780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
377c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
377d0 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65    #region Native
377e0 20 43 75 72 73 6f 72 20 48 65 6c 70 65 72 20 4d   Cursor Helper M
377f0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
37800 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
37810 20 20 20 20 20 20 20 2f 2f 2f 20 41 6c 6c 6f 63         /// Alloc
37820 61 74 65 73 20 61 20 6e 61 74 69 76 65 20 73 71  ates a native sq
37830 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
37840 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  r derived struct
37850 75 72 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20  ure and..       
37860 20 2f 2f 2f 20 72 65 74 75 72 6e 73 20 61 20 6e   /// returns a n
37870 61 74 69 76 65 20 70 6f 69 6e 74 65 72 20 74 6f  ative pointer to
37880 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f   it...        //
37890 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
378a0 20 20 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72        /// <retur
378b0 6e 73 3e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ns>..        ///
378c0 20 41 20 6e 61 74 69 76 65 20 70 6f 69 6e 74 65   A native pointe
378d0 72 20 74 6f 20 61 20 6e 61 74 69 76 65 20 73 71  r to a native sq
378e0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
378f0 72 20 64 65 72 69 76 65 64 20 73 74 72 75 63 74  r derived struct
37900 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ure...        //
37910 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
37920 20 20 20 20 20 20 70 72 6f 74 65 63 74 65 64 20        protected 
37930 76 69 72 74 75 61 6c 20 49 6e 74 50 74 72 20 41  virtual IntPtr A
37940 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 29 0d  llocateCursor().
37950 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
37960 20 20 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65          int size
37970 20 3d 20 4d 61 72 73 68 61 6c 2e 53 69 7a 65 4f   = Marshal.SizeO
37980 66 28 74 79 70 65 6f 66 28 0d 0a 20 20 20 20 20  f(typeof(..     
37990 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66             Unsaf
379a0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
379b0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
379c0 6f 72 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or));....       
379d0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
379e0 74 65 4d 65 6d 6f 72 79 2e 41 6c 6c 6f 63 61 74  teMemory.Allocat
379f0 65 28 73 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20  e(size);..      
37a00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
37a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37a60 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
37a70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 46 72 65  .        /// Fre
37a80 65 73 20 61 20 6e 61 74 69 76 65 20 73 71 6c 69  es a native sqli
37a90 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
37aa0 73 74 72 75 63 74 75 72 65 20 75 73 69 6e 67 20  structure using 
37ab0 74 68 65 20 70 72 6f 76 69 64 65 64 0d 0a 20 20  the provided..  
37ac0 20 20 20 20 20 20 2f 2f 2f 20 6e 61 74 69 76 65        /// native
37ad0 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 0d   pointer to it..
37ae0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  .        /// </s
37af0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20  ummary>..       
37b00 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
37b10 3d 22 70 43 75 72 73 6f 72 22 3e 0d 0a 20 20 20  ="pCursor">..   
37b20 20 20 20 20 20 2f 2f 2f 20 41 20 6e 61 74 69 76       /// A nativ
37b30 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 6e  e pointer to a n
37b40 61 74 69 76 65 20 73 71 6c 69 74 65 33 5f 76 74  ative sqlite3_vt
37b50 61 62 5f 63 75 72 73 6f 72 20 64 65 72 69 76 65  ab_cursor derive
37b60 64 20 73 74 72 75 63 74 75 72 65 2e 0d 0a 20 20  d structure...  
37b70 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
37b80 6d 3e 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 74  m>..        prot
37b90 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76 6f  ected virtual vo
37ba0 69 64 20 46 72 65 65 43 75 72 73 6f 72 28 0d 0a  id FreeCursor(..
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
37bc0 74 72 20 70 43 75 72 73 6f 72 0d 0a 20 20 20 20  tr pCursor..    
37bd0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
37be0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37bf0 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
37c00 72 65 65 28 70 43 75 72 73 6f 72 29 3b 0d 0a 20  ree(pCursor);.. 
37c10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37c20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
37c30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37c80 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
37c90 6f 6e 20 53 74 61 74 69 63 20 54 61 62 6c 65 20  on Static Table 
37ca0 4c 6f 6f 6b 75 70 20 4d 65 74 68 6f 64 73 0d 0a  Lookup Methods..
37cb0 20 20 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d          /// <sum
37cc0 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 20 20 2f  mary>..        /
37cd0 2f 2f 20 52 65 61 64 73 20 61 6e 64 20 72 65 74  // Reads and ret
37ce0 75 72 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20  urns the native 
37cf0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 73  pointer to the s
37d00 71 6c 69 74 65 33 5f 76 74 61 62 20 64 65 72 69  qlite3_vtab deri
37d10 76 65 64 0d 0a 20 20 20 20 20 20 20 20 2f